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 2005/09/30 12:09:27 UTC

svn commit: r292691 - in /incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/name: Path.java QName.java

Author: mreutegg
Date: Fri Sep 30 03:09:23 2005
New Revision: 292691

URL: http://svn.apache.org/viewcvs?rev=292691&view=rev
Log:
Some performance improvements
- Reuse Matcher instance in a threadlocal
- avoid string creation in QName.compareTo()

Modified:
    incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/name/Path.java
    incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/name/QName.java

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/name/Path.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/name/Path.java?rev=292691&r1=292690&r2=292691&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/name/Path.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/name/Path.java Fri Sep 30 03:09:23 2005
@@ -128,6 +128,15 @@
             + "(\\[([1-9]\\d*)\\])?");
 
     /**
+     * Matcher instance as thread-local.
+     */
+    private static final ThreadLocal PATH_ELEMENT_MATCHER = new ThreadLocal() {
+        protected Object initialValue() {
+            return PATH_ELEMENT_PATTERN.matcher("dummy");
+        }
+    };
+
+    /**
      * the elements of this path
      */
     private final PathElement[] elements;
@@ -375,7 +384,8 @@
                 // ignore trailing '/'
                 break;
             }
-            Matcher matcher = PATH_ELEMENT_PATTERN.matcher(elem);
+            Matcher matcher = (Matcher) PATH_ELEMENT_MATCHER.get();
+            matcher.reset(elem);
             if (matcher.matches()) {
                 if (resolver == null) {
                     // check only

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/name/QName.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/name/QName.java?rev=292691&r1=292690&r2=292691&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/name/QName.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/name/QName.java Fri Sep 30 03:09:23 2005
@@ -90,6 +90,15 @@
             "(([^ /:\\[\\]*'\"|](?:[^/:\\[\\]*'\"|]*[^ /:\\[\\]*'\"|])?):)?"
             + "([^ /:\\[\\]*'\"|](?:[^/:\\[\\]*'\"|]*[^ /:\\[\\]*'\"|])?)");
 
+    /**
+     * Matcher instance as thread-local.
+     */
+    private static final ThreadLocal NAME_MATCHER = new ThreadLocal() {
+        protected Object initialValue() {
+            return NAME_PATTERN.matcher("dummy");
+        }
+    };
+
     /** The memorized hash code of this qualified name. */
     private transient int hash;
 
@@ -235,7 +244,9 @@
         String prefix;
         String localName;
 
-        Matcher matcher = NAME_PATTERN.matcher(jcrName);
+
+        Matcher matcher = (Matcher) NAME_MATCHER.get();
+        matcher.reset(jcrName);
         if (matcher.matches()) {
             // check for prefix (group 1)
             if (matcher.group(1) != null) {
@@ -412,6 +423,8 @@
      * @see Comparable#compareTo(Object)
      */
     public int compareTo(Object o) throws ClassCastException {
-        return toString().compareTo(((QName) o).toString());
+        QName other = (QName) o;
+        int result = namespaceURI.compareTo(other.namespaceURI);
+        return (result != 0) ? result : localName.compareTo(other.localName);
     }
 }