[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