sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Desruisseaux (JIRA)" <>
Subject [jira] [Updated] (SIS-318) Support PassThroughTransform directly into AbstractMathTransform
Date Thu, 29 Nov 2018 13:22:00 GMT


Martin Desruisseaux updated SIS-318:
    Fix Version/s: 1.1

> Support PassThroughTransform directly into AbstractMathTransform
> ----------------------------------------------------------------
>                 Key: SIS-318
>                 URL:
>             Project: Spatial Information Systems
>          Issue Type: Improvement
>          Components: Referencing
>    Affects Versions: 0.5, 0.6, 0.7, 0.8
>            Reporter: Martin Desruisseaux
>            Assignee: Martin Desruisseaux
>            Priority: Minor
>              Labels: performance
>             Fix For: 1.1
> Add the 4 variants (for {{float[]}} and {{double[]}} arrays) of the following method
in {{AbstractMathTransform}}:
> {code:java}
> protected void transform(double[] srcPts, int srcOff, int srcInc,
>                          double[] dstPts, int dstOff, int dstInc, int numPts) throws
> {code}
> 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:
> {code:java}
> @Override
> public void transform(double[] srcPts, int srcOff,
>                       double[] dstPts, int dstOff, int numPts) throws TransformException
> {
>     transform(srcPts, srcOff, getSourceDimensions(),
>               dstPts, dstOff, getTargetDimensions(), numPts);
> }
> {code}
> 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.

This message was sent by Atlassian JIRA

View raw message