You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2011/03/21 23:13:04 UTC

svn commit: r1083990 - /directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/name/Rdn.java

Author: elecharny
Date: Mon Mar 21 22:13:03 2011
New Revision: 1083990

URL: http://svn.apache.org/viewvc?rev=1083990&view=rev
Log:
Defined a pre-computed hashcode stored in the instance

Modified:
    directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/name/Rdn.java

Modified: directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/name/Rdn.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/name/Rdn.java?rev=1083990&r1=1083989&r2=1083990&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/name/Rdn.java (original)
+++ directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/name/Rdn.java Mon Mar 21 22:13:03 2011
@@ -188,6 +188,9 @@ public final class Rdn implements Clonea
 
     /** the schema manager */
     private SchemaManager schemaManager;
+    
+    /** The computed hashcode */
+    private volatile int h;
 
 
     /**
@@ -214,6 +217,7 @@ public final class Rdn implements Clonea
         upName = "";
         normName = "";
         normalized = false;
+        h = 0;
     }
 
 
@@ -253,6 +257,8 @@ public final class Rdn implements Clonea
             normName = "";
             normalized = false;
         }
+
+        hashCode();
     }
 
 
@@ -300,6 +306,8 @@ public final class Rdn implements Clonea
             // As strange as it seems, the Rdn is *not* normalized against the schema at this point
             normalized = false;
         }
+
+        hashCode();
     }
 
 
@@ -334,10 +342,14 @@ public final class Rdn implements Clonea
         switch ( rdn.size() )
         {
             case 0:
+                hashCode();
+
                 return;
 
             case 1:
                 this.ava = (Ava) rdn.ava.clone();
+                hashCode();
+
                 return;
 
             default:
@@ -351,6 +363,8 @@ public final class Rdn implements Clonea
                     avaTypes.put( currentAva.getNormType(), currentAva );
                 }
 
+                hashCode();
+
                 return;
         }
     }
@@ -411,6 +425,8 @@ public final class Rdn implements Clonea
                 normName = sb.toString();
                 break;
         }
+
+        hashCode();
     }
 
 
@@ -435,6 +451,7 @@ public final class Rdn implements Clonea
         this.upName = savedUpName;
         normalized = true;
         this.schemaManager = schemaManager;
+        hashCode();
 
         return this;
     }
@@ -480,6 +497,8 @@ public final class Rdn implements Clonea
                 ava = new Ava( schemaManager, upType, normalizedType, upValue, normalizedValue );
                 nbAvas = 1;
                 avaType = normalizedType;
+                hashCode();
+
                 return;
 
             case 1:
@@ -503,9 +522,10 @@ public final class Rdn implements Clonea
                 Ava newAva = new Ava( schemaManager, upType, normalizedType, upValue, normalizedValue );
                 avas.add( newAva );
                 avaTypes.put( normalizedType, newAva );
-
                 nbAvas++;
-                break;
+                hashCode();
+
+                return;
 
         }
     }
@@ -531,6 +551,8 @@ public final class Rdn implements Clonea
                 ava = value;
                 nbAvas = 1;
                 avaType = normalizedType;
+                hashCode();
+
                 return;
 
             case 1:
@@ -553,8 +575,9 @@ public final class Rdn implements Clonea
                 // add a new Ava
                 avas.add( value );
                 avaTypes.put( normalizedType, value );
-
                 nbAvas++;
+                hashCode();
+
                 break;
         }
     }
@@ -576,6 +599,7 @@ public final class Rdn implements Clonea
         normName = "";
         upName = "";
         normalized = false;
+        h = 0;
     }
 
 
@@ -1324,31 +1348,34 @@ public final class Rdn implements Clonea
       */
     public int hashCode()
     {
-        int result = 37;
-
-        switch ( nbAvas )
+        if ( h == 0 )
         {
-            case 0:
-                // An empty Rdn
-                break;
-
-            case 1:
-                // We have a single Ava
-                result = result * 17 + ava.hashCode();
-                break;
-
-            default:
-                // We have more than one Ava
-
-                for ( Ava ata : avas )
-                {
-                    result = result * 17 + ata.hashCode();
-                }
-
-                break;
+            h = 37;
+    
+            switch ( nbAvas )
+            {
+                case 0:
+                    // An empty Rdn
+                    break;
+    
+                case 1:
+                    // We have a single Ava
+                    h = h * 17 + ava.hashCode();
+                    break;
+    
+                default:
+                    // We have more than one Ava
+    
+                    for ( Ava ata : avas )
+                    {
+                        h = h * 17 + ata.hashCode();
+                    }
+    
+                    break;
+            }
         }
 
-        return result;
+        return h;
     }
 
 
@@ -1424,6 +1451,8 @@ public final class Rdn implements Clonea
                 break;
         }
         
+        out.writeInt( h );
+        
         out.flush();
     }
 
@@ -1485,6 +1514,8 @@ public final class Rdn implements Clonea
 
                 break;
         }
+        
+        h = in.readInt();
     }