You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2009/09/10 10:58:55 UTC

svn commit: r813319 - /jackrabbit/branches/1.5/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractRecord.java

Author: mreutegg
Date: Thu Sep 10 08:58:55 2009
New Revision: 813319

URL: http://svn.apache.org/viewvc?rev=813319&view=rev
Log:
JCR-1988: AbstractRecord does inefficient List.indexOf()

Modified:
    jackrabbit/branches/1.5/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractRecord.java

Modified: jackrabbit/branches/1.5/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractRecord.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractRecord.java?rev=813319&r1=813318&r2=813319&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractRecord.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractRecord.java Thu Sep 10 08:58:55 2009
@@ -32,12 +32,13 @@
 import org.apache.jackrabbit.spi.Path;
 import org.apache.jackrabbit.uuid.Constants;
 import org.apache.jackrabbit.uuid.UUID;
+import org.apache.commons.collections.BidiMap;
+import org.apache.commons.collections.bidimap.DualHashBidiMap;
 
 import javax.jcr.NamespaceException;
 import java.io.IOException;
 import java.io.StringReader;
 import java.io.StringWriter;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -56,9 +57,9 @@
     private static final byte UUID_INDEX = 'I';
 
     /**
-     * UUID index.
+     * Maps NodeId to Integer index.
      */
-    private final ArrayList uuidIndex = new ArrayList();
+    private final BidiMap nodeIdIndex = new DualHashBidiMap();
 
     /**
      * Namespace resolver.
@@ -218,13 +219,13 @@
             if (index == -1) {
                 return null;
             } else {
-                return (NodeId) uuidIndex.get(index);
+                return (NodeId) nodeIdIndex.getKey(new Integer(index));
             }
         } else if (uuidType == UUID_LITERAL) {
             byte[] b = new byte[Constants.UUID_BYTE_LENGTH];
             readFully(b);
             NodeId nodeId = new NodeId(new UUID(b));
-            uuidIndex.add(nodeId);
+            nodeIdIndex.put(nodeId, new Integer(nodeIdIndex.size()));
             return nodeId;
         } else {
             String msg = "Unknown UUID type found: " + uuidType;
@@ -266,10 +267,12 @@
      * @return cache index of existing entry or <code>-1</code> to indicate the entry was added
      */
     private int getOrCreateIndex(NodeId nodeId) {
-        int index = uuidIndex.indexOf(nodeId);
-        if (index == -1) {
-            uuidIndex.add(nodeId);
+        Integer index = (Integer) nodeIdIndex.get(nodeId);
+        if (index == null) {
+            nodeIdIndex.put(nodeId, new Integer(nodeIdIndex.size()));
+            return -1;
+        } else {
+            return index.intValue();
         }
-        return index;
     }
 }
\ No newline at end of file