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