[jboss-svn-commits] JBL Code SVN: r6362 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Sep 22 10:58:56 EDT 2006


Author: mark.proctor at jboss.com
Date: 2006-09-22 10:58:54 -0400 (Fri, 22 Sep 2006)
New Revision: 6362

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/TupleHashTable.java
Log:
JBRULES-498 Optimised HashMap impl
-HashTable just for ReteTuples

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/TupleHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/TupleHashTable.java	2006-09-22 14:55:40 UTC (rev 6361)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/TupleHashTable.java	2006-09-22 14:58:54 UTC (rev 6362)
@@ -0,0 +1,81 @@
+/**
+ * 
+ */
+package org.drools.util;
+
+import org.drools.reteoo.ReteTuple;
+
+public class TupleHashTable extends AbstractHashTable {
+    public TupleHashTable() {
+        this( 16,
+              0.75f );
+    }
+
+    public TupleHashTable(int capacity,
+                         float loadFactor) {
+        super( capacity,
+               loadFactor );
+    }
+
+    public Object add(ReteTuple tuple) {
+        int hashCode = tuple.hashCode();
+        int index = indexOf( hashCode,
+                             table.length );
+
+        this.table[index] = tuple;
+
+        if ( this.size++ >= this.threshold ) {
+            resize( 2 * this.table.length );
+        }
+        return null;
+    }
+
+    public Object get(ReteTuple tuple) {
+        int hashCode = tuple.hashCode();
+        int index = indexOf( hashCode,
+                             table.length );
+
+        ReteTuple current = (ReteTuple) this.table[index];
+        while ( current != null ) {
+            if ( hashCode == current.hashCode() && tuple.equals( current ) ) {
+                return current;
+            }
+            current = (ReteTuple) current.getNext();
+        }
+        return null;
+    }
+
+    public Object remove(ReteTuple tuple) {
+        int hashCode = tuple.hashCode();
+        int index = indexOf( hashCode,
+                             table.length );
+
+        ReteTuple previous = (ReteTuple) this.table[index];
+        ReteTuple current = previous;
+        while ( current != null ) {
+            ReteTuple next = (ReteTuple) current.getNext();
+            if ( hashCode == current.hashCode() && tuple.equals( current ) ) {
+                if ( previous == current ) {
+                    this.table[index] = next;
+                } else {
+                    previous.setNext( next );
+                }
+                current.setNext( null );
+                this.size--;
+                return current;
+            }
+            previous = current;
+            current = next;
+        }
+        return current;
+    }
+    
+    public Entry getBucket(int hashCode) {
+        return this.table[ indexOf( hashCode, table.length ) ];
+    }    
+
+    protected int indexOf(int hashCode,
+                          int dataSize) {
+        return hashCode & (dataSize - 1);
+    }
+}
\ No newline at end of file




More information about the jboss-svn-commits mailing list