Author: jbellis
Date: Thu Feb 24 15:08:31 2011
New Revision: 1074182

URL: http://svn.apache.org/viewvc?rev=1074182&view=rev
Log:
cache IndexInfo comparators in AbstractType objects
patch by slebresne; reviewed by jbellis for CASSANDRA-2239

Modified:
    
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AbstractType.java
    
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/io/sstable/IndexHelper.java

Modified: 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AbstractType.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AbstractType.java?rev=1074182&r1=1074181&r2=1074182&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AbstractType.java
 (original)
+++ 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AbstractType.java
 Thu Feb 24 15:08:31 2011
@@ -26,6 +26,7 @@ import java.util.Collection;
 import java.util.Comparator;
 
 import org.apache.cassandra.db.IColumn;
+import static org.apache.cassandra.io.sstable.IndexHelper.IndexInfo;
 
 /**
  * Specifies a Comparator for a specific type of ByteBuffer.
@@ -37,6 +38,28 @@ import org.apache.cassandra.db.IColumn;
  */
 public abstract class AbstractType implements Comparator<ByteBuffer>
 {
+    public final Comparator<IndexInfo> indexComparator;
+    public final Comparator<IndexInfo> indexReverseComparator;
+
+    protected AbstractType()
+    {
+        final AbstractType that = this;
+        indexComparator = new Comparator<IndexInfo>()
+        {
+            public int compare(IndexInfo o1, IndexInfo o2)
+            {
+                return that.compare(o1.lastName, o2.lastName);
+            }
+        };
+        indexReverseComparator = new Comparator<IndexInfo>()
+        {
+            public int compare(IndexInfo o1, IndexInfo o2)
+            {
+                return that.compare(o1.firstName, o2.firstName);
+            }
+        };
+    }
+
     /** get a string representation of the bytes suitable for log messages */
     public abstract String getString(ByteBuffer bytes);
 

Modified: 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/io/sstable/IndexHelper.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/io/sstable/IndexHelper.java?rev=1074182&r1=1074181&r2=1074182&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/io/sstable/IndexHelper.java
 (original)
+++ 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/io/sstable/IndexHelper.java
 Thu Feb 24 15:08:31 2011
@@ -151,21 +151,7 @@ public class IndexHelper
 
     public static Comparator<IndexInfo> getComparator(final AbstractType 
nameComparator, boolean reversed)
     {
-        return reversed
-              ? new Comparator<IndexInfo>()
-                {
-                    public int compare(IndexInfo o1, IndexInfo o2)
-                    {
-                        return nameComparator.compare(o1.firstName, 
o2.firstName);
-                    }
-                }
-              : new Comparator<IndexInfo>()
-                {
-                    public int compare(IndexInfo o1, IndexInfo o2)
-                    {
-                        return nameComparator.compare(o1.lastName, 
o2.lastName);
-                    }
-                };
+        return reversed ? nameComparator.indexReverseComparator : 
nameComparator.indexComparator;
     }
 
     public static class IndexInfo


Reply via email to