[jboss-svn-commits] JBL Code SVN: r6773 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/common main/java/org/drools/reteoo main/java/org/drools/util test/java/org/drools/reteoo test/java/org/drools/spi

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Oct 12 19:46:26 EDT 2006


Author: mark.proctor at jboss.com
Date: 2006-10-12 19:46:18 -0400 (Thu, 12 Oct 2006)
New Revision: 6773

Removed:
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/HashedObjectSinkListTest.java
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EqualityAssertMapComparator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EqualityKeyComparator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectHashTable.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHashTable.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FieldIndexHashTable.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ObjectHashMap.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/TupleHashTable.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/spi/MockConstraint.java
Log:
JBRULES-498 Optimised HashMap implementations
-removed the need for fastmap and  identitymap

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2006-10-12 23:43:33 UTC (rev 6772)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2006-10-12 23:46:18 UTC (rev 6773)
@@ -50,6 +50,7 @@
 import org.drools.spi.GlobalResolver;
 import org.drools.spi.PropagationContext;
 import org.drools.util.FastMap;
+import org.drools.util.ObjectHashMap;
 import org.drools.util.PrimitiveLongMap;
 import org.drools.util.concurrent.locks.Lock;
 import org.drools.util.concurrent.locks.ReentrantLock;
@@ -87,7 +88,7 @@
     protected final Map                       globals                                       = new HashMap();
 
     /** Object-to-handle mapping. */
-    protected final Map                       assertMap;
+    private final ObjectHashMap               assertMap;
 
     protected Map                             queryResults                                  = Collections.EMPTY_MAP;
 
@@ -142,10 +143,12 @@
         this.tms = new TruthMaintenanceSystem( this );
         final RuleBaseConfiguration conf = this.ruleBase.getConfiguration();
 
+        this.assertMap = new ObjectHashMap();
+        
         if ( RuleBaseConfiguration.WM_BEHAVIOR_IDENTITY.equals( conf.getProperty( RuleBaseConfiguration.PROPERTY_ASSERT_BEHAVIOR ) ) ) {
-            this.assertMap = new FastMap().setKeyComparator( new IdentityAssertMapComparator( this.handleFactory.getFactHandleType() ) );
+            this.assertMap.setComparator( EqualityKeyComparator.getInstance() );
         } else {
-            this.assertMap = new FastMap().setKeyComparator( new EqualityAssertMapComparator( this.handleFactory.getFactHandleType() ) );
+            this.assertMap.setComparator( EqualityKeyComparator.getInstance() );
         }
 
         // Only takes effect if are using idententity behaviour for assert
@@ -395,7 +398,8 @@
     public List getFactHandles() {
         try {
             lock.lock();
-            return new ArrayList( this.assertMap.values() );
+            return  null;
+            //return new ArrayList( this.assertMap.values() );
         } finally {
             lock.unlock();
         }
@@ -409,7 +413,8 @@
      * @return
      */
     public Map getFactHandleMap() {
-        return Collections.unmodifiableMap( this.assertMap );
+        return  null;
+        //return Collections.unmodifiableMap( this.assertMap );
     }
 
     /**
@@ -418,23 +423,23 @@
     public List getObjects() {
         final List list = new ArrayList( this.assertMap.size() );
 
-        for ( final Iterator it = this.assertMap.keySet().iterator(); it.hasNext(); ) {
-            list.add( ((InternalFactHandle) it.next()).getObject() );
-        }
+//        for ( final Iterator it = this.assertMap.keySet().iterator(); it.hasNext(); ) {
+//            list.add( ((InternalFactHandle) it.next()).getObject() );
+//        }
         return list;
     }
 
     public List getObjects(final Class objectClass) {
         final List list = new ArrayList();
 
-        for ( final Iterator it = this.assertMap.keySet().iterator(); it.hasNext(); ) {
-            final Object object = ((InternalFactHandle) it.next()).getObject();
+//        for ( final Iterator it = this.assertMap.keySet().iterator(); it.hasNext(); ) {
+//            final Object object = ((InternalFactHandle) it.next()).getObject();
+//
+//            if ( objectClass.isInstance( object ) ) {
+//                list.add( object );
+//            }
+//        }
 
-            if ( objectClass.isInstance( object ) ) {
-                list.add( object );
-            }
-        }
-
         return list;
     }
 
@@ -549,7 +554,8 @@
                 // assert
                 handle = this.handleFactory.newFactHandle( object );
                 this.assertMap.put( handle,
-                                    handle );
+                                    handle,
+                                    false );
                 key = new EqualityKey( handle );
                 handle.setEqualityKey( key );
                 this.tms.put( key );
@@ -583,13 +589,15 @@
                         handle.setEqualityKey( key );
                         key.addFactHandle( handle );
                         this.assertMap.put( handle,
-                                            handle );
+                                            handle,
+                                            false );
                     }
 
                 } else {
                     handle = this.handleFactory.newFactHandle( object );
                     this.assertMap.put( handle,
-                                        handle );
+                                        handle,
+                                        false );
                     key.addFactHandle( handle );
                     handle.setEqualityKey( key );
                 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EqualityAssertMapComparator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EqualityAssertMapComparator.java	2006-10-12 23:43:33 UTC (rev 6772)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EqualityAssertMapComparator.java	2006-10-12 23:46:18 UTC (rev 6773)
@@ -15,18 +15,16 @@
  * limitations under the License.
  */
 
-import org.drools.util.FastComparator;
+import org.drools.util.AbstractHashTable.ObjectComparator;
 
-public class EqualityAssertMapComparator extends FastComparator {
+public class EqualityAssertMapComparator extends ObjectComparator {
     /**
      * 
      */
-    private static final long serialVersionUID = -8541249784769249399L;
+    private static final long serialVersionUID = -320L;
 
     private final Class       factHandleClass;
 
-    private final boolean     _rehash          = FastComparator.REHASH_SYSTEM_HASHCODE;
-
     public EqualityAssertMapComparator(final Class factHandleClass) {
         this.factHandleClass = factHandleClass;
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EqualityKeyComparator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EqualityKeyComparator.java	2006-10-12 23:43:33 UTC (rev 6772)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EqualityKeyComparator.java	2006-10-12 23:46:18 UTC (rev 6773)
@@ -15,13 +15,14 @@
  * limitations under the License.
  */
 
-import org.drools.util.FastComparator;
+import org.drools.util.AbstractHashTable.ObjectComparator;
 
-public class EqualityKeyComparator extends FastComparator {
+public class EqualityKeyComparator implements ObjectComparator {
     /**
      * 
      */
-    private static final long            serialVersionUID = -1368242567003294311L;
+    private static final long            serialVersionUID = 320L;
+    
     private static EqualityKeyComparator instance;
 
     public static EqualityKeyComparator getInstance() {
@@ -31,15 +32,20 @@
 
         return EqualityKeyComparator.instance;
     }
-
-    public int hashCodeOf(final Object obj) {
-        return obj.hashCode();
+    
+    public int hashCodeOf(Object key) {
+        int h = key.hashCode();
+        h += ~(h << 9);
+        h ^= (h >>> 14);
+        h += (h << 4);
+        h ^= (h >>> 10);
+        return h;
     }
 
     /**
      * Equality key  reverses the compare, so  that  the  key  controls the  comparison
      */
-    public boolean areEqual(final Object o1,
+    public boolean equal(final Object o1,
                             final Object o2) {
         return (o1 == null) ? (o2 == null) : (o1 == o2) || o2.equals( o1 );
     }
@@ -50,6 +56,6 @@
     }
 
     public String toString() {
-        return "direct";
+        return "[EqualityKeyComparator]";
     }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java	2006-10-12 23:43:33 UTC (rev 6772)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java	2006-10-12 23:46:18 UTC (rev 6773)
@@ -26,6 +26,7 @@
 import org.drools.spi.Activation;
 import org.drools.spi.PropagationContext;
 import org.drools.util.FastMap;
+import org.drools.util.ObjectHashMap;
 import org.drools.util.PrimitiveLongMap;
 
 /**
@@ -39,30 +40,36 @@
  *
  */
 public class TruthMaintenanceSystem implements Serializable {
+    
+    private static final long            serialVersionUID = 320L;
 
     private final AbstractWorkingMemory WorkingMemory;
 
-    private final PrimitiveLongMap      justifiedMap = new PrimitiveLongMap( 8,
-                                                                             32 );
+    private final PrimitiveLongMap      justifiedMap;
 
-    private final Map                   assertMap;
+    private final ObjectHashMap         assertMap;
 
     public TruthMaintenanceSystem(final AbstractWorkingMemory workingMemory) {
         this.WorkingMemory = workingMemory;
-        this.assertMap = new FastMap().setKeyComparator( EqualityKeyComparator.getInstance() );
+
+        this.justifiedMap = new PrimitiveLongMap( 8,
+                                                  32 );                
+        this.assertMap = new ObjectHashMap();
+        this.assertMap.setComparator( EqualityKeyComparator.getInstance() );
     }
 
     public PrimitiveLongMap getJustifiedMap() {
         return this.justifiedMap;
     }
 
-    public Map getAssertMap() {
+    public ObjectHashMap getAssertMap() {
         return this.assertMap;
     }
 
     public Object put(final EqualityKey key) {
         return this.assertMap.put( key,
-                                   key );
+                                   key, 
+                                   false );
     }
 
     public EqualityKey get(final EqualityKey key) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectHashTable.java	2006-10-12 23:43:33 UTC (rev 6772)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectHashTable.java	2006-10-12 23:46:18 UTC (rev 6773)
@@ -6,7 +6,6 @@
 
 public interface ObjectHashTable {
     public Iterator iterator();
-    public Iterator iterator(int hashCode);
     public Iterator iterator(ReteTuple tuple);
     
     public boolean add(InternalFactHandle handle, boolean checkExists);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java	2006-10-12 23:43:33 UTC (rev 6772)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java	2006-10-12 23:46:18 UTC (rev 6773)
@@ -38,7 +38,12 @@
         this.parent = null;
         this.recency = handle.getRecency();
         this.handle = handle;
-        this.hashCode = handle.hashCode();
+        int h = handle.hashCode();
+        h += ~(h << 9);
+        h ^= (h >>> 14);
+        h += (h << 4);
+        h ^= (h >>> 10);
+        this.hashCode = h;
     }
 
     public ReteTuple(final ReteTuple tuple) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java	2006-10-12 23:43:33 UTC (rev 6772)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java	2006-10-12 23:46:18 UTC (rev 6773)
@@ -160,16 +160,25 @@
         return this.size == 0;
     }
 
+//    protected int indexOf(int hashCode,
+//                          int dataSize) {
+//        int index = hashCode % dataSize;
+//        if ( index < 0 ) {
+//            index = index * -1;
+//        }
+//        return index;
+//    }
+    
     protected int indexOf(int hashCode,
                           int dataSize) {
-        int index = hashCode % dataSize;
-        if ( index < 0 ) {
-            index = index * -1;
-        }
-        return index;
-    }
+        return hashCode & (dataSize - 1);
+    }    
+    
+    public abstract Entry getBucket(Object object);
 
     public interface ObjectComparator {
+        public int hashCodeOf(Object object);
+        
         public boolean equal(Object object1,
                              Object object2);
     }
@@ -231,6 +240,15 @@
         public static ObjectComparator getInstance() {
             return INSTANCE;
         }
+        
+        public int hashCodeOf(Object key) {
+            int h = key.hashCode();
+            h += ~(h << 9);
+            h ^= (h >>> 14);
+            h += (h << 4);
+            h ^= (h >>> 10);
+            return h;
+        }
 
         private InstanceEquals() {
 
@@ -250,6 +268,15 @@
         public static ObjectComparator getInstance() {
             return INSTANCE;
         }
+        
+        public int hashCodeOf(Object key) {
+            int h = key.hashCode();
+            h += ~(h << 9);
+            h ^= (h >>> 14);
+            h += (h << 4);
+            h ^= (h >>> 10);
+            return h;
+        }
 
         private EqualityEquals() {
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHashTable.java	2006-10-12 23:43:33 UTC (rev 6772)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHashTable.java	2006-10-12 23:46:18 UTC (rev 6773)
@@ -6,6 +6,7 @@
 import org.drools.common.InternalFactHandle;
 import org.drools.reteoo.ObjectHashTable;
 import org.drools.reteoo.ReteTuple;
+import org.drools.util.ObjectHashMap.ObjectEntry;
 
 public class FactHashTable extends AbstractHashTable implements ObjectHashTable {
     private static final long serialVersionUID = 320L;    
@@ -34,7 +35,7 @@
     }
     
     public boolean add(InternalFactHandle handle, boolean checkExists) {
-        int hashCode =  handle.hashCode();
+        int hashCode =  this.comparator.hashCodeOf( handle );
         int index = indexOf( hashCode,
                              table.length );
 
@@ -62,7 +63,7 @@
     }
 
     public boolean contains(InternalFactHandle handle) {
-        int hashCode = handle.hashCode();
+        int hashCode = this.comparator.hashCodeOf( handle );
         int index = indexOf( hashCode,
                              table.length );
 
@@ -77,7 +78,7 @@
     }
 
     public boolean remove(InternalFactHandle handle) {
-        int hashCode = handle.hashCode();
+        int hashCode = this.comparator.hashCodeOf( handle );
         int index = indexOf( hashCode,
                              table.length );
 
@@ -101,16 +102,14 @@
         return false;
     }        
     
-    public Entry getBucket(int hashCode) {
-        int h = hashCode;
-        h += ~(h << 9);
-        h ^= (h >>> 14);
-        h += (h << 4);
-        h ^= (h >>> 10);
-        
-        return this.table[ indexOf( h, table.length ) ];
-    }       
+    public Entry getBucket(Object object) {
+        int hashCode = this.comparator.hashCodeOf( object );
+        int index = indexOf( hashCode,
+                             table.length );
 
+        return (ObjectEntry)  this.table[index];          
+    }         
+
     public int hash(Object key) {
         return key.hashCode();
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FieldIndexHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FieldIndexHashTable.java	2006-10-12 23:43:33 UTC (rev 6772)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FieldIndexHashTable.java	2006-10-12 23:46:18 UTC (rev 6773)
@@ -8,6 +8,7 @@
 import org.drools.reteoo.ReteTuple;
 import org.drools.rule.Declaration;
 import org.drools.spi.FieldExtractor;
+import org.drools.util.ObjectHashMap.ObjectEntry;
 
 public class FieldIndexHashTable extends AbstractHashTable
     implements
@@ -23,8 +24,6 @@
     private final int                   startResult;
 
     private FieldIndexHashTableIterator tupleValueIterator;
-
-    private HashCodeHashTableIterator   hashCodeValueIterator;
     
     private int factSize;
 
@@ -64,19 +63,20 @@
         return this.tupleValueIterator;
     }
 
-    public Iterator iterator(int hashCode) {
-        if ( this.hashCodeValueIterator == null ) {
-            this.hashCodeValueIterator = new HashCodeHashTableIterator( this );
-        }
-
-        this.hashCodeValueIterator.reset( hashCode );
-        return this.iterator();
-    }
-    
     public boolean isIndexed() {
         return true;
     }
+    
+    public Entry getBucket(Object object) {
+        InternalFactHandle handle = ( InternalFactHandle ) object;
+        Object value = this.extractor.getValue( handle.getObject() );
+        int hashCode = PRIME * startResult + ((value == null) ? 0 : this.comparator.hashCodeOf( value ) );
+        int index = indexOf( hashCode,
+                             table.length );
 
+        return (ObjectEntry)  this.table[index];          
+    }           
+
     /**
      * Fast re-usable iterator
      *
@@ -105,58 +105,8 @@
         public void reset(Entry entry) {
             this.entry = entry;
         }
-
-        public void reset(int hashCode) {
-            throw new UnsupportedOperationException( "FieldIndexHashTableIterator does not support reset(int hashCode)" );
-        }
     }
 
-    /**
-     * Fast re-usable iterator
-     *
-     */
-    public static class HashCodeHashTableIterator
-        implements
-        Iterator {
-        private AbstractHashTable hashTable;
-        private FactEntry         current;
-        private FactEntry         next;
-        private FieldIndexEntry   index;
-
-        public HashCodeHashTableIterator(AbstractHashTable hashTable) {
-            this.hashTable = hashTable;
-        }
-
-        /* (non-Javadoc)
-         * @see org.drools.util.Iterator#next()
-         */
-        public Entry next() {
-            this.current = (FactEntry) this.next;
-            if ( current == null ) {
-                this.index = (FieldIndexEntry) this.index.getNext();
-                if ( this.index == null ) {
-                    return null;
-                }
-                this.current = this.index.first;
-            }
-            this.next = (FactEntry) current.getNext();
-            return current;
-        }
-
-        /* (non-Javadoc)
-         * @see org.drools.util.Iterator#reset()
-         */
-        public void reset(int hashCode) {
-            this.index = (FieldIndexEntry) this.hashTable.getBucket( hashCode );
-            this.current = null;
-            this.next = (FactEntry) index.getFirst();
-        }
-
-        public void reset(Entry entry) {
-            throw new UnsupportedOperationException( "FieldIndexHashTableIterator does not support reset(Entry entry)" );
-        }
-    }
-
     public boolean add(InternalFactHandle handle) {
         FieldIndexEntry entry = getOrCreate( this.extractor.getValue( handle.getObject() ) );
         entry.add( handle );
@@ -171,7 +121,7 @@
 
     public boolean remove(InternalFactHandle handle) {
         Object value = this.extractor.getValue( handle.getObject() );
-        int hashCode = PRIME * startResult + ((value == null) ? 0 : value.hashCode());
+        int hashCode = PRIME * startResult + ((value == null) ? 0 : this.comparator.hashCodeOf( value ) );
 
         int index = indexOf( hashCode,
                              table.length );
@@ -204,7 +154,7 @@
 
     public boolean contains(InternalFactHandle handle) {
         Object value = this.extractor.getValue( handle.getObject() );
-        int hashCode = PRIME * startResult + ((value == null) ? 0 : value.hashCode());
+        int hashCode = PRIME * startResult + ((value == null) ? 0 : this.comparator.hashCodeOf( value ) );
 
         int index = indexOf( hashCode,
                              table.length );
@@ -221,7 +171,7 @@
     
     public FieldIndexEntry get(ReteTuple tuple) {
         Object value = this.declaration.getValue( tuple.get( this.declaration ).getObject() );
-        int hashCode = PRIME * startResult + ((value == null) ? 0 : value.hashCode());
+        int hashCode = PRIME * startResult + ((value == null) ? 0 : this.comparator.hashCodeOf( value ) );
 
         int index = indexOf( hashCode,
                              table.length );
@@ -245,7 +195,7 @@
      * @return
      */
     private FieldIndexEntry getOrCreate(Object value) {
-        int hashCode = PRIME * startResult + ((value == null) ? 0 : value.hashCode());
+        int hashCode = PRIME * startResult + ((value == null) ? 0 : this.comparator.hashCodeOf( value ) );
         int index = indexOf( hashCode,
                              table.length );
         FieldIndexEntry entry = (FieldIndexEntry) this.table[index];

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ObjectHashMap.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ObjectHashMap.java	2006-10-12 23:43:33 UTC (rev 6772)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ObjectHashMap.java	2006-10-12 23:46:18 UTC (rev 6773)
@@ -24,7 +24,7 @@
     public Object put(Object key,
                       Object value,
                       boolean checkExists ) {
-        int hashCode = hash( key );
+        int hashCode = this.comparator.hashCodeOf( key );
         int index = indexOf( hashCode,
                              table.length );
 
@@ -56,7 +56,7 @@
     }
 
     public Object get(Object key) {
-        int hashCode = hash( key );
+        int hashCode = this.comparator.hashCodeOf( key );
         int index = indexOf( hashCode,
                              table.length );
 
@@ -69,10 +69,10 @@
             current = (ObjectEntry) current.getNext();
         }
         return null;
-    }
+    }    
 
     public Object remove(Object key) {
-        int hashCode = hash( key );
+        int hashCode = this.comparator.hashCodeOf( key );
         int index = indexOf( hashCode,
                              table.length );
 
@@ -97,30 +97,14 @@
         return null;
     }
     
-    public Entry getBucket(int hashCode) {
-        int h = hashCode;
-        h += ~(h << 9);
-        h ^= (h >>> 14);
-        h += (h << 4);
-        h ^= (h >>> 10);
-        
-        return this.table[ indexOf( h, table.length ) ];
-    }    
+    public Entry getBucket(Object object) {
+        int hashCode = this.comparator.hashCodeOf( object );
+        int index = indexOf( hashCode,
+                             table.length );
 
-    public int hash(Object key) {
-        int h = key.hashCode();
-        h += ~(h << 9);
-        h ^= (h >>> 14);
-        h += (h << 4);
-        h ^= (h >>> 10);
-        return h;
-    }
-
-    protected int indexOf(int hashCode,
-                          int dataSize) {
-        return hashCode & (dataSize - 1);
-    }
-
+        return (ObjectEntry)  this.table[index];        
+    }    
+    
     public static class ObjectEntry
         implements
         Entry {

Modified: 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-10-12 23:43:33 UTC (rev 6772)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/TupleHashTable.java	2006-10-12 23:46:18 UTC (rev 6773)
@@ -44,11 +44,7 @@
             current = (ReteTuple) current.getNext();
         }
         return null;
-    }
-    
-    public boolean contains(ReteTuple tuple) {
-        return (get(tuple) != null);
-    }
+    }    
 
     public Object remove(ReteTuple tuple) {
         int hashCode = tuple.hashCode();
@@ -73,14 +69,17 @@
             current = next;
         }
         return current;
+    }   
+
+    public Entry getBucket(Object object) {
+        int hashCode = object.hashCode();
+        int index = indexOf( hashCode,
+                             table.length );
+
+        return this.table[index];       
     }
     
-    public Entry getBucket(int hashCode) {
-        return this.table[ indexOf( hashCode, table.length ) ];
-    }    
-
-    protected int indexOf(int hashCode,
-                          int dataSize) {
-        return hashCode & (dataSize - 1);
+    public boolean contains(ReteTuple tuple) {
+        return (get(tuple) != null);
     }
 }
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/HashedObjectSinkListTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/HashedObjectSinkListTest.java	2006-10-12 23:43:33 UTC (rev 6772)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/HashedObjectSinkListTest.java	2006-10-12 23:46:18 UTC (rev 6773)
@@ -1,243 +0,0 @@
-package org.drools.reteoo;
-
-/*
- * Copyright 2005 JBoss Inc
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.util.Iterator;
-import java.util.List;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import org.drools.Cheese;
-import org.drools.RuleBaseFactory;
-import org.drools.base.ClassFieldExtractor;
-import org.drools.base.ValueType;
-import org.drools.base.evaluators.Operator;
-import org.drools.common.DefaultFactHandle;
-import org.drools.rule.LiteralConstraint;
-import org.drools.spi.Evaluator;
-import org.drools.spi.FieldExtractor;
-import org.drools.spi.FieldValue;
-import org.drools.spi.MockField;
-
-public class HashedObjectSinkListTest extends TestCase {
-    ObjectSinkList list;
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        this.list = new HashedObjectSinkList();
-    }
-
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-    /*
-     * Test method for 'org.drools.reteoo.HashedObjectSinkList.contains(ObjectSink)'
-     */
-    public void testContains() {
-        final MockObjectSink mock = new MockObjectSink();
-        final MockObjectSource source = new MockObjectSource( 1 );
-        final AlphaNode node = new AlphaNode( 10,
-                                              null,
-                                              source );
-
-        this.list.add( mock );
-        this.list.add( node );
-
-        Assert.assertTrue( "List should contain the added sink",
-                           this.list.contains( mock ) );
-        Assert.assertTrue( "List should contain the added sink",
-                           this.list.contains( node ) );
-    }
-
-    /*
-     * Test method for 'org.drools.reteoo.HashedObjectSinkList.add(ObjectSink)'
-     */
-    public void testAdd() {
-        final MockObjectSink mock = new MockObjectSink();
-        final MockObjectSource source = new MockObjectSource( 1 );
-        final AlphaNode node = new AlphaNode( 10,
-                                              null,
-                                              source );
-
-        this.list.add( mock );
-        this.list.add( node );
-
-        Assert.assertEquals( "List should contain the 2 sinks",
-                             2,
-                             this.list.getObjectsAsList().size() );
-    }
-
-    /*
-     * Test method for 'org.drools.reteoo.HashedObjectSinkList.remove(ObjectSink)'
-     */
-    public void testRemove() {
-        final MockObjectSink mock = new MockObjectSink();
-        final MockObjectSource source = new MockObjectSource( 1 );
-        final AlphaNode node = new AlphaNode( 10,
-                                              null,
-                                              source );
-
-        this.list.add( mock );
-        this.list.add( node );
-
-        Assert.assertEquals( "List should contain the 2 sinks",
-                             2,
-                             this.list.getObjectsAsList().size() );
-        Assert.assertTrue( "List should contain the added sink",
-                           this.list.contains( mock ) );
-        Assert.assertTrue( "List should contain the added sink",
-                           this.list.contains( node ) );
-        this.list.remove( mock );
-        Assert.assertEquals( "List should contain the 1 sink",
-                             1,
-                             this.list.getObjectsAsList().size() );
-        Assert.assertFalse( "List should contain not containt a removed sink",
-                            this.list.contains( mock ) );
-        Assert.assertTrue( "List should contain the added sink",
-                           this.list.contains( node ) );
-        this.list.remove( node );
-        Assert.assertEquals( "List should contain no sink",
-                             0,
-                             this.list.getObjectsAsList().size() );
-        Assert.assertFalse( "List should contain not containt a removed sink",
-                            this.list.contains( mock ) );
-        Assert.assertFalse( "List should contain not containt a removed sink",
-                            this.list.contains( node ) );
-    }
-
-    /*
-     * Test method for 'org.drools.reteoo.HashedObjectSinkList.getLastObjectSink()'
-     */
-    public void testGetLastObjectSink() {
-        final MockObjectSink mock = new MockObjectSink();
-        final MockObjectSource source = new MockObjectSource( 1 );
-        final AlphaNode node = new AlphaNode( 10,
-                                              null,
-                                              source );
-
-        Assert.assertNull( "Invalid last added sink",
-                           this.list.getLastObjectSink() );
-        this.list.add( mock );
-        Assert.assertSame( "Invalid last added sink",
-                           mock,
-                           this.list.getLastObjectSink() );
-        this.list.add( node );
-        Assert.assertSame( "Invalid last added sink",
-                           node,
-                           this.list.getLastObjectSink() );
-        this.list.remove( mock );
-        Assert.assertSame( "Invalid last added sink",
-                           node,
-                           this.list.getLastObjectSink() );
-        this.list.remove( node );
-        Assert.assertNull( "Invalid last added sink",
-                           this.list.getLastObjectSink() );
-    }
-
-    /*
-     * Test method for 'org.drools.reteoo.HashedObjectSinkList.iterator(WorkingMemory, FactHandleImpl)'
-     */
-    public void testIterator() {
-        final ReteooWorkingMemory workingMemory = new ReteooWorkingMemory( 1,
-                                                                           (ReteooRuleBase) RuleBaseFactory.newRuleBase() );
-        final MockObjectSource source = new MockObjectSource( 15 );
-        final MockObjectSink sink = new MockObjectSink();
-
-        final FieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
-                                                                  "type" );
-        final FieldExtractor extractor2 = new ClassFieldExtractor( Cheese.class,
-                                                                   "price" );
-        final FieldValue field1 = new MockField( "cheddar" );
-        final FieldValue field2 = new MockField( "mussarela" );
-
-        final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.EQUAL );
-        final LiteralConstraint constraint1 = new LiteralConstraint( extractor,
-                                                                     evaluator,
-                                                                     field1 );
-        final LiteralConstraint constraint2 = new LiteralConstraint( extractor,
-                                                                     evaluator,
-                                                                     field2 );
-        final LiteralConstraint constraint3 = new LiteralConstraint( extractor2,
-                                                                     evaluator,
-                                                                     field2 );
-
-        final AlphaNode alphaNode1 = new AlphaNode( 2,
-                                                    constraint1,
-                                                    source );
-        alphaNode1.addObjectSink( sink );
-
-        final AlphaNode alphaNode2 = new AlphaNode( 2,
-                                                    constraint2,
-                                                    source );
-        alphaNode2.addObjectSink( sink );
-
-        final Cheese cheddar = new Cheese( "mussarela",
-                                           5 );
-
-        final DefaultFactHandle f0 = new DefaultFactHandle( 0,
-                                                            cheddar );
-
-        final MockObjectSink mock = new MockObjectSink();
-
-        this.list.add( mock );
-        this.list.add( alphaNode1 );
-        this.list.add( alphaNode2 );
-
-        int flag = 0;
-        for ( final Iterator i = this.list.iterator( workingMemory,
-                                                     f0 ); i.hasNext(); ) {
-            final ObjectSink objsink = (ObjectSink) i.next();
-            if ( objsink == alphaNode2 ) {
-                flag += 1;
-            } else if ( objsink == mock ) {
-                flag += 2;
-            } else {
-                flag += 32;
-            }
-        }
-        Assert.assertEquals( "Iterator is returning wrong objects",
-                             3,
-                             flag );
-    }
-
-    /*
-     * Test method for 'org.drools.reteoo.HashedObjectSinkList.getObjectsAsList()'
-     */
-    public void testGetObjectsAsList() {
-        final MockObjectSink mock = new MockObjectSink();
-        final MockObjectSource source = new MockObjectSource( 1 );
-        final AlphaNode node = new AlphaNode( 10,
-                                              null,
-                                              source );
-
-        this.list.add( mock );
-        this.list.add( node );
-
-        final List newList = this.list.getObjectsAsList();
-
-        Assert.assertEquals( "List should contain the 2 sinks",
-                             2,
-                             newList.size() );
-        Assert.assertTrue( "List should contain added sinks",
-                           newList.contains( mock ) );
-        Assert.assertTrue( "List should contain added sinks",
-                           newList.contains( node ) );
-    }
-
-}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java	2006-10-12 23:43:33 UTC (rev 6772)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java	2006-10-12 23:46:18 UTC (rev 6773)
@@ -28,6 +28,7 @@
 import org.drools.common.PropagationContextImpl;
 import org.drools.rule.Rule;
 import org.drools.spi.AlphaNodeFieldConstraint;
+import org.drools.spi.BetaNodeFieldConstraint;
 import org.drools.spi.MockConstraint;
 import org.drools.spi.PropagationContext;
 import org.drools.spi.Tuple;
@@ -64,7 +65,7 @@
         this.node = new JoinNode( 15,
                                   this.tupleSource,
                                   this.objectSource,
-                                  new DefaultBetaConstraints( new AlphaNodeFieldConstraint[]{this.constraint} ) );
+                                  new DefaultBetaConstraints( new BetaNodeFieldConstraint[]{this.constraint} ) );
 
         this.node.addTupleSink( this.sink );
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/spi/MockConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/spi/MockConstraint.java	2006-10-12 23:43:33 UTC (rev 6772)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/spi/MockConstraint.java	2006-10-12 23:46:18 UTC (rev 6773)
@@ -21,7 +21,7 @@
 
 public class MockConstraint
     implements
-    AlphaNodeFieldConstraint {
+    BetaNodeFieldConstraint {
 
     /**
      * 




More information about the jboss-svn-commits mailing list