[jboss-svn-commits] JBL Code SVN: r7436 - labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Nov 7 13:47:53 EST 2006
Author: tirelli
Date: 2006-11-07 13:47:50 -0500 (Tue, 07 Nov 2006)
New Revision: 7436
Modified:
labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java
Log:
JBRULES-481: fixing add/removal issue on LIAN and sharing counter on TerminalNode
Modified: labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
===================================================================
--- labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2006-11-07 18:45:25 UTC (rev 7435)
+++ labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2006-11-07 18:47:50 UTC (rev 7436)
@@ -93,10 +93,12 @@
}
public FieldConstraint[] getConstraints() {
-
+
// Sanity check
- if (binder==null) {return null;}
-
+ if ( binder == null ) {
+ return null;
+ }
+
return this.binder.getConstraints();
}
@@ -164,11 +166,12 @@
final LinkedList list = new LinkedList();
- ReteTuple tuple = new ReteTuple( handle );
+ if ( !getTupleSinks().isEmpty() ) {
- list.add( new LinkedListObjectWrapper( tuple ) );
+ ReteTuple tuple = new ReteTuple( handle );
- if ( !getTupleSinks().isEmpty() ) {
+ list.add( new LinkedListObjectWrapper( tuple ) );
+
// We do this one seperately so we avoid another tuple replication
((TupleSink) getTupleSinks().get( 0 )).assertTuple( tuple,
context,
@@ -266,13 +269,17 @@
// Iterate the memory and assert all tuples into the newly attached TupleSink
final Map memory = (Map) workingMemory.getNodeMemory( this );
- for ( final Iterator it = memory.values().iterator(); it.hasNext(); ) {
- final LinkedList list = (LinkedList) it.next();
- for ( LinkedListNode node = list.getFirst(); node != null; node = node.getNext() ) {
- sink.assertTuple( (ReteTuple) ((LinkedListObjectWrapper) node).getObject(),
- context,
- workingMemory );
- }
+ for ( final Iterator it = memory.entrySet().iterator(); it.hasNext(); ) {
+ Map.Entry entry = (Map.Entry) it.next();
+ DefaultFactHandle handle = (DefaultFactHandle) entry.getKey();
+ LinkedList list = (LinkedList) entry.getValue();
+
+ ReteTuple newTuple = new ReteTuple( handle );
+ list.add( new LinkedListObjectWrapper( newTuple ) );
+ sink.assertTuple( newTuple,
+ context,
+ workingMemory );
+
}
this.attachingNewNode = false;
@@ -280,8 +287,24 @@
public void remove(final BaseNode node,
final ReteooWorkingMemory[] workingMemories) {
- if( !node.isInUse() ) {
+ if ( !node.isInUse() ) {
+ final int index = this.getTupleSinks().indexOf( node );
getTupleSinks().remove( node );
+
+ // as we store the tuples propagated to each sink,
+ // we need to remove all these tuples from memory
+ for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
+ final Map memory = (Map) workingMemories[i].getNodeMemory( this );
+
+ for ( final Iterator it = memory.values().iterator(); it.hasNext(); ) {
+ final LinkedList tuples = (LinkedList) it.next();
+ LinkedListObjectWrapper wrapper = (LinkedListObjectWrapper) tuples.getFirst();
+ for ( int j = 0; j < index; j++ ) {
+ wrapper = (LinkedListObjectWrapper) wrapper.getNext();
+ }
+ tuples.remove( wrapper );
+ }
+ }
}
removeShare();
if ( !this.isInUse() ) {
@@ -291,6 +314,7 @@
}
this.objectSource.remove( this,
workingMemories );
+
}
/**
Modified: labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java
===================================================================
--- labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java 2006-11-07 18:45:25 UTC (rev 7435)
+++ labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java 2006-11-07 18:47:50 UTC (rev 7436)
@@ -296,6 +296,7 @@
workingMemory.propagateQueuedActions();
}
+ removeShare();
this.tupleSource.remove( this,
workingMemories );
}
More information about the jboss-svn-commits
mailing list