You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2015/11/04 17:15:46 UTC

svn commit: r1712580 - /sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ContextualParameters.java

Author: desruisseaux
Date: Wed Nov  4 16:15:38 2015
New Revision: 1712580

URL: http://svn.apache.org/viewvc?rev=1712580&view=rev
Log:
Try to share existing instances.

Modified:
    sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ContextualParameters.java

Modified: sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ContextualParameters.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ContextualParameters.java?rev=1712580&r1=1712579&r2=1712580&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ContextualParameters.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ContextualParameters.java [UTF-8] Wed Nov  4 16:15:38 2015
@@ -205,7 +205,7 @@ public class ContextualParameters extend
      * The inverse of {@link #normalize} or {@link #denormalize} matrices, computed when first needed.
      * Those matrices are cached only if {@link #isFrozen} is {@code true}.
      */
-    private transient MatrixSIS inverseNormalize, inverseDenormalize;
+    private transient Matrix inverseNormalize, inverseDenormalize;
 
     /**
      * The parameter values. Null elements in this array are empty slots available for adding new parameter values.
@@ -510,10 +510,27 @@ public class ContextualParameters extend
         Matrix m;
         if ((m = MathTransforms.getMatrix(n)) != null)   normalize = m;
         if ((m = MathTransforms.getMatrix(d)) != null) denormalize = m;
+        inverseNormalize   = unique(factory, inverseNormalize);
+        inverseDenormalize = unique(factory, inverseDenormalize);
         return factory.createConcatenatedTransform(factory.createConcatenatedTransform(n, kernel), d);
     }
 
     /**
+     * Invoked for opportunistically replacing inverse matrices by unique instances. We rely on the fact that
+     * SIS's {@link DefaultMathTransformFactory} implementation caches the {@code MathTransform} instances,
+     * and that SIS implementations of {@code MathTransform.getMatrix()} return a single immutable matrix.
+     */
+    private static Matrix unique(final MathTransformFactory factory, Matrix matrix) throws FactoryException {
+        if (matrix != null) {
+            final Matrix m = MathTransforms.getMatrix(factory.createAffineTransform(matrix));
+            if (m != null) {
+                matrix = m;
+            }
+        }
+        return matrix;
+    }
+
+    /**
      * Marks this contextual parameter as unmodifiable.
      *
      * @see #ensureModifiable()