You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2014/02/10 17:02:13 UTC
svn commit: r1566669 -
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/id/NodeId.java
Author: jukka
Date: Mon Feb 10 16:02:13 2014
New Revision: 1566669
URL: http://svn.apache.org/r1566669
Log:
JCR-3721: Slow and actively called NodeId.toString()
Drop table lookups to squeeze out a few more nanoseconds out of NodeId.toString()
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/id/NodeId.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/id/NodeId.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/id/NodeId.java?rev=1566669&r1=1566668&r2=1566669&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/id/NodeId.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/id/NodeId.java Mon Feb 10 16:02:13 2014
@@ -243,21 +243,6 @@ public class NodeId implements ItemId, C
//--------------------------------------------------------------< Object >
- final static String[] digits = new String[256];
- static {
- for ( int i=0; i<digits.length; ++i ) {
- digits[i] = String.format("%02x", i);
- }
- }
-
- final static int[] indexes = {
- 0, 1, 2, 3, 4, 5, 6, 7,
- 9, 10, 11, 12,
- 14, 15, 16, 17,
- 19, 20, 21, 22,
- 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35
- };
-
/**
* Returns the UUID string representation of this identifier.
*
@@ -265,21 +250,33 @@ public class NodeId implements ItemId, C
* @return UUID string
*/
public String toString() {
- //return new UUID(msb, lsb).toString();
- final char[] retval = new char[36];
- retval[8] = retval[13] = retval[18] = retval[23] = '-';
- final byte[] data = getRawBytes();
- for ( int i=0; i<16; ++i ) {
- int pos = data[i];
- if ( pos < 0 )
- pos += 256;
- final String v = digits[pos];
- retval[indexes[i*2]] = v.charAt(0);
- retval[indexes[i*2 + 1]] = v.charAt(1);
- }
+ char[] retval = new char[36];
+ hex4(retval, 0, msb >>> 48);
+ hex4(retval, 4, msb >>> 32);
+ retval[8] = '-';
+ hex4(retval, 9, msb >>> 16);
+ retval[13] = '-';
+ hex4(retval, 14, msb);
+ retval[18] = '-';
+ hex4(retval, 19, lsb >>> 48);
+ retval[23] = '-';
+ hex4(retval, 24, lsb >>> 32);
+ hex4(retval, 28, lsb >>> 16);
+ hex4(retval, 32, lsb);
return new String(retval);
}
+ private static final void hex4(char[] c, int index, long value) {
+ for (int i = 0; i < 4; i++) {
+ long v = (value >>> (12 - i * 4)) & 0xf;
+ if (v < 10) {
+ c[index + i] = (char) (v + '0');
+ } else {
+ c[index + i] = (char) (v - 10 + 'a');
+ }
+ }
+ }
+
/**
* Compares two UUID for equality.
*