[jboss-svn-commits] JBL Code SVN: r6686 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Oct 8 09:23:09 EDT 2006
Author: mark.proctor at jboss.com
Date: 2006-10-08 09:23:07 -0400 (Sun, 08 Oct 2006)
New Revision: 6686
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
Log:
JBRULES-498 Optimised HashMap implementations
-getSinks() now correctly returns all sinks for CompositeObjectSinkAdapter
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2006-10-08 12:52:23 UTC (rev 6685)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2006-10-08 13:23:07 UTC (rev 6686)
@@ -13,6 +13,7 @@
import org.drools.spi.PropagationContext;
import org.drools.util.Iterator;
import org.drools.util.LinkedList;
+import org.drools.util.LinkedListEntry;
import org.drools.util.LinkedListNode;
import org.drools.util.ObjectHashMap;
import org.drools.util.ObjectHashMap.ObjectEntry;
@@ -22,7 +23,7 @@
ObjectSinkPropagator {
private ObjectSinkNodeList otherSinks;
- private ObjectSinkNodeList hashedSinks;
+ private ObjectSinkNodeList hashableSinks;
private LinkedList hashedFieldIndexes;
@@ -51,18 +52,18 @@
if ( fieldIndex.getCount() >= 3 ) {
if ( !fieldIndex.isHashed() ) {
hashSinks( fieldIndex );
- }
+ }
Object value = literalConstraint.getField().getValue();
// no need to check, we know the sink does not exist
hashedSinkMap.put( new HashKey( index,
value ),
sink,
- false );
+ false );
} else {
- if ( this.hashedSinks == null ) {
- this.hashedSinks = new ObjectSinkNodeList();
+ if ( this.hashableSinks == null ) {
+ this.hashableSinks = new ObjectSinkNodeList();
}
- this.hashedSinks.add( (ObjectSinkNode) sink );
+ this.hashableSinks.add( (ObjectSinkNode) sink );
}
return;
}
@@ -90,7 +91,7 @@
if ( evaluator.getOperator() == Operator.EQUAL ) {
int index = literalConstraint.getFieldExtractor().getIndex();
FieldIndex fieldIndex = unregisterFieldIndex( index );
-
+
if ( fieldIndex.isHashed() ) {
this.hashKey.setIndex( index );
this.hashKey.setValue( value );
@@ -100,13 +101,13 @@
unHashSinks( fieldIndex );
}
} else {
- this.hashedSinks.remove( (ObjectSinkNode) sink );
- }
-
- if ( this.hashedSinks.isEmpty() ) {
- this.hashedSinks = null;
+ this.hashableSinks.remove( (ObjectSinkNode) sink );
}
+ if ( this.hashableSinks.isEmpty() ) {
+ this.hashableSinks = null;
+ }
+
return;
}
}
@@ -123,12 +124,12 @@
int index = fieldIndex.getIndex();
List list = new ArrayList();
-
+
if ( this.hashedSinkMap == null ) {
this.hashedSinkMap = new ObjectHashMap();
}
- for ( ObjectSinkNode sink = this.hashedSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
+ for ( ObjectSinkNode sink = this.hashableSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
AlphaNode alphaNode = (AlphaNode) sink;
FieldConstraint fieldConstraint = alphaNode.getConstraint();
LiteralConstraint literalConstraint = (LiteralConstraint) fieldConstraint;
@@ -140,24 +141,24 @@
value ),
sink );
}
- }
-
+ }
+
for ( java.util.Iterator it = list.iterator(); it.hasNext(); ) {
- ObjectSinkNode sink = ( ObjectSinkNode ) it.next();
- this.hashedSinks.remove( sink );
+ ObjectSinkNode sink = (ObjectSinkNode) it.next();
+ this.hashableSinks.remove( sink );
}
-
- if ( this.hashedSinks.isEmpty() ) {
- this.hashedSinks = null;
+
+ if ( this.hashableSinks.isEmpty() ) {
+ this.hashableSinks = null;
}
-
- fieldIndex.setHashed( true );
+
+ fieldIndex.setHashed( true );
}
public void unHashSinks(FieldIndex fieldIndex) {
int index = fieldIndex.getIndex();
- for ( ObjectSinkNode sink = this.hashedSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
+ for ( ObjectSinkNode sink = this.hashableSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
AlphaNode alphaNode = (AlphaNode) sink;
FieldConstraint fieldConstraint = alphaNode.getConstraint();
LiteralConstraint literalConstraint = (LiteralConstraint) fieldConstraint;
@@ -166,7 +167,7 @@
Object value = literalConstraint.getField().getValue();
this.hashKey.setIndex( index );
this.hashKey.setValue( value );
- this.hashedSinks.add( sink );
+ this.hashableSinks.add( sink );
hashedSinkMap.remove( this.hashKey );
}
}
@@ -263,8 +264,8 @@
}
// propagate unhashed
- if ( this.hashedSinks != null ) {
- for ( ObjectSinkNode sink = this.hashedSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
+ if ( this.hashableSinks != null ) {
+ for ( ObjectSinkNode sink = this.hashableSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
sink.assertObject( handle,
context,
workingMemory );
@@ -309,15 +310,15 @@
for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) {
ObjectSink sink = (ObjectSink) entry.getValue();
sink.retractObject( handle,
- context,
- workingMemory );
+ context,
+ workingMemory );
}
}
}
- if ( this.hashedSinks != null ) {
+ if ( this.hashableSinks != null ) {
// we can't retrieve hashed sinks, as the field value might have changed, so we have to iterate and propagate to all hashed sinks
- for ( ObjectSinkNode sink = this.hashedSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
+ for ( ObjectSinkNode sink = this.hashableSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
sink.retractObject( handle,
context,
workingMemory );
@@ -343,14 +344,18 @@
}
}
- if ( this.hashedSinks != null ) {
- for ( ObjectSinkNode sink = this.hashedSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
+ if ( this.hashableSinks != null ) {
+ for ( ObjectSinkNode sink = this.hashableSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
list.add( sink );
}
- }
+ }
- if( this.hashedFieldIndexes != null ) {
-
+ if ( this.hashedSinkMap != null ) {
+ Iterator it = this.hashedSinkMap.iterator();
+ for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) {
+ ObjectSink sink = (ObjectSink) entry.getValue();
+ list.add( sink );
+ }
}
return ( ObjectSink[] ) list.toArray( new ObjectSink[ list.size() ] );
More information about the jboss-svn-commits
mailing list