[jboss-svn-commits] JBL Code SVN: r19291 - 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
Fri Mar 28 02:04:40 EDT 2008
Author: mark.proctor at jboss.com
Date: 2008-03-28 02:04:40 -0400 (Fri, 28 Mar 2008)
New Revision: 19291
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
Log:
JBRULES-1520 RightTuple merge for asymmetrical Rete propagations
-Various fixes to get things working.
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java 2008-03-28 06:04:34 UTC (rev 19290)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java 2008-03-28 06:04:40 UTC (rev 19291)
@@ -26,27 +26,27 @@
}
public void propagateAssertLeftTuple(final LeftTuple leftTuple,
- final RightTuple rightTuple,
- final PropagationContext context,
- final InternalWorkingMemory workingMemory) {
+ final RightTuple rightTuple,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
for ( LeftTupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextLeftTupleSinkNode() ) {
sink.assertLeftTuple( new LeftTuple( leftTuple,
- rightTuple,
- sink ),
- context,
- workingMemory );
+ rightTuple,
+ sink ),
+ context,
+ workingMemory );
}
}
public void propagateAssertLeftTuple(final LeftTuple tuple,
- final PropagationContext context,
- final InternalWorkingMemory workingMemory) {
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
for ( LeftTupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextLeftTupleSinkNode() ) {
sink.assertLeftTuple( new LeftTuple( tuple,
- sink ),
- context,
- workingMemory );
+ sink ),
+ context,
+ workingMemory );
}
}
@@ -58,30 +58,30 @@
LeftTuple temp = child.getLeftParentNext();
//child.unlinkFromParents();
child.getSink().retractLeftTuple( child,
- context,
- workingMemory );
- child.unlinkFromRightParent();
+ context,
+ workingMemory );
+ child.unlinkFromRightParent();
//child = child.getLeftParentNext();
child = temp;
}
leftTuple.setBetaChildren( null );
}
-
+
public void propagateRetractLeftTupleDestroyRightTuple(final LeftTuple leftTuple,
- final PropagationContext context,
- final InternalWorkingMemory workingMemory) {
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
LeftTuple child = leftTuple.getBetaChildren();
while ( child != null ) {
LeftTuple temp = child.getLeftParentNext();
child.getSink().retractLeftTuple( child,
- context,
- workingMemory );
+ context,
+ workingMemory );
workingMemory.getFactHandleFactory().destroyFactHandle( child.getRightParent().getFactHandle() );
- child.unlinkFromRightParent();
+ child.unlinkFromRightParent();
child = temp;
}
leftTuple.setBetaChildren( null );
- }
+ }
public void propagateRetractRightTuple(final RightTuple rightTuple,
final PropagationContext context,
@@ -91,9 +91,9 @@
LeftTuple temp = child.getRightParentNext();
//child.unlinkFromParents();
child.getSink().retractLeftTuple( child,
- context,
- workingMemory );
- child.unlinkFromLeftParent();
+ context,
+ workingMemory );
+ child.unlinkFromLeftParent();
//child = child.getRightParentNext();
child = temp;
}
@@ -101,13 +101,13 @@
}
public void createAndPropagateAssertLeftTuple(final InternalFactHandle factHandle,
- final PropagationContext context,
- final InternalWorkingMemory workingMemory) {
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
for ( LeftTupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextLeftTupleSinkNode() ) {
sink.assertLeftTuple( new LeftTuple( factHandle,
- sink ),
- context,
- workingMemory );
+ sink ),
+ context,
+ workingMemory );
}
}
@@ -122,83 +122,16 @@
return sinkArray;
}
- // public void propagateNewTupleSink(TupleMatch tupleMatch,
- // PropagationContext context,
- // InternalWorkingMemory workingMemory) {
- //
- // final TupleSink sink = sinks.getLast();
- // final ReteTuple tuple = new ReteTuple( tupleMatch.getTuple(),
- // tupleMatch.getObjectMatches().getFactHandle(),
- // sink );
- // tupleMatch.addJoinedTuple( tuple );
- // tuple.assertTuple( context,
- // workingMemory );
- // }
- //
- // public void propagateNewTupleSink(ReteTuple tuple,
- // PropagationContext context,
- // InternalWorkingMemory workingMemory) {
- //
- // final TupleSink sink = sinks.getLast();
- // ReteTuple child = new ReteTuple( tuple,
- // sink );
- // tuple.addChildEntry( child );
- // child.assertTuple( context,
- // workingMemory );
- // }
- //
- // public void propagateNewTupleSink(InternalFactHandle handle,
- // LinkedList list,
- // PropagationContext context,
- // InternalWorkingMemory workingMemory) {
- // TupleSink sink = this.sinks.getLast();
- // ReteTuple tuple = new ReteTuple( handle,
- // sink );
- // list.add( new LinkedListEntry( tuple ) );
- // tuple.assertTuple( context,
- // workingMemory );
- // }
- //
- // /**
- // * @inheritDoc
- // */
- // public List getPropagatedTuples(final Map memory,
- // final InternalWorkingMemory workingMemory,
- // final TupleSink sink) {
- // int index = 0;
- // for ( TupleSinkNode node = this.sinks.getFirst(); node != null; node = node.getNextTupleSinkNode() ) {
- // if ( node.equals( sink ) ) {
- // break;
- // }
- // index++;
- // }
- //
- // final List propagatedTuples = new ArrayList( memory.size() );
- //
- // for ( final Iterator it = memory.values().iterator(); it.hasNext(); ) {
- // final LinkedList tuples = (LinkedList) it.next();
- // LinkedListEntry wrapper = (LinkedListEntry) tuples.getFirst();
- // for ( int i = 0; i < index; i++ ) {
- // wrapper = (LinkedListEntry) wrapper.getNext();
- // }
- // propagatedTuples.add( wrapper.getObject() );
- // }
- //
- // return propagatedTuples;
- // }
-
public int size() {
return this.sinks.size();
}
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
- // TODO Auto-generated method stub
-
+ this.sinks = (LeftTupleSinkNodeList) in.readObject();
}
public void writeExternal(ObjectOutput out) throws IOException {
- // TODO Auto-generated method stub
-
+ out.writeObject( this.sinks );
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java 2008-03-28 06:04:34 UTC (rev 19290)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java 2008-03-28 06:04:40 UTC (rev 19291)
@@ -38,8 +38,10 @@
import org.drools.spi.ObjectType;
import org.drools.spi.PropagationContext;
import org.drools.util.FactEntry;
+import org.drools.util.ObjectHashSet;
import org.drools.util.RightTupleList;
import org.drools.util.Iterator;
+import org.drools.util.ObjectHashSet.ObjectEntry;
/**
* A node that is an entry point into the Rete network.
@@ -271,26 +273,25 @@
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
// @todo
-// // JBRULES-612: the cache MUST be invalidated when a new node type is added to the network, so iterate and reset all caches.
-// final ObjectTypeNode node = (ObjectTypeNode) sink;
-//
-// final ObjectType newObjectType = node.getObjectType();
-//
-// InternalWorkingMemoryEntryPoint wmEntryPoint = (InternalWorkingMemoryEntryPoint) workingMemory.getWorkingMemoryEntryPoint( this.entryPoint.getEntryPointId() );
-//
-// for ( ObjectTypeConf objectTypeConf : wmEntryPoint.getObjectTypeConfigurationRegistry().values() ) {
-// if ( newObjectType.isAssignableFrom( objectTypeConf.getConcreteObjectTypeNode().getObjectType() ) ) {
-// objectTypeConf.resetCache();
-// ObjectTypeNode sourceNode = objectTypeConf.getConcreteObjectTypeNode();
-// RightTupleList table = (RightTupleList) workingMemory.getNodeMemory( sourceNode );
-// Iterator factIter = table.iterator();
-// for ( FactEntry factEntry = (FactEntry) factIter.next(); factEntry != null; factEntry = (FactEntry) factIter.next() ) {
-// sink.assertObject( factEntry.getFactHandle(),
-// context,
-// workingMemory );
-// }
-// }
-// }
+ // JBRULES-612: the cache MUST be invalidated when a new node type is added to the network, so iterate and reset all caches.
+ final ObjectTypeNode node = (ObjectTypeNode) sink;
+
+ final ObjectType newObjectType = node.getObjectType();
+
+ InternalWorkingMemoryEntryPoint wmEntryPoint = (InternalWorkingMemoryEntryPoint) workingMemory.getWorkingMemoryEntryPoint( this.entryPoint.getEntryPointId() );
+
+ for ( ObjectTypeConf objectTypeConf : wmEntryPoint.getObjectTypeConfigurationRegistry().values() ) {
+ if ( newObjectType.isAssignableFrom( objectTypeConf.getConcreteObjectTypeNode().getObjectType() ) ) {
+ objectTypeConf.resetCache();
+ ObjectTypeNode sourceNode = objectTypeConf.getConcreteObjectTypeNode();
+ Iterator it = ((ObjectHashSet) workingMemory.getNodeMemory( sourceNode )).iterator();
+ for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) {
+ sink.assertObject( (InternalFactHandle) entry.getValue(),
+ context,
+ workingMemory );
+ }
+ }
+ }
}
public boolean isObjectMemoryEnabled() {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java 2008-03-28 06:04:34 UTC (rev 19290)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java 2008-03-28 06:04:40 UTC (rev 19291)
@@ -41,23 +41,6 @@
workingMemory );
}
- // public void propagateNotRetractLeftTuple(final LeftTuple leftTuple,
- // final PropagationContext context,
- // final InternalWorkingMemory workingMemory) {
- // LeftTuple child = leftTuple.getBetaChildren();
- // while ( child != null ) {
- // //LeftTuple temp = leftTuple.getRightParentNext();
- // //child.unlinkFromParents();
- // //child.unlinkFromLeftParent();
- // child.getSink().retractTuple( child,
- // context,
- // workingMemory );
- // child = child.getLeftParentNext();
- // //child = temp;
- // }
- // leftTuple.setBetaChildren( null );
- // }
-
public void propagateRetractLeftTuple(final LeftTuple leftTuple,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
@@ -127,11 +110,10 @@
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
- // @todo
-
+ this.sink = ( LeftTupleSink) in.readObject();
}
public void writeExternal(ObjectOutput out) throws IOException {
- // @todo
+ out.writeObject( this.sink );
}
}
More information about the jboss-svn-commits
mailing list