Details
-
Improvement
-
Status: Reopened
-
Minor
-
Resolution: Unresolved
-
0.5, 0.6, 0.7, 0.8, 1.0, 1.1, 1.2, 1.3, 1.4
-
None
Description
Add the 4 variants (for float[] and double[] arrays) of the following method in AbstractMathTransform:
protected void transform(double[] srcPts, int srcOff, int srcInc, double[] dstPts, int dstOff, int dstInc, int numPts) throws TransformException;
The difference compared to existing methods is the addition of srcInc and dstInc parameters. Then, move the AbstractMathTransform default implementations of transform(…) methods under those 4 new methods. The default implementation of previous methods would redirect to the new ones like below:
@Override public void transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) throws TransformException { transform(srcPts, srcOff, getSourceDimensions(), dstPts, dstOff, getTargetDimensions(), numPts); }
This approach should ensure MathTransform methods consistency no matter if a sub-class override the old methods or the new ones. Modify all Apache SIS implementations that override the old methods for overriding the new ones instead.
With those news methods, we can modify PassThroughTransform implementation for invoking those methods on the sub-transform with srcInc and dstInc values increased by firstAffectedOrdinate + numTrailingOrdinates. The performance benefit may be important since PassThroughTransform can hardly implement the transform method in an efficient way otherwise. We will still need the current transformOverlapping private method however as a fallback when array regions overlap.
This approach would also make easier to concatenate the matrices of linear transforms. In the current implementation we lost a concatenation opportunity if one linear transform is the last MathTransform (in a chain of a concatenated transforms) inside the PassThroughTransform, while the other linear transform is the first MathTransform outside the PassThroughTransform. We could move the former linear transform outside the PassThroughTransform, but it cause confusing WKT to be formatted if the transforms inside the PassThroughTransform have a ContextualParameters. We expect that this problem would be solved with the fix proposed in this issue.