You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/01/22 16:13:25 UTC

[isis] 05/05: ISIS-1846 refactoring: less heap pollution on sequence compare

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 47790a6d47fe9d9d7cea84ac7710251ee1f3abb9
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jan 22 17:13:18 2018 +0100

    ISIS-1846 refactoring: less heap pollution on sequence compare
---
 .../isis/applib/internal/compare/$Comparators.java |  4 ++-
 .../compare/$Comparators_SequenceCompare.java      | 29 +++++++++++-----------
 2 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators.java b/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators.java
index d8f74b0..13908f6 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators.java
@@ -37,10 +37,12 @@ public final class $Comparators {
 
 	private $Comparators(){}
 	
+	private static final String DEWEY_SEPERATOR = ".";
+	
 	public static int deweyOrderCompare(
     		@Nullable final String sequence1, 
     		@Nullable final String sequence2) {
-		return $Comparators_SequenceCompare.compareNullLast(sequence1, sequence2, ".");
+		return $Comparators_SequenceCompare.compareNullLast(sequence1, sequence2, DEWEY_SEPERATOR);
 	}
 	
 	public static final Comparator<String> deweyOrderComparator = $Comparators::deweyOrderCompare;
diff --git a/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators_SequenceCompare.java b/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators_SequenceCompare.java
index d8d01c8..2ebf914 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators_SequenceCompare.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators_SequenceCompare.java
@@ -47,11 +47,11 @@ final class $Comparators_SequenceCompare {
             return -1; // non-null before null
         }
 
-        final String[] components1 = componentsFor(sequence1, separator);
-        final String[] components2 = componentsFor(sequence2, separator);
+        final StringTokenizer components1 = tokenizerFor(sequence1, separator);
+        final StringTokenizer components2 = tokenizerFor(sequence2, separator);
 
-        final int length1 = components1.length;
-        final int length2 = components2.length;
+        final int length1 = components1.countTokens();
+        final int length2 = components2.countTokens();
 
         // shouldn't happen but just in case.
         if (length1 == 0 && length2 == 0) {
@@ -74,15 +74,18 @@ final class $Comparators_SequenceCompare {
                 return 0;
             }
             // we have this component on each side
+            
+            final String token1 = components1.nextToken();
+            final String token2 = components2.nextToken();
 
             int componentCompare = 0;
             try {
-                final Integer c1 = Integer.valueOf(components1[n]);
-                final Integer c2 = Integer.valueOf(components2[n]);
-                componentCompare = c1.compareTo(c2);
+                final int c1 = Integer.parseInt(token1);
+                final int c2 = Integer.parseInt(token2);
+                componentCompare = Integer.compare(c1, c2);
             } catch (final NumberFormatException nfe) {
                 // not integers compare as strings
-                componentCompare = components1[n].compareTo(components2[n]);
+                componentCompare = token1.compareTo(token2);
             }
 
             if (componentCompare != 0) {
@@ -93,13 +96,9 @@ final class $Comparators_SequenceCompare {
         }
     }
 
-    private static String[] componentsFor(final String sequence, final String separator) {
-        final StringTokenizer tokens = new StringTokenizer(sequence, separator, false);
-        final String[] components = new String[tokens.countTokens()];
-        for (int i = 0; tokens.hasMoreTokens(); i++) {
-            components[i] = tokens.nextToken();
-        }
-        return components;
+    private static StringTokenizer tokenizerFor(final String sequence, final String separator) {
+        return new StringTokenizer(sequence, separator, false);
     }
+    
 	
 }

-- 
To stop receiving notification emails like this one, please contact
ahuber@apache.org.