[jboss-svn-commits] JBL Code SVN: r6176 - 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
Tue Sep 12 12:31:55 EDT 2006
Author: mark.proctor at jboss.com
Date: 2006-09-12 12:31:53 -0400 (Tue, 12 Sep 2006)
New Revision: 6176
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
Log:
JBRULES-484 refactor the core reteoo code for sinle and composite propagations
-small fixes to alpha node hashing code
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-09-12 16:26:35 UTC (rev 6175)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2006-09-12 16:31:53 UTC (rev 6176)
@@ -77,9 +77,9 @@
if ( evaluator.getOperator() == Operator.EQUAL ) {
int index = literalConstraint.getFieldExtractor().getIndex();
- FieldIndex fieldIndex = unregisterFieldIndex( index );
+ FieldIndex fieldIndex = unregisterFieldIndex( index );
this.hashedSinks.remove( (ObjectSinkNode) sink );
-
+
if ( fieldIndex.isHashed() ) {
this.hashKey.setIndex( index );
this.hashKey.setValue( value );
@@ -89,7 +89,7 @@
unHashSinks( fieldIndex );
}
}
-
+
return;
}
}
@@ -100,11 +100,11 @@
public void hashSinks(FieldIndex fieldIndex) {
int index = fieldIndex.getIndex();
-
+
if ( this.hashedSinkMap == null ) {
this.hashedSinkMap = new HashMap();
}
-
+
for ( ObjectSinkNode sink = this.hashedSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
AlphaNode alphaNode = (AlphaNode) sink;
FieldConstraint fieldConstraint = alphaNode.getConstraint();
@@ -114,35 +114,35 @@
Object value = literalConstraint.getField().getValue();
hashedSinkMap.put( new HashKey( index,
value ),
- sink );
+ sink );
}
}
fieldIndex.setHashed( true );
}
- public void unHashSinks(FieldIndex fieldIndex) {
- int index = fieldIndex.getIndex();
-
- for ( ObjectSinkNode sink = this.hashedSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
- AlphaNode alphaNode = (AlphaNode) sink;
- FieldConstraint fieldConstraint = alphaNode.getConstraint();
- LiteralConstraint literalConstraint = (LiteralConstraint) fieldConstraint;
- Evaluator evaluator = literalConstraint.getEvaluator();
- if ( evaluator.getOperator() == Operator.EQUAL && index == literalConstraint.getFieldExtractor().getIndex() ) {
- Object value = literalConstraint.getField().getValue();
- this.hashKey.setIndex( index ) ;
- this.hashKey.setValue( value );
- hashedSinkMap.remove( this.hashKey );
- }
+ public void unHashSinks(FieldIndex fieldIndex) {
+ int index = fieldIndex.getIndex();
+
+ for ( ObjectSinkNode sink = this.hashedSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
+ AlphaNode alphaNode = (AlphaNode) sink;
+ FieldConstraint fieldConstraint = alphaNode.getConstraint();
+ LiteralConstraint literalConstraint = (LiteralConstraint) fieldConstraint;
+ Evaluator evaluator = literalConstraint.getEvaluator();
+ if ( evaluator.getOperator() == Operator.EQUAL && index == literalConstraint.getFieldExtractor().getIndex() ) {
+ Object value = literalConstraint.getField().getValue();
+ this.hashKey.setIndex( index );
+ this.hashKey.setValue( value );
+ hashedSinkMap.remove( this.hashKey );
}
-
- if ( this.hashedSinkMap.isEmpty() ) {
- this.hashedSinkMap = null;
- }
-
- fieldIndex.setHashed( false );
- }
+ }
+ if ( this.hashedSinkMap.isEmpty() ) {
+ this.hashedSinkMap = null;
+ }
+
+ fieldIndex.setHashed( false );
+ }
+
/**
* Returns a FieldIndex which Keeps a count on how many times a particular field is used with an equality check in the sinks.
* @param index
@@ -209,22 +209,20 @@
PropagationContext context,
InternalWorkingMemory workingMemory) {
Object object = handle.getObject();
- if ( this.hashedFieldIndexes != null ) {
+ if ( this.hashedSinkMap != null ) {
// Iterate the FieldIndexes to see if any are hashed
- for ( FieldIndex fieldIndex = (FieldIndex) this.hashedFieldIndexes.getFirst(); fieldIndex != null; fieldIndex = (FieldIndex) fieldIndex.getNext() ) {
- if ( fieldIndex.isHashed() ) {
- // this field is hashed so set the existing hashKey and see if there is a sink for it
- int index = fieldIndex.getIndex();
- FieldExtractor extractor = fieldIndex.getFieldExtactor();
- this.hashKey.setIndex( index );
- this.hashKey.setValue( extractor.getValue( object ) );
- ObjectSink sink = (ObjectSink) this.hashedSinkMap.get( this.hashKey );
- if ( sink != null ) {
- // The sink exists so propagate
- sink.assertObject( handle,
- context,
- workingMemory );
- }
+ for ( FieldIndex fieldIndex = (FieldIndex) this.hashedFieldIndexes.getFirst(); fieldIndex != null && fieldIndex.isHashed(); fieldIndex = (FieldIndex) fieldIndex.getNext() ) {
+ // this field is hashed so set the existing hashKey and see if there is a sink for it
+ int index = fieldIndex.getIndex();
+ FieldExtractor extractor = fieldIndex.getFieldExtactor();
+ this.hashKey.setIndex( index );
+ this.hashKey.setValue( extractor.getValue( object ) );
+ ObjectSink sink = (ObjectSink) this.hashedSinkMap.get( this.hashKey );
+ if ( sink != null ) {
+ // The sink exists so propagate
+ sink.assertObject( handle,
+ context,
+ workingMemory );
}
}
}
@@ -241,7 +239,7 @@
public void propagateModifyObject(InternalFactHandle handle,
PropagationContext context,
InternalWorkingMemory workingMemory) {
- if ( this.hashedSinkMap != null ) {
+ if ( this.hashedSinks != 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() ) {
sink.modifyObject( handle,
@@ -264,23 +262,21 @@
InternalWorkingMemory workingMemory,
boolean useHash) {
if ( this.hashedFieldIndexes != null ) {
- if ( useHash ) {
+ if ( useHash && this.hashedSinkMap != null ) {
Object object = handle.getObject();
// Iterate the FieldIndexes to see if any are hashed
- for ( FieldIndex fieldIndex = (FieldIndex) this.hashedFieldIndexes.getFirst(); fieldIndex != null; fieldIndex = (FieldIndex) fieldIndex.getNext() ) {
- if ( fieldIndex.isHashed() ) {
- // this field is hashed so set the existing hashKey and see if there is a sink for it
- int index = fieldIndex.getIndex();
- FieldExtractor extractor = fieldIndex.getFieldExtactor();
- this.hashKey.setIndex( index );
- this.hashKey.setValue( extractor.getValue( object ) );
- ObjectSink sink = (ObjectSink) this.hashedSinkMap.get( this.hashKey );
- if ( sink != null ) {
- // The sink exists so propagate
- sink.retractObject( handle,
- context,
- workingMemory );
- }
+ for ( FieldIndex fieldIndex = (FieldIndex) this.hashedFieldIndexes.getFirst(); fieldIndex != null && fieldIndex.isHashed(); fieldIndex = (FieldIndex) fieldIndex.getNext() ) {
+ // this field is hashed so set the existing hashKey and see if there is a sink for it
+ int index = fieldIndex.getIndex();
+ FieldExtractor extractor = fieldIndex.getFieldExtactor();
+ this.hashKey.setIndex( index );
+ this.hashKey.setValue( extractor.getValue( object ) );
+ ObjectSink sink = (ObjectSink) this.hashedSinkMap.get( this.hashKey );
+ if ( sink != null ) {
+ // The sink exists so propagate
+ sink.retractObject( handle,
+ context,
+ workingMemory );
}
}
} else {
More information about the jboss-svn-commits
mailing list