[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