[jboss-svn-commits] JBL Code SVN: r6216 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo: . beta

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Sep 13 22:53:38 EDT 2006


Author: mark.proctor at jboss.com
Date: 2006-09-13 22:53:26 -0400 (Wed, 13 Sep 2006)
New Revision: 6216

Removed:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeTupleMatch.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeTupleSinkAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleTupleMatch.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleTupleSinkAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleMatch.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSink.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaRightMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultRightMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/InstanceEqualConstrRightMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemory.java
Log:
JBRULES-494 Linked Tuple
-We now linked ReteTuples rather than cloning the array.

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -21,15 +21,16 @@
 import java.util.List;
 import java.util.Map;
 
-import org.drools.common.BetaNodeBinder;
+import org.drools.common.BetaNodeConstraints;
 import org.drools.common.DefaultFactHandle;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.rule.Accumulate;
 import org.drools.spi.FieldConstraint;
 import org.drools.spi.PropagationContext;
+import org.drools.spi.Tuple;
 import org.drools.util.LinkedList;
-import org.drools.util.LinkedListObjectWrapper;
+import org.drools.util.LinkedListEntry;
 
 /**
  * AccumulateNode
@@ -46,7 +47,7 @@
 
     private final Accumulate        accumulate;
     private final FieldConstraint[] constraints;
-    private final BetaNodeBinder    resultsBinder;
+    private final BetaNodeConstraints    resultsBinder;
 
     /**
      * Construct.
@@ -68,8 +69,8 @@
               leftInput,
               rightInput,
               new FieldConstraint[0],
-              new BetaNodeBinder(),
-              new BetaNodeBinder(),
+              new BetaNodeConstraints(),
+              new BetaNodeConstraints(),
               accumulate );
     }
 
@@ -77,8 +78,8 @@
                           final TupleSource leftInput,
                           final ObjectSource rightInput,
                           final FieldConstraint[] constraints,
-                          final BetaNodeBinder sourceBinder,
-                          final BetaNodeBinder resultsBinder,
+                          final BetaNodeConstraints sourceBinder,
+                          final BetaNodeConstraints resultsBinder,
                           final Accumulate accumulate) {
         super( id,
                leftInput,
@@ -206,7 +207,7 @@
         // if tuple was propagated
         if((leftTuple.getLinkedTuples() != null) && (leftTuple.getLinkedTuples().size() > 0)) {
             // Need to store the accumulate result object for later disposal
-            InternalFactHandle[] handles = ((ReteTuple)((LinkedListObjectWrapper)leftTuple.getLinkedTuples().getFirst()).getObject()).getFactHandles();
+            InternalFactHandle[] handles = ((Tuple)((LinkedListEntry)leftTuple.getLinkedTuples().getFirst()).getObject()).getFactHandles();
             InternalFactHandle lastHandle = handles[handles.length-1];
             
             propagateRetractTuple( leftTuple,
@@ -235,7 +236,7 @@
         ObjectMatches objectMatches = memory.add( workingMemory,
                                                   handle );
 
-        final BetaNodeBinder binder = getJoinNodeBinder();
+        final BetaNodeConstraints binder = getJoinNodeBinder();
         for ( final Iterator it = memory.leftTupleIterator( workingMemory,
                                                             handle ); it.hasNext(); ) {
             final ReteTuple leftTuple = (ReteTuple) it.next();
@@ -321,9 +322,9 @@
             final ReteTuple leftTuple = (ReteTuple) it.next();
             final LinkedList linkedTuples = leftTuple.getLinkedTuples();
 
-            LinkedListObjectWrapper wrapper = (LinkedListObjectWrapper) linkedTuples.getFirst();
+            LinkedListEntry wrapper = (LinkedListEntry) linkedTuples.getFirst();
             for ( int i = 0; i < index; i++ ) {
-                wrapper = (LinkedListObjectWrapper) wrapper.getNext();
+                wrapper = (LinkedListEntry) wrapper.getNext();
             }
             propagatedTuples.add( wrapper.getObject() );
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaMemory.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaMemory.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -23,11 +23,12 @@
 
 import org.drools.RuleBaseConfiguration;
 import org.drools.WorkingMemory;
-import org.drools.common.BetaNodeBinder;
+import org.drools.common.BetaNodeConstraints;
 import org.drools.common.InternalFactHandle;
 import org.drools.reteoo.beta.BetaLeftMemory;
 import org.drools.reteoo.beta.BetaMemoryFactory;
 import org.drools.reteoo.beta.BetaRightMemory;
+import org.drools.spi.Tuple;
 
 /**
  * Memory for left and right inputs of a <code>BetaNode</code>. The LeftMemory is a <code>LinkedList</code> for all incoming 
@@ -74,7 +75,7 @@
      * <code>FactHandle</code>s
      */
     BetaMemory(final RuleBaseConfiguration config,
-               final BetaNodeBinder binder) {
+               final BetaNodeConstraints binder) {
         this.leftMemory = BetaMemoryFactory.newLeftMemory( config,
                                                            binder );
         this.rightMemory = BetaMemoryFactory.newRightMemory( config,
@@ -104,7 +105,7 @@
      * @return The an Iterator for the right memory
      */
     Iterator rightObjectIterator(final WorkingMemory wm,
-                                 final ReteTuple tuple) {
+                                 final Tuple tuple) {
         return this.rightMemory.iterator( wm,
                                           tuple );
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -18,7 +18,7 @@
 
 import org.drools.RuleBaseConfiguration;
 import org.drools.common.BaseNode;
-import org.drools.common.BetaNodeBinder;
+import org.drools.common.BetaNodeConstraints;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.common.NodeMemory;
@@ -52,7 +52,7 @@
     /** The right input <code>TupleSource</code>. */
     private final ObjectSource   rightInput;
 
-    private final BetaNodeBinder joinNodeBinder;
+    private final BetaNodeConstraints joinNodeBinder;
     
     private TupleSinkNode previousTupleSinkNode;
     private TupleSinkNode nextTupleSinkNode;
@@ -80,7 +80,7 @@
         this( id,
               leftInput,
               rightInput,
-              BetaNodeBinder.simpleBinder );
+              BetaNodeConstraints.emptyBetaNodeConstraints );
     }
 
     /**
@@ -94,7 +94,7 @@
     BetaNode(final int id,
              final TupleSource leftInput,
              final ObjectSource rightInput,
-             final BetaNodeBinder joinNodeBinder) {
+             final BetaNodeConstraints joinNodeBinder) {
         super( id );
         this.leftInput = leftInput;
         this.rightInput = rightInput;
@@ -177,14 +177,14 @@
     /**
      * @return the <code>joinNodeBinder</code>
      */
-    BetaNodeBinder getJoinNodeBinder() {
+    BetaNodeConstraints getJoinNodeBinder() {
         return this.joinNodeBinder;
     }    
     
     protected TupleMatch attemptJoin(final ReteTuple leftTuple,
                                      final InternalFactHandle handle,
                                      final ObjectMatches objectMatches,
-                                     final BetaNodeBinder binder,
+                                     final BetaNodeConstraints binder,
                                      final InternalWorkingMemory workingMemory) {
         if ( binder.isAllowed( handle,
                                leftTuple,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -22,14 +22,15 @@
 import java.util.List;
 import java.util.Map;
 
-import org.drools.common.BetaNodeBinder;
+import org.drools.common.BetaNodeConstraints;
 import org.drools.common.DefaultFactHandle;
 import org.drools.common.InternalFactHandle;
 import org.drools.rule.Collect;
 import org.drools.spi.FieldConstraint;
 import org.drools.spi.PropagationContext;
+import org.drools.spi.Tuple;
 import org.drools.util.LinkedList;
-import org.drools.util.LinkedListObjectWrapper;
+import org.drools.util.LinkedListEntry;
 
 /**
  * @author etirelli
@@ -44,7 +45,7 @@
     
     private final Collect           collect;
     private final FieldConstraint[] resultConstraints;
-    private final BetaNodeBinder    resultsBinder;
+    private final BetaNodeConstraints    resultsBinder;
 
     /**
      * Constructor.
@@ -66,8 +67,8 @@
               leftInput,
               rightInput,
               new FieldConstraint[0],
-              new BetaNodeBinder(),
-              new BetaNodeBinder(),
+              new BetaNodeConstraints(),
+              new BetaNodeConstraints(),
               collect );
     }
 
@@ -93,8 +94,8 @@
                        final TupleSource leftInput,
                        final ObjectSource rightInput,
                        final FieldConstraint[] resultConstraints,
-                       final BetaNodeBinder sourceBinder,
-                       final BetaNodeBinder resultsBinder,
+                       final BetaNodeConstraints sourceBinder,
+                       final BetaNodeConstraints resultsBinder,
                        final Collect collect) {
         super( id,
                leftInput,
@@ -212,7 +213,7 @@
         // if tuple was propagated
         if ( (leftTuple.getLinkedTuples() != null) && (leftTuple.getLinkedTuples().size() > 0) ) {
             // Need to store the collection result object for later disposal
-            InternalFactHandle[] handles = ((ReteTuple) ((LinkedListObjectWrapper) leftTuple.getLinkedTuples().getFirst()).getObject()).getFactHandles();
+            InternalFactHandle[] handles = ((Tuple) ((LinkedListEntry) leftTuple.getLinkedTuples().getFirst()).getObject()).getFactHandles();
             InternalFactHandle lastHandle = handles[handles.length - 1];
 
             propagateRetractTuple( leftTuple,
@@ -241,7 +242,7 @@
         memory.add( workingMemory,
                     handle );
 
-        final BetaNodeBinder binder = getJoinNodeBinder();
+        final BetaNodeConstraints binder = getJoinNodeBinder();
         for ( final Iterator it = memory.leftTupleIterator( workingMemory,
                                                             handle ); it.hasNext(); ) {
             final ReteTuple leftTuple = (ReteTuple) it.next();
@@ -327,9 +328,9 @@
             final ReteTuple leftTuple = (ReteTuple) it.next();
             final LinkedList linkedTuples = leftTuple.getLinkedTuples();
 
-            LinkedListObjectWrapper wrapper = (LinkedListObjectWrapper) linkedTuples.getFirst();
+            LinkedListEntry wrapper = (LinkedListEntry) linkedTuples.getFirst();
             for ( int i = 0; i < index; i++ ) {
-                wrapper = (LinkedListObjectWrapper) wrapper.getNext();
+                wrapper = (LinkedListEntry) wrapper.getNext();
             }
             propagatedTuples.add( wrapper.getObject() );
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeTupleMatch.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeTupleMatch.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeTupleMatch.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -15,13 +15,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import java.util.Iterator;
-import java.util.LinkedList;
-
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 import org.drools.util.AbstractBaseLinkedListNode;
+import org.drools.util.LinkedList;
+import org.drools.util.LinkedListNode;
+import org.drools.util.LinkedListEntry;
 
 /**
  * <code>TupleMatch</code> maintains a reference to the parent <code>ReteTuple</code> and a <code>List</code> of all resulting joins. 
@@ -37,13 +36,15 @@
  * @author <a href="mailto:bob at werken.com">Bob McWhirter</a>
  *
  */
-public class CompositeTupleMatch extends AbstractBaseLinkedListNode implements TupleMatch {
-    private ReteTuple          tuple;
-    
-    private LinkedList list;
+public class CompositeTupleMatch extends AbstractBaseLinkedListNode
+    implements
+    TupleMatch {
+    private ReteTuple     tuple;
 
-    private ObjectMatches      objectMatches;
+    private LinkedList    list;
 
+    private ObjectMatches objectMatches;
+
     /**
      * Construct a <code>TupleMatch</code> with references to the parent <code>ReteTuple</code> and 
      * <code>FactHandleImpl</code>, via ObjecMatches.
@@ -52,9 +53,9 @@
      * @param objectMatches
      */
     public CompositeTupleMatch(final ReteTuple tuple,
-                      final ObjectMatches objectMatches) {
+                               final ObjectMatches objectMatches) {
         this.tuple = tuple;
-        this.objectMatches = objectMatches;       
+        this.objectMatches = objectMatches;
         this.list = new LinkedList();
     }
 
@@ -72,14 +73,14 @@
         return this.objectMatches;
     }
 
-    public void addJoinedTuple(ReteTuple tuple) {
-        list.add( tuple );
+    public void addJoinedTuple(ReteTuple joined) {
+        this.list.add( new LinkedListEntry( joined ) );
     }
 
     public void propagateRetractTuple(final PropagationContext context,
                                       final InternalWorkingMemory workingMemory) {
-        for ( Iterator it = this.list.iterator(); it.hasNext(); ) {
-            ReteTuple joined = (ReteTuple) it.next();
+        for ( LinkedListNode node = this.list.getFirst(); node != null; node = node.getNext() ) {
+            ReteTuple joined = (ReteTuple) ((LinkedListEntry) node).getObject();
             joined.retractTuple( context,
                                  workingMemory );
         }
@@ -87,20 +88,20 @@
 
     public void propagateModifyTuple(final PropagationContext context,
                                      final InternalWorkingMemory workingMemory) {
-        for ( Iterator it = this.list.iterator(); it.hasNext(); ) {
-            ReteTuple joined = (ReteTuple) it.next();
+        for ( LinkedListNode node = this.list.getFirst(); node != null; node = node.getNext() ) {
+            ReteTuple joined = (ReteTuple) ((LinkedListEntry) node).getObject();
             joined.modifyTuple( context,
                                 workingMemory );
         }
     }
 
     public ReteTuple getTupleForSink(TupleSink sink) {
-        for ( Iterator it = this.list.iterator(); it.hasNext(); ) {
-            ReteTuple joined = (ReteTuple) it.next();
-            if ( sink.equals(  joined.getTupleSink() ) ) {
+        for ( LinkedListNode node = this.list.getFirst(); node != null; node = node.getNext() ) {
+            ReteTuple joined = (ReteTuple) ((LinkedListEntry) node).getObject();
+            if ( sink.equals( joined.getTupleSink() ) ) {
                 return joined;
             }
-        }    
+        }
         return null;
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeTupleSinkAdapter.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeTupleSinkAdapter.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -9,7 +9,7 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 import org.drools.util.LinkedList;
-import org.drools.util.LinkedListObjectWrapper;
+import org.drools.util.LinkedListEntry;
 
 public class CompositeTupleSinkAdapter implements TupleSinkPropagator {
     private TupleSinkNodeList sinks;
@@ -30,16 +30,12 @@
                                      InternalFactHandle handle,
                                      TupleMatch tupleMatch,
                                      PropagationContext context,
-                                     InternalWorkingMemory workingMemory) {
-        TupleSinkNode sink = this.sinks.getFirst();
-        ReteTuple joined = new ReteTuple(tuple, handle, (TupleSink) sink );
-        tupleMatch.addJoinedTuple( joined );
-        joined.assertTuple( context, workingMemory );           
+                                     InternalWorkingMemory workingMemory) {           
         
-        for ( sink = sink.getNextTupleSinkNode();sink != null; sink = sink.getNextTupleSinkNode() ) {
-            ReteTuple cloned = new ReteTuple(joined, sink);
-            tupleMatch.addJoinedTuple( cloned );
-            cloned.assertTuple( context, workingMemory );                
+        for ( TupleSinkNode  sink = this.sinks.getFirst();sink != null; sink = sink.getNextTupleSinkNode() ) {
+            ReteTuple child = new ReteTuple(tuple, handle, (TupleSink) sink );            
+            tupleMatch.addJoinedTuple( child );
+            child.assertTuple( context, workingMemory );                
         }
     }
     
@@ -47,9 +43,8 @@
                                      PropagationContext context,
                                      InternalWorkingMemory workingMemory) {        
         for ( TupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextTupleSinkNode() ) {
-            final ReteTuple child = new ReteTuple( tuple, sink );
-            // no TupleMatch so instead add as a linked tuple
-            tuple.addLinkedTuple( new LinkedListObjectWrapper( child ) );
+            ReteTuple child = new ReteTuple( tuple, sink);
+            tuple.addChildEntry( child );
             child.assertTuple( context, workingMemory );            
         }
     }    
@@ -60,7 +55,7 @@
         final LinkedList list = new LinkedList();
         for ( TupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextTupleSinkNode() ) {    
             ReteTuple tuple = new ReteTuple( handle, sink );
-            list.add( new LinkedListObjectWrapper( tuple ) );
+            list.add( new LinkedListEntry( tuple ) );
             tuple.assertTuple( context, workingMemory );
         }     
         return list;
@@ -83,8 +78,8 @@
 
             final TupleSink sink = sinks.getLast();
             final ReteTuple tuple = new ReteTuple( tupleMatch.getTuple(),
-                                                   tupleMatch.getObjectMatches().getFactHandle(), 
-                                                   sink  );
+                                                     tupleMatch.getObjectMatches().getFactHandle(), 
+                                                    sink  );
             tupleMatch.addJoinedTuple( tuple );
             tuple.assertTuple( context, workingMemory );                          
     }
@@ -95,7 +90,7 @@
                                       InternalWorkingMemory workingMemory) {
         TupleSink sink = this.sinks.getLast();
         ReteTuple tuple = new ReteTuple( handle, sink );
-        list.add( new LinkedListObjectWrapper( tuple ) );
+        list.add( new LinkedListEntry( tuple ) );
         tuple.assertTuple( context, workingMemory );                       
     }    
     
@@ -117,9 +112,9 @@
 
         for ( final Iterator it = memory.values().iterator(); it.hasNext(); ) {
             final LinkedList tuples = (LinkedList) it.next();
-            LinkedListObjectWrapper wrapper = (LinkedListObjectWrapper) tuples.getFirst();
+            LinkedListEntry wrapper = (LinkedListEntry) tuples.getFirst();
             for ( int i = 0; i < index; i++ ) {
-                wrapper = (LinkedListObjectWrapper) wrapper.getNext();
+                wrapper = (LinkedListEntry) wrapper.getNext();
             }
             propagatedTuples.add( wrapper.getObject() );
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -28,7 +28,7 @@
 import org.drools.rule.EvalCondition;
 import org.drools.spi.PropagationContext;
 import org.drools.util.LinkedList;
-import org.drools.util.LinkedListObjectWrapper;
+import org.drools.util.LinkedListEntry;
 
 /**
  * Node which filters <code>ReteTuple</code>s.
@@ -208,7 +208,7 @@
             final ReteTuple tuple = (ReteTuple) it.next();
             final ReteTuple child = new ReteTuple( tuple );
             // no TupleMatch so instead add as a linked tuple
-            tuple.addLinkedTuple( new LinkedListObjectWrapper( child ) );
+            tuple.addLinkedTuple( new LinkedListEntry( child ) );
             ((TupleSink) getTupleSinks().get( getTupleSinks().size() - 1 )).assertTuple( child,
                                                                                          context,
                                                                                          workingMemory );
@@ -276,9 +276,9 @@
             final ReteTuple leftTuple = (ReteTuple) it.next();
             final LinkedList linkedTuples = leftTuple.getLinkedTuples();
 
-            LinkedListObjectWrapper wrapper = (LinkedListObjectWrapper) linkedTuples.getFirst();
+            LinkedListEntry wrapper = (LinkedListEntry) linkedTuples.getFirst();
             for ( int i = 0; i < index; i++ ) {
-                wrapper = (LinkedListObjectWrapper) wrapper.getNext();
+                wrapper = (LinkedListEntry) wrapper.getNext();
             }
             propagatedTuples.add( wrapper.getObject() );
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -6,7 +6,7 @@
 
 import org.drools.RuleBaseConfiguration;
 import org.drools.common.BaseNode;
-import org.drools.common.BetaNodeBinder;
+import org.drools.common.BetaNodeConstraints;
 import org.drools.common.DefaultFactHandle;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
@@ -28,19 +28,19 @@
     private DataProvider      dataProvider;
     private TupleSource       tupleSource;
     private FieldConstraint[] constraints;
-    private BetaNodeBinder    binder;
+    private BetaNodeConstraints    binder;
 
     public FromNode(final int id,
                     final DataProvider dataProvider,    
                     final TupleSource tupleSource,
                     final FieldConstraint[] constraints,
-                    final BetaNodeBinder binder) {
+                    final BetaNodeConstraints binder) {
         super( id );
         this.dataProvider = dataProvider;
         this.tupleSource = tupleSource;
         this.constraints = constraints;
         if ( binder == null ) {
-            this.binder = new BetaNodeBinder();
+            this.binder = new BetaNodeConstraints();
         } else {
             this.binder = binder;
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -22,7 +22,7 @@
 import java.util.List;
 import java.util.Map;
 
-import org.drools.common.BetaNodeBinder;
+import org.drools.common.BetaNodeConstraints;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
@@ -81,7 +81,7 @@
     JoinNode(final int id,
              final TupleSource leftInput,
              final ObjectSource rightInput,
-             final BetaNodeBinder binder) {
+             final BetaNodeConstraints binder) {
         super( id,
                leftInput,
                rightInput,
@@ -114,7 +114,7 @@
         memory.add( workingMemory,
                     leftTuple );
 
-        final BetaNodeBinder binder = getJoinNodeBinder();
+        final BetaNodeConstraints binder = getJoinNodeBinder();
 
         for ( final Iterator it = memory.rightObjectIterator( workingMemory,
                                                               leftTuple ); it.hasNext(); ) {
@@ -160,7 +160,7 @@
         final ObjectMatches objectMatches = memory.add( workingMemory,
                                                         handle );
 
-        final BetaNodeBinder binder = getJoinNodeBinder();
+        final BetaNodeConstraints binder = getJoinNodeBinder();
         for ( final Iterator it = memory.leftTupleIterator( workingMemory,
                                                             handle ); it.hasNext(); ) {
             final ReteTuple leftTuple = (ReteTuple) it.next();
@@ -268,7 +268,7 @@
             // ensure the tuple is at the top of the memory
             memory.add( workingMemory,
                         leftTuple );
-            final BetaNodeBinder binder = getJoinNodeBinder();
+            final BetaNodeConstraints binder = getJoinNodeBinder();
 
             for ( final Iterator rightIterator = memory.rightObjectIterator( workingMemory,
                                                                              leftTuple ); rightIterator.hasNext(); ) {
@@ -335,7 +335,7 @@
                     objectMatches );
 
         TupleMatch tupleMatch = objectMatches.getFirstTupleMatch();
-        final BetaNodeBinder binder = getJoinNodeBinder();
+        final BetaNodeConstraints binder = getJoinNodeBinder();
 
         for ( final Iterator it = memory.leftTupleIterator( workingMemory,
                                                             handle ); it.hasNext(); ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -25,8 +24,7 @@
 
 import org.drools.RuleBaseConfiguration;
 import org.drools.common.BaseNode;
-import org.drools.common.BetaNodeBinder;
-import org.drools.common.DefaultFactHandle;
+import org.drools.common.BetaNodeConstraints;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.common.NodeMemory;
@@ -35,7 +33,7 @@
 import org.drools.spi.PropagationContext;
 import org.drools.util.LinkedList;
 import org.drools.util.LinkedListNode;
-import org.drools.util.LinkedListObjectWrapper;
+import org.drools.util.LinkedListEntry;
 
 /**
  * All asserting Facts must propagated into the right <code>ObjectSink</code> side of a BetaNode, if this is the first Column
@@ -57,7 +55,7 @@
      */
     private static final long    serialVersionUID = 320L;
     private final ObjectSource   objectSource;
-    private final BetaNodeBinder binder;
+    private final BetaNodeConstraints binder;
 
     /**
      * Constructus a LeftInputAdapterNode with a unique id that receives <code>FactHandle</code> from a 
@@ -89,7 +87,7 @@
      */
     public LeftInputAdapterNode(final int id,
                                 final ObjectSource source,
-                                final BetaNodeBinder binder) {
+                                final BetaNodeConstraints binder) {
         super( id );
         this.objectSource = source;
         this.binder = binder;
@@ -167,9 +165,9 @@
         // the handle might have been filtered out by the binder
         if ( list != null ) {
             for ( LinkedListNode node = list.removeFirst(); node != null; node = list.removeFirst() ) {
-                ReteTuple reteTuple = (ReteTuple) ((LinkedListObjectWrapper) node).getObject();
-                reteTuple.retractTuple( context,
-                                        workingMemory );
+                ReteTuple tuple = (ReteTuple) ((LinkedListEntry) node).getObject();
+                tuple.retractTuple( context,
+                                    workingMemory );
             }
         }
     }
@@ -187,9 +185,9 @@
             if ( list != null ) {
                 // already existed, so propagate as a modify
                 for ( LinkedListNode node = list.getFirst(); node != null; node = node.getNext() ) {
-                    ReteTuple reteTuple = (ReteTuple) ((LinkedListObjectWrapper) node).getObject();
-                    reteTuple.modifyTuple( context,
-                                           workingMemory );
+                    ReteTuple tuple = (ReteTuple) ((LinkedListEntry) node).getObject();
+                    tuple.modifyTuple( context,
+                                       workingMemory );
                 }
             } else {
                 // didn't existed, so propagate as an assert
@@ -203,9 +201,9 @@
 
             if ( list != null ) {
                 for ( LinkedListNode node = list.getFirst(); node != null; node = node.getNext() ) {
-                    ReteTuple reteTuple = (ReteTuple) ((LinkedListObjectWrapper) node).getObject();
-                    reteTuple.retractTuple( context,
-                                            workingMemory );
+                    ReteTuple tuple = (ReteTuple) ((LinkedListEntry) node).getObject();
+                    tuple.retractTuple( context,
+                                        workingMemory );
                 }
             }
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -22,14 +22,14 @@
 import java.util.List;
 import java.util.Map;
 
-import org.drools.common.BetaNodeBinder;
+import org.drools.common.BetaNodeConstraints;
 import org.drools.common.DefaultFactHandle;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 import org.drools.util.LinkedList;
 import org.drools.util.LinkedListNode;
-import org.drools.util.LinkedListObjectWrapper;
+import org.drools.util.LinkedListEntry;
 
 /**
  * <code>NotNode</code> extends <code>BetaNode</code> to perform tests for
@@ -52,7 +52,7 @@
     /**
      * 
      */
-    private static final long serialVersionUID = 5876745507400274713L;
+    private static final long serialVersionUID = 320L;
     static int                notAssertObject  = 0;
     static int                notAssertTuple   = 0;
 
@@ -74,7 +74,7 @@
         super( id,
                leftInput,
                rightInput,
-               new BetaNodeBinder() );
+               new BetaNodeConstraints() );
     }
 
     /**
@@ -88,7 +88,7 @@
     NotNode(final int id,
             final TupleSource leftInput,
             final ObjectSource rightInput,
-            final BetaNodeBinder joinNodeBinder) {
+            final BetaNodeConstraints joinNodeBinder) {
         super( id,
                leftInput,
                rightInput,
@@ -115,7 +115,7 @@
         memory.add( workingMemory,
                     leftTuple );
 
-        final BetaNodeBinder binder = getJoinNodeBinder();
+        final BetaNodeConstraints binder = getJoinNodeBinder();
 
         for ( final Iterator it = memory.rightObjectIterator( workingMemory,
                                                               leftTuple ); it.hasNext(); ) {
@@ -156,7 +156,7 @@
         final ObjectMatches objectMatches = memory.add( workingMemory,
                                                         handle );
 
-        final BetaNodeBinder binder = getJoinNodeBinder();
+        final BetaNodeConstraints binder = getJoinNodeBinder();
 
         for ( final Iterator it = memory.leftTupleIterator( workingMemory,
                                                             handle ); it.hasNext(); ) {
@@ -168,9 +168,8 @@
                          binder,
                          workingMemory );
             if ( previousSize == 0 && leftTuple.matchesSize() != 0 ) {
-                LinkedList list = leftTuple.getLinkedTuples();
-                for ( LinkedListNode node = list.getFirst(); node != null; node = node.getNext() ) {
-                    ReteTuple tuple = (ReteTuple) ((LinkedListObjectWrapper) node).getObject();
+                for ( LinkedListNode node = leftTuple.getChildEntries().getFirst(); node != null; node = node.getNext() ) {
+                    ReteTuple tuple = (ReteTuple) ((LinkedListEntry) node).getObject();
                     tuple.retractTuple( context,
                                         workingMemory );
                 }
@@ -204,12 +203,7 @@
             leftTuple.removeMatch( handle );
 
             if ( previousSize != 0 && leftTuple.matchesSize() == 0 ) {
-                LinkedList list = leftTuple.getLinkedTuples();
-                for ( LinkedListNode node = list.getFirst(); node != null; node = node.getNext() ) {
-                    ReteTuple tuple = (ReteTuple) ((LinkedListObjectWrapper) node).getObject();
-                    tuple.assertTuple( context,
-                                       workingMemory );
-                }
+                this.sink.propagateAssertTuple( leftTuple, context, workingMemory );
             }
         }
     }
@@ -240,9 +234,8 @@
                 tupleMatch.getObjectMatches().remove( tupleMatch );
             }
         } else {
-            LinkedList list = leftTuple.getLinkedTuples();
-            for ( LinkedListNode node = list.removeFirst(); node != null; node = list.getFirst() ) {
-                ReteTuple tuple = (ReteTuple) ((LinkedListObjectWrapper) node).getObject();
+            for ( LinkedListNode node = leftTuple.getChildEntries().getFirst(); node != null; node = node.getNext() ) {
+                ReteTuple tuple = (ReteTuple) ((LinkedListEntry) node).getObject();
                 tuple.retractTuple( context,
                                     workingMemory );
             }
@@ -269,7 +262,7 @@
         leftTuple.getTupleMatches().clear();
 
         final int previous = oldMatches.size();
-        final BetaNodeBinder binder = getJoinNodeBinder();
+        final BetaNodeConstraints binder = getJoinNodeBinder();
 
         for ( final Iterator rightIterator = memory.rightObjectIterator( workingMemory,
                                                                          leftTuple ); rightIterator.hasNext(); ) {
@@ -306,9 +299,8 @@
         }
 
         if ( previous == 0 && leftTuple.matchesSize() == 0 ) {
-            LinkedList list = leftTuple.getLinkedTuples();
-            for ( LinkedListNode node = list.getFirst(); node != null; node = node.getNext() ) {
-                ReteTuple tuple = (ReteTuple) ((LinkedListObjectWrapper) node).getObject();
+            for ( LinkedListNode node = leftTuple.getChildEntries().getFirst(); node != null; node = node.getNext() ) {
+                ReteTuple tuple = (ReteTuple) ((LinkedListEntry) node).getObject();
                 tuple.modifyTuple( context,
                                    workingMemory );
             }
@@ -317,9 +309,8 @@
                                             context,
                                             workingMemory );
         } else if ( previous == 0 && leftTuple.matchesSize() != 0 ) {
-            LinkedList list = leftTuple.getLinkedTuples();
-            for ( LinkedListNode node = list.getFirst(); node != null; node = node.getNext() ) {
-                ReteTuple tuple = (ReteTuple) ((LinkedListObjectWrapper) node).getObject();
+            for ( LinkedListNode node = leftTuple.getChildEntries().getFirst(); node != null; node = node.getNext() ) {
+                ReteTuple tuple = (ReteTuple) ((LinkedListEntry) node).getObject();
                 tuple.retractTuple( context,
                                     workingMemory );
             }
@@ -338,7 +329,7 @@
                     objectMatches );
 
         TupleMatch tupleMatch = objectMatches.getFirstTupleMatch();
-        final BetaNodeBinder binder = getJoinNodeBinder();
+        final BetaNodeConstraints binder = getJoinNodeBinder();
 
         for ( final Iterator it = memory.leftTupleIterator( workingMemory,
                                                             handle ); it.hasNext(); ) {
@@ -356,9 +347,8 @@
                     objectMatches.remove( tupleMatch );
                 }
                 if ( previous == 0 && leftTuple.matchesSize() == 0 ) {
-                    LinkedList list = leftTuple.getLinkedTuples();
-                    for ( LinkedListNode node = list.getFirst(); node != null; node = node.getNext() ) {
-                        ReteTuple tuple = (ReteTuple) ((LinkedListObjectWrapper) node).getObject();
+                    for ( LinkedListNode node = leftTuple.getChildEntries().getFirst(); node != null; node = node.getNext() ) {
+                        ReteTuple tuple = (ReteTuple) ((LinkedListEntry) node).getObject();
                         tuple.modifyTuple( context,
                                            workingMemory );
                     }
@@ -367,9 +357,8 @@
                                                     context,
                                                     workingMemory );
                 } else if ( previous == 0 && leftTuple.matchesSize() != 0 ) {
-                    LinkedList list = leftTuple.getLinkedTuples();
-                    for ( LinkedListNode node = list.getFirst(); node != null; node = node.getNext() ) {
-                        ReteTuple tuple = (ReteTuple) ((LinkedListObjectWrapper) node).getObject();
+                    for ( LinkedListNode node = leftTuple.getChildEntries().getFirst(); node != null; node = node.getNext() ) {
+                        ReteTuple tuple = (ReteTuple) ((LinkedListEntry) node).getObject();
                         tuple.retractTuple( context,
                                             workingMemory );
                     }
@@ -385,9 +374,8 @@
                              binder,
                              workingMemory );
                 if ( previousSize == 0 && leftTuple.matchesSize() != 0 ) {
-                    LinkedList list = leftTuple.getLinkedTuples();
-                    for ( LinkedListNode node = list.getFirst(); node != null; node = node.getNext() ) {
-                        ReteTuple tuple = (ReteTuple) ((LinkedListObjectWrapper) node).getObject();
+                    for ( LinkedListNode node = leftTuple.getChildEntries().getFirst(); node != null; node = node.getNext() ) {
+                        ReteTuple tuple = (ReteTuple) ((LinkedListEntry) node).getObject();
                         tuple.retractTuple( context,
                                             workingMemory );
                     }

Deleted: 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-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -1,319 +0,0 @@
-/*
- * 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.
- */
-
-package org.drools.reteoo;
-
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.drools.FactHandle;
-import org.drools.common.DefaultFactHandle;
-import org.drools.common.InternalFactHandle;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.rule.Declaration;
-import org.drools.spi.Activation;
-import org.drools.spi.PropagationContext;
-import org.drools.spi.Tuple;
-import org.drools.util.BaseMultiLinkedListNode;
-import org.drools.util.LinkedList;
-import org.drools.util.LinkedListNode;
-
-/**
- * Rete-OO <code>Tuple</code> implementation. A <code>ReteTuple</code> implements <code>LinkedListNode</code> so that it can referenced
- * in a <code>LinkedList<code>, this allows for fast removal, without searching; as <code>ReteTuple</code>s are add sequentially to a nodes 
- * memory (<code>LinkedList</code>), but removed randomly. 
- * 
- * Each <code>ReteTuple</code> has a <code>Map</code> of matches. The key is the matching <code>FactHandleImpl</code> and the value
- * is the <code>TupleMatch</code>, which is also referenced in the <code>ObjectMatches</code> <code>LinkedList</code>.
- * <p>
- * Each <code>ReteTuple</code> also reference a <code>TupleKey</code> which is special array of FactHandles
- * representing the <code>Column</code>s in a <code>Rule</code>. The <code>TupleKey</code> also provide the 
- * hashCode implementation for <code>ReteTuple</code>.
- * 
- * @see Tuple
- * @see CompositeTupleMatch
- * @see TupleKey
- * 
- * @author <a href="mailto:mark.proctor at jboss.com">Mark Proctor</a>
- * @author <a href="mailto:bob at werken.com">Bob McWhirter</a>
- */
-public class ReteTuple extends BaseMultiLinkedListNode
-    implements
-    Tuple,
-    Serializable {
-    // ------------------------------------------------------------
-    // Instance members
-    // ------------------------------------------------------------
-
-    /**
-     * 
-     */
-    private static final long serialVersionUID = 320;
-
-    /** The </code>TupleKey</code> */
-    private final TupleKey    key;
-    
-    private final TupleSink   sink;
-
-    /** The <code>Map</code> of <code>FactHandleImpl</code> matches */
-    private Map               matches          = Collections.EMPTY_MAP;
-
-    /** The resuling propagation when used in a <code>NotNode</code> */
-    private LinkedList        linkedTuples;
-
-    private Activation        activation;    
-
-    // ------------------------------------------------------------
-    // Constructors
-    // ------------------------------------------------------------
-    /**
-     * Creates a <code>ReteTuple</code> with the handle at the specified column in the <code>TupleKey</code>.
-     * 
-     * @param column
-     *      The column position of the handle in the <code>TupleKey</code>
-     * @param handle
-     *      The <code>FactHandleImpl</code> to be placed in the <code>TupleKey</code> at the given column position.
-     * @param workingMemory
-     *      The <code>WorkingMemory</code> session.
-     */
-    public ReteTuple(final InternalFactHandle handle, final TupleSink sink) {
-        this.key = new TupleKey( handle );
-        this.sink = sink;
-    }
-
-    /**
-     * Creates a copy of the passed <code>ReteTuple</code>.
-     * 
-     * @param tuple
-     */
-    public ReteTuple(final ReteTuple tuple, final TupleSink sink) {
-        this.key = new TupleKey( tuple.key );
-        this.sink = sink;
-    }
-
-    /**
-     * Merges the left <code>ReteTuple</code> with the right <code>FactHandleImpl</code>.
-     * 
-     * @param left
-     *      The <code>ReteTuple</code> to be joined.
-     * @param handle
-     *      the <code>FactHandleImpl</code> to be joined.
-     */
-    public ReteTuple(final ReteTuple left,
-              final InternalFactHandle handle, final TupleSink sink) {
-        this.key = new TupleKey( left.key,
-                                 handle );
-        this.sink = sink;
-    }
-
-    // ------------------------------------------------------------
-    // Instance methods
-    // ------------------------------------------------------------
-
-    /**
-     * Retrieve the key for this tuple.
-     * 
-     * @return The key.
-     */
-    TupleKey getKey() {
-        return this.key;
-    }
-
-    public long getRecency() {
-        return this.key.getRecency();
-    }
-
-    /* (non-Javadoc)
-     * @see org.drools.spi.Tuple#getFactHandles()
-     */
-    public InternalFactHandle[] getFactHandles() {
-        return this.key.getFactHandles();
-    }
-
-    /**
-     * Determine if this tuple depends upon a specified object.
-     * 
-     * @param handle
-     *            The object handle to test.
-     * 
-     * @return <code>true</code> if this tuple depends upon the specified
-     *         object, otherwise <code>false</code>.
-     */
-    public boolean dependsOn(final FactHandle handle) {
-        return this.key.containsFactHandle( handle );
-    }
-
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-    /* (non-Javadoc)
-     * @see org.drools.spi.Tuple#get(int)
-     */
-    public InternalFactHandle get(final int col) {
-        return this.key.get( col );
-    }
-
-    /* (non-Javadoc)
-     * @see org.drools.spi.Tuple#get(org.drools.rule.Declaration)
-     */
-    public InternalFactHandle get(final Declaration declaration) {
-        return get( declaration.getColumn().getFactIndex() );
-    }
-
-    public void setActivation(final Activation activation) {
-        this.activation = activation;
-    }
-
-    public Activation getActivation() {
-        return this.activation;
-    }
-
-    /**
-     * Specifies the tuple as the result of <code>NotNode</code> propagation.
-     * 
-     * @param tuple
-     *      The <code>ReteTuple</code>
-     */
-    public void addLinkedTuple(final LinkedListNode node) {
-        if ( this.linkedTuples == null ) {
-            this.linkedTuples = new LinkedList();
-        }
-        this.linkedTuples.add( node );
-    }
-
-    /**
-     * Returns the tuple from the result of <code>NotNode</code> propagation. If there has been no 
-     * <code>NotNode</code> propagation then it returns null.
-     * 
-     * @return
-     *  The <code>ReteTuple</code>
-     */
-    public LinkedList getLinkedTuples() {
-        return this.linkedTuples;
-    }
-
-    public void clearLinkedTuple() {
-        this.linkedTuples.clear();
-    }
-
-    public void clearTupleMatches() {
-        this.matches.clear();
-    }    
-    
-    public void addTupleMatch(final InternalFactHandle handle,
-                              final TupleMatch node) {
-        if ( this.matches == Collections.EMPTY_MAP ) {
-            this.matches = new HashMap(2);
-        }
-        this.matches.put( handle,
-                          node );
-    }
-
-    public int matchesSize() {
-        return this.matches.size();
-    }
-
-    public Map getTupleMatches() {
-        return this.matches;
-    }
-
-    public TupleMatch getTupleMatch(final DefaultFactHandle handle) {
-        return (TupleMatch) this.matches.get( handle );
-    }
-
-    public CompositeTupleMatch removeMatch(final InternalFactHandle handle) {
-        return (CompositeTupleMatch) this.matches.remove( handle );
-    }
-
-    //    public void remove(PropagationContext context,
-    //                       WorkingMemoryImpl workingMemory) {
-    //        if ( this.callback != null ) {
-    //            this.callback.retract( this,
-    //                                   context,
-    //                                   workingMemory );
-    //        }
-    //
-    //        if ( !this.matches.isEmpty() ) {
-    //            for ( Iterator it = this.matches.values().iterator(); it.hasNext(); ) {
-    //                TupleMatch node = (TupleMatch) it.next();
-    //                if ( node != null && node.getJoinedTuple() != null ) {
-    //                    node.getJoinedTuple().remove( context,
-    //                                                  workingMemory );
-    //                }
-    //                node.remove( context,
-    //                             workingMemory );
-    //            }
-    //        }
-    //
-    //        if ( previous != null ) {
-    //            this.previous.setNext( this.next );
-    //            if ( this.next != null ) {
-    //                this.next.setPrevious( this.previous );
-    //            }
-    //        }
-    //
-    //        this.previous = null;
-    //        this.next = null;
-    //        this.matches = null;
-    //    }         
-
-    public boolean equals(final Object object) {
-        if ( this == object ) {
-            return true;
-        }
-
-        if ( object == null || !(object instanceof ReteTuple) ) {
-            return false;
-        }
-
-        return this.key.equals( ((ReteTuple) object).key );
-    }
-
-    public int hashCode() {
-        return this.key.hashCode();
-    }
-
-    public String toString() {
-        final StringBuffer buffer = new StringBuffer();
-        for ( int i = 0; i < this.key.size(); i++ ) {
-            buffer.append( this.key.get( i ) + ", " );
-        }
-        return buffer.toString();
-    }
-
-    public void assertTuple(PropagationContext context,
-                            InternalWorkingMemory workingMemory) {
-        this.sink.assertTuple( this, context, workingMemory );
-        
-    }
-
-    public void modifyTuple(PropagationContext context,
-                            InternalWorkingMemory workingMemory) {
-        this.sink.modifyTuple( this, context, workingMemory );
-        
-    }
-
-    public void retractTuple(PropagationContext context,
-                             InternalWorkingMemory workingMemory) {
-        this.sink.retractTuple( this, context, workingMemory );        
-    }
-    
-    public TupleSink getTupleSink() {
-        return this.sink;
-    }
-    
-}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -33,7 +33,7 @@
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
 import org.drools.common.BaseNode;
-import org.drools.common.BetaNodeBinder;
+import org.drools.common.BetaNodeConstraints;
 import org.drools.common.InstanceEqualsConstraint;
 import org.drools.common.InstanceNotEqualsConstraint;
 import org.drools.rule.Accumulate;
@@ -252,7 +252,7 @@
                 continue;
             }
 
-            BetaNodeBinder binder = null;
+            BetaNodeConstraints binder = null;
             Column column = null;
 
             if ( object instanceof Column ) {
@@ -366,7 +366,7 @@
                                                                  alphaNodeSource ) );
     }
 
-    private BetaNodeBinder attachColumn(final Column column,
+    private BetaNodeConstraints attachColumn(final Column column,
                                         final GroupElement parent,
                                         final boolean removeIdentities) throws InvalidPatternException {
         // Adjusting offset in case a previous Initial-Fact was added to the network
@@ -383,12 +383,12 @@
         final List predicates = attachAlphaNodes( column,
                                                   removeIdentities );
 
-        BetaNodeBinder binder;
+        BetaNodeConstraints binder;
 
         if ( !predicates.isEmpty() ) {
-            binder = new BetaNodeBinder( (FieldConstraint[]) predicates.toArray( new FieldConstraint[predicates.size()] ) );
+            binder = new BetaNodeConstraints( (FieldConstraint[]) predicates.toArray( new FieldConstraint[predicates.size()] ) );
         } else {
-            binder = new BetaNodeBinder();
+            binder = new BetaNodeConstraints();
         }
 
         return binder;
@@ -449,7 +449,7 @@
     private void attachNot(final TupleSource tupleSource,
                            final Not not,
                            final ObjectSource ObjectSource,
-                           final BetaNodeBinder binder,
+                           final BetaNodeConstraints binder,
                            final Column column) {
         final NotNode notNode = (NotNode) attachNode( new NotNode( this.id++,
                                                                    tupleSource,
@@ -463,7 +463,7 @@
             attachNot( tupleSource,
                        (Not) not.getChild(),
                        adapter,
-                       new BetaNodeBinder(),
+                       new BetaNodeConstraints(),
                        column );
         } else if ( not.getChild() instanceof Exists ) {
             final RightInputAdapterNode adapter = (RightInputAdapterNode) attachNode( new RightInputAdapterNode( this.id++,
@@ -472,7 +472,7 @@
             attachExists( tupleSource,
                           (Exists) not.getChild(),
                           adapter,
-                          new BetaNodeBinder(),
+                          new BetaNodeConstraints(),
                           column );
         } else {
             this.tupleSource = notNode;
@@ -482,7 +482,7 @@
     private void attachExists(final TupleSource tupleSource,
                               final Exists exists,
                               final ObjectSource ObjectSource,
-                              final BetaNodeBinder binder,
+                              final BetaNodeConstraints binder,
                               final Column column) {
         NotNode notNode = (NotNode) attachNode( new NotNode( this.id++,
                                                              tupleSource,
@@ -492,7 +492,7 @@
                                                                                                        column.getFactIndex(),
                                                                                                        notNode ) );
 
-        BetaNodeBinder identityBinder = new BetaNodeBinder( new InstanceEqualsConstraint( column.getFactIndex() ) );
+        BetaNodeConstraints identityBinder = new BetaNodeConstraints( new InstanceEqualsConstraint( column.getFactIndex() ) );
         notNode = (NotNode) attachNode( new NotNode( this.id++,
                                                      tupleSource,
                                                      adapter,
@@ -505,7 +505,7 @@
             attachNot( tupleSource,
                        (Not) exists.getChild(),
                        adapter,
-                       new BetaNodeBinder(),
+                       new BetaNodeConstraints(),
                        column );
         } else if ( exists.getChild() instanceof Exists ) {
             adapter = (RightInputAdapterNode) attachNode( new RightInputAdapterNode( this.id++,
@@ -514,7 +514,7 @@
             attachExists( tupleSource,
                           (Exists) exists.getChild(),
                           adapter,
-                          new BetaNodeBinder(),
+                          new BetaNodeConstraints(),
                           column );
         } else {
             this.tupleSource = notNode;
@@ -613,12 +613,12 @@
             }
         }
 
-        BetaNodeBinder binder;
+        BetaNodeConstraints binder;
 
         if ( !predicateConstraints.isEmpty() ) {
-            binder = new BetaNodeBinder( (FieldConstraint[]) predicateConstraints.toArray( new FieldConstraint[predicateConstraints.size()] ) );
+            binder = new BetaNodeConstraints( (FieldConstraint[]) predicateConstraints.toArray( new FieldConstraint[predicateConstraints.size()] ) );
         } else {
-            binder = new BetaNodeBinder();
+            binder = new BetaNodeConstraints();
         }
 
         this.tupleSource = attachNode( new FromNode( id++,
@@ -647,7 +647,7 @@
         }
 
         final Column sourceColumn = accumulate.getSourceColumn();
-        final BetaNodeBinder sourceBinder = attachColumn( sourceColumn,
+        final BetaNodeConstraints sourceBinder = attachColumn( sourceColumn,
                                                           parent,
                                                           true );
 
@@ -688,11 +688,11 @@
             }
         }
 
-        BetaNodeBinder resultsBinder = null;
+        BetaNodeConstraints resultsBinder = null;
         if ( !predicateConstraints.isEmpty() ) {
-            resultsBinder = new BetaNodeBinder( (FieldConstraint[]) predicateConstraints.toArray( new FieldConstraint[predicateConstraints.size()] ) );
+            resultsBinder = new BetaNodeConstraints( (FieldConstraint[]) predicateConstraints.toArray( new FieldConstraint[predicateConstraints.size()] ) );
         } else {
-            resultsBinder = new BetaNodeBinder();
+            resultsBinder = new BetaNodeConstraints();
         }
 
         this.tupleSource = attachNode( new AccumulateNode( id++,
@@ -722,7 +722,7 @@
         }
 
         final Column sourceColumn = collect.getSourceColumn();
-        final BetaNodeBinder sourceBinder = attachColumn( sourceColumn,
+        final BetaNodeConstraints sourceBinder = attachColumn( sourceColumn,
                                                           parent,
                                                           true );
 
@@ -763,11 +763,11 @@
             }
         }
 
-        BetaNodeBinder resultsBinder = null;
+        BetaNodeConstraints resultsBinder = null;
         if ( !predicateConstraints.isEmpty() ) {
-            resultsBinder = new BetaNodeBinder( (FieldConstraint[]) predicateConstraints.toArray( new FieldConstraint[predicateConstraints.size()] ) );
+            resultsBinder = new BetaNodeConstraints( (FieldConstraint[]) predicateConstraints.toArray( new FieldConstraint[predicateConstraints.size()] ) );
         } else {
-            resultsBinder = new BetaNodeBinder();
+            resultsBinder = new BetaNodeConstraints();
         }
 
         this.tupleSource = attachNode( new CollectNode( id++,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -87,7 +87,7 @@
     public void modifyObject(final FactHandle factHandle,
                              final Object object,
                              final Rule rule,
-                             final Activation activation) throws FactException {
+                             final Activation activation) throws FactException {        
         try {
             this.lock.lock();
             final int status = ((InternalFactHandle) factHandle).getEqualityKey().getStatus();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleTupleMatch.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleTupleMatch.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleTupleMatch.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -18,7 +18,9 @@
 
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
+import org.drools.spi.Tuple;
 import org.drools.util.AbstractBaseLinkedListNode;
+import org.drools.util.LinkedListEntry;
 
 /**
  * <code>TupleMatch</code> maintains a reference to the parent <code>ReteTuple</code> and a <code>List</code> of all resulting joins. 
@@ -36,9 +38,9 @@
  */
 public class SingleTupleMatch extends AbstractBaseLinkedListNode implements TupleMatch {
     private ReteTuple          tuple;
+    
+    private ReteTuple           joined;
 
-    private ReteTuple          child;
-
     private ObjectMatches      objectMatches;
 
     /**
@@ -72,7 +74,7 @@
      * @see org.drools.reteoo.ITupleMatch#addJoinedTuple(org.drools.reteoo.ReteTuple)
      */
     public void addJoinedTuple(final ReteTuple tuple) {
-        this.child = tuple;
+        this.joined = tuple;
     }
 
     /* (non-Javadoc)
@@ -80,7 +82,7 @@
      */
     public void propagateRetractTuple(final PropagationContext context,
                                       final InternalWorkingMemory workingMemory) {
-        this.child.retractTuple( context, workingMemory );
+        this.joined.retractTuple( context, workingMemory );
     }
 
     /* (non-Javadoc)
@@ -88,14 +90,14 @@
      */
     public void propagateModifyTuple(final PropagationContext context,
                                      final InternalWorkingMemory workingMemory) {
-        this.child.modifyTuple( context, workingMemory );
+        this.joined.modifyTuple( context, workingMemory );
     }
 
     /* (non-Javadoc)
      * @see org.drools.reteoo.ITupleMatch#getTupleForSink(org.drools.reteoo.TupleSink)
      */
     public ReteTuple getTupleForSink(TupleSink sink) {
-        return this.child;
+        return this.joined;
     }
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleTupleSinkAdapter.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleTupleSinkAdapter.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -9,7 +9,7 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 import org.drools.util.LinkedList;
-import org.drools.util.LinkedListObjectWrapper;
+import org.drools.util.LinkedListEntry;
 
 public class SingleTupleSinkAdapter
     implements
@@ -34,12 +34,12 @@
     }
 
     public LinkedList createAndAssertTuple(InternalFactHandle handle,
-                                     PropagationContext context,
-                                     InternalWorkingMemory workingMemory) {
+                                           PropagationContext context,
+                                           InternalWorkingMemory workingMemory) {
         final LinkedList list = new LinkedList();
         ReteTuple tuple = new ReteTuple( handle,
                                          sink );
-        list.add( new LinkedListObjectWrapper( tuple ) );
+        list.add( new LinkedListEntry( tuple ) );
         tuple.assertTuple( context,
                            workingMemory );
         return list;
@@ -51,7 +51,7 @@
         final ReteTuple child = new ReteTuple( tuple,
                                                sink );
         // no TupleMatch so instead add as a linked tuple
-        tuple.addLinkedTuple( new LinkedListObjectWrapper( child ) );
+        tuple.addChildEntry( child );
         child.assertTuple( context,
                            workingMemory );
     }
@@ -83,12 +83,12 @@
 
         for ( final Iterator it = memory.values().iterator(); it.hasNext(); ) {
             final LinkedList tuples = (LinkedList) it.next();
-            propagatedTuples.add( ((LinkedListObjectWrapper) tuples.getFirst()).getObject() );
+            propagatedTuples.add( ((LinkedListEntry) tuples.getFirst()).getObject() );
         }
 
         return propagatedTuples;
     }
-    
+
     public int size() {
         return 1;
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -34,6 +34,7 @@
 import org.drools.spi.AgendaGroup;
 import org.drools.spi.Duration;
 import org.drools.spi.PropagationContext;
+import org.drools.spi.Tuple;
 
 /**
  * Leaf Rete-OO node responsible for enacting <code>Action</code> s on a
@@ -99,9 +100,9 @@
     // org.drools.impl.TupleSink
     // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
-    public void assertTuple(final ReteTuple tuple,
+    public void assertTuple(ReteTuple tuple,
                             final PropagationContext context,
-                            final InternalWorkingMemory workingMemory) {
+                            final InternalWorkingMemory workingMemory) {        
         assertTuple( tuple,
                      context,
                      workingMemory,
@@ -123,6 +124,10 @@
                             final PropagationContext context,
                             final InternalWorkingMemory workingMemory,
                             final boolean fireActivationCreated) {
+        //we only have to clone the head fact to make sure the graph is not affected during consequence reads after a modify
+        ReteTuple cloned = new ReteTuple( tuple );
+        
+        
         // if the current Rule is no-loop and the origin rule is the same then
         // return
         if ( this.rule.getNoLoop() && this.rule.equals( context.getRuleOrigin() ) ) {
@@ -134,7 +139,7 @@
 
         if ( dur != null && dur.getDuration( tuple ) > 0 ) {
             final ScheduledAgendaItem item = new ScheduledAgendaItem( context.getPropagationNumber(),
-                                                                      tuple,
+                                                                      cloned,
                                                                       agenda,
                                                                       context,
                                                                       this.rule );
@@ -186,7 +191,7 @@
             }
 
             final AgendaItem item = new AgendaItem( context.getPropagationNumber(),
-                                                    tuple,
+                                                    cloned,
                                                     context,
                                                     this.rule );
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleMatch.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleMatch.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleMatch.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -2,16 +2,19 @@
 
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
+import org.drools.spi.Tuple;
 import org.drools.util.LinkedListNode;
 
-public interface TupleMatch extends LinkedListNode {
+public interface TupleMatch
+    extends
+    LinkedListNode {
 
     /**
      * Return the parent <code>ReteTuple</code>
      * 
      * @return the <code>ReteTuple</code>
      */
-    public abstract ReteTuple getTuple();
+    public ReteTuple getTuple();
 
     /**
      * Returns the referenced <code>ObjectMatches</code> which provides the 
@@ -19,21 +22,21 @@
      * 
      * @return the <code>ObjectMatches</code>
      */
-    public abstract ObjectMatches getObjectMatches();
+    public ObjectMatches getObjectMatches();
 
     /**
      * Adds a resulting join to the <code>List</code>. A join is made for each <code>TupleSink</code>.
      * 
      * @param tuple
      */
-    public abstract void addJoinedTuple(final ReteTuple tuple);
+    public void addJoinedTuple(final ReteTuple tuple);
 
-    public abstract void propagateRetractTuple(final PropagationContext context,
-                                               final InternalWorkingMemory workingMemory);
+    public void propagateRetractTuple(final PropagationContext context,
+                                      final InternalWorkingMemory workingMemory);
 
-    public abstract void propagateModifyTuple(final PropagationContext context,
-                                              final InternalWorkingMemory workingMemory);
+    public void propagateModifyTuple(final PropagationContext context,
+                                     final InternalWorkingMemory workingMemory);
 
-    public abstract ReteTuple getTupleForSink(TupleSink sink);
+    public ReteTuple getTupleForSink(TupleSink sink);
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSink.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSink.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSink.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -56,7 +56,5 @@
     void modifyTuple(ReteTuple tuple,
                      PropagationContext context,
                      InternalWorkingMemory workingMemory);
-    
-    
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -21,13 +21,13 @@
 import java.util.List;
 
 import org.drools.common.BaseNode;
-import org.drools.common.BetaNodeBinder;
+import org.drools.common.BetaNodeConstraints;
 import org.drools.common.DefaultFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 import org.drools.util.LinkedList;
 import org.drools.util.LinkedListNode;
-import org.drools.util.LinkedListObjectWrapper;
+import org.drools.util.LinkedListEntry;
 
 /**
  * A source of <code>ReteTuple</code> s for a <code>TupleSink</code>.

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -21,7 +21,7 @@
 import org.drools.RuleBaseConfiguration;
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
-import org.drools.common.BetaNodeBinder;
+import org.drools.common.BetaNodeConstraints;
 import org.drools.common.InstanceEqualsConstraint;
 import org.drools.rule.VariableConstraint;
 import org.drools.spi.FieldConstraint;
@@ -49,7 +49,7 @@
      * @return the newly created BetaLeftMemory 
      */
     public static BetaLeftMemory newLeftMemory(final RuleBaseConfiguration config,
-                                               final BetaNodeBinder binder) {
+                                               final BetaNodeConstraints binder) {
         BetaLeftMemory memory = null;
         BetaLeftMemory innerMostMemory = null;
         final FieldConstraint[] constraints = (binder != null) ? binder.getConstraints() : null;
@@ -109,7 +109,7 @@
      * @return the newly created BetaRightMemory 
      */
     public static BetaRightMemory newRightMemory(final RuleBaseConfiguration config,
-                                                 final BetaNodeBinder binder) {
+                                                 final BetaNodeConstraints binder) {
         BetaRightMemory memory = null;
         BetaRightMemory innerMostMemory = null;
         final FieldConstraint[] constraints = (binder != null) ? binder.getConstraints() : null;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaRightMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaRightMemory.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaRightMemory.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -23,7 +23,7 @@
 
 import org.drools.WorkingMemory;
 import org.drools.reteoo.ObjectMatches;
-import org.drools.reteoo.ReteTuple;
+import org.drools.spi.Tuple;
 import org.drools.util.MultiLinkedListNodeWrapper;
 
 /**
@@ -93,7 +93,7 @@
      * @return
      */
     public Iterator iterator(WorkingMemory workingMemory,
-                             ReteTuple tuple);
+                             Tuple tuple);
 
     /**
      * Returns an iterator that allows to iterate over all the ObjectMatches
@@ -125,7 +125,7 @@
      * @param handle
      */
     public void selectPossibleMatches(WorkingMemory workingMemory,
-                                      ReteTuple tuple);
+                                      Tuple tuple);
 
     /**
      * Returns true if the matches is a possible match to the tuple

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -27,6 +27,7 @@
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
+import org.drools.spi.Tuple;
 import org.drools.util.MultiLinkedList;
 import org.drools.util.MultiLinkedListNode;
 import org.drools.util.MultiLinkedListNodeWrapper;
@@ -117,7 +118,7 @@
      */
     public final void add(final WorkingMemory workingMemory,
                           final MultiLinkedListNodeWrapper tuple) {
-        final boolean partition = ((Boolean) this.declaration.getValue( ((ReteTuple) tuple.getNode()).get( this.column.getFactIndex() ).getObject() )).booleanValue();
+        final boolean partition = ((Boolean) this.declaration.getValue( ((Tuple) tuple.getNode()).get( this.column.getFactIndex() ).getObject() )).booleanValue();
         if ( partition == true ) {
             this.trueList.add( tuple );
         } else {
@@ -217,19 +218,19 @@
         return new Iterator() {
             Iterator  trueIt       = BooleanConstrainedLeftMemory.this.trueList.iterator();
             Iterator  falseIt      = BooleanConstrainedLeftMemory.this.falseList.iterator();
-            ReteTuple currentTrue  = null;
-            ReteTuple currentFalse = null;
-            ReteTuple current      = null;
-            ReteTuple next         = null;
+            Tuple currentTrue  = null;
+            Tuple currentFalse = null;
+            Tuple current      = null;
+            Tuple next         = null;
 
             public final boolean hasNext() {
                 boolean hasnext = false;
                 if ( this.next == null ) {
                     if ( (this.currentTrue == null) && (this.trueIt.hasNext()) ) {
-                        this.currentTrue = (ReteTuple) this.trueIt.next();
+                        this.currentTrue = (Tuple) this.trueIt.next();
                     }
                     if ( (this.currentFalse == null) && (this.falseIt.hasNext()) ) {
-                        this.currentFalse = (ReteTuple) this.falseIt.next();
+                        this.currentFalse = (Tuple) this.falseIt.next();
                     }
                     if ( (this.currentTrue != null) && (this.currentFalse != null) ) {
                         if ( this.currentTrue.getRecency() <= this.currentFalse.getRecency() ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -25,11 +25,11 @@
 import org.drools.base.evaluators.Operator;
 import org.drools.common.InternalFactHandle;
 import org.drools.reteoo.ObjectMatches;
-import org.drools.reteoo.ReteTuple;
 import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
+import org.drools.spi.Tuple;
 import org.drools.util.MultiLinkedList;
 import org.drools.util.MultiLinkedListNodeWrapper;
 
@@ -153,7 +153,7 @@
      * @see org.drools.reteoo.beta.BetaRightMemory#iterator(org.drools.WorkingMemory, org.drools.reteoo.ReteTuple)
      */
     public final Iterator iterator(final WorkingMemory workingMemory,
-                                   final ReteTuple tuple) {
+                                   final Tuple tuple) {
         this.selectPossibleMatches( workingMemory,
                                     tuple );
         final Iterator iterator = new Iterator() {
@@ -215,7 +215,7 @@
      * @see org.drools.reteoo.beta.BetaRightMemory#selectPossibleMatches(org.drools.WorkingMemory, org.drools.reteoo.ReteTuple)
      */
     public final void selectPossibleMatches(final WorkingMemory workingMemory,
-                                            final ReteTuple tuple) {
+                                            final Tuple tuple) {
         boolean select = ((Boolean) this.declaration.getValue( tuple.get( this.column.getFactIndex() ).getObject() )).booleanValue();
         select = (this.evaluator.getOperator()) == Operator.EQUAL ? select : !select;
         this.selectedList = (select == true) ? this.trueList : this.falseList;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultRightMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultRightMemory.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultRightMemory.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -22,7 +22,7 @@
 
 import org.drools.WorkingMemory;
 import org.drools.reteoo.ObjectMatches;
-import org.drools.reteoo.ReteTuple;
+import org.drools.spi.Tuple;
 import org.drools.util.MultiLinkedList;
 import org.drools.util.MultiLinkedListNodeWrapper;
 
@@ -96,7 +96,7 @@
      * @see org.drools.reteoo.beta.BetaRightMemory#iterator(org.drools.WorkingMemory, org.drools.reteoo.ReteTuple)
      */
     public final Iterator iterator(final WorkingMemory workingMemory,
-                                   final ReteTuple tuple) {
+                                   final Tuple tuple) {
         return this.memory.iterator();
     }
 
@@ -116,7 +116,7 @@
      * @see org.drools.reteoo.beta.BetaRightMemory#selectPossibleMatches(org.drools.WorkingMemory, org.drools.reteoo.ReteTuple)
      */
     public final void selectPossibleMatches(final WorkingMemory workingMemory,
-                                            final ReteTuple tuple) {
+                                            final Tuple tuple) {
         // nothing to do
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/InstanceEqualConstrRightMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/InstanceEqualConstrRightMemory.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/InstanceEqualConstrRightMemory.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -26,7 +26,7 @@
 import org.drools.common.DefaultFactHandle;
 import org.drools.common.InternalFactHandle;
 import org.drools.reteoo.ObjectMatches;
-import org.drools.reteoo.ReteTuple;
+import org.drools.spi.Tuple;
 import org.drools.util.IdentityMap;
 import org.drools.util.MultiLinkedList;
 import org.drools.util.MultiLinkedListNodeWrapper;
@@ -132,7 +132,7 @@
      * @see org.drools.reteoo.beta.BetaRightMemory#iterator(org.drools.WorkingMemory, org.drools.reteoo.ReteTuple)
      */
     public final Iterator iterator(final WorkingMemory workingMemory,
-                                   final ReteTuple tuple) {
+                                   final Tuple tuple) {
         this.selectPossibleMatches( workingMemory,
                                     tuple );
         Iterator iterator = null;
@@ -159,7 +159,7 @@
      * @see org.drools.reteoo.beta.BetaRightMemory#selectPossibleMatches(org.drools.WorkingMemory, org.drools.reteoo.ReteTuple)
      */
     public final void selectPossibleMatches(final WorkingMemory workingMemory,
-                                            final ReteTuple tuple) {
+                                            final Tuple tuple) {
         final Object select = tuple.get( this.column ).getObject();
         this.selectedObject = this.memoryMap.get( select );
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemory.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemory.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -31,6 +31,7 @@
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
+import org.drools.spi.Tuple;
 import org.drools.util.LinkedList;
 import org.drools.util.MultiLinkedList;
 import org.drools.util.MultiLinkedListNode;
@@ -123,7 +124,7 @@
     public final void add(final WorkingMemory workingMemory,
                           final MultiLinkedListNodeWrapper tuple) {
         final MultiLinkedList list = this.getTupleBucket( workingMemory,
-                                                          (ReteTuple) tuple.getNode() );
+                                                          (Tuple) tuple.getNode() );
 
         // adding the wrapper instead of the node
         list.add( tuple );
@@ -236,8 +237,8 @@
         final TreeSet set = new TreeSet( new Comparator() {
             public int compare(Object arg0,
                                Object arg1) {
-                ReteTuple t0 = (ReteTuple) arg0;
-                ReteTuple t1 = (ReteTuple) arg1;
+                Tuple t0 = (Tuple) arg0;
+                Tuple t1 = (Tuple) arg1;
                 return (t0.getRecency() <= t1.getRecency()) ? -1 : 1;
             }
         } );
@@ -285,7 +286,7 @@
      * @return
      */
     private final MultiLinkedList getTupleBucket(final WorkingMemory workingMemory,
-                                                 final ReteTuple tuple) {
+                                                 final Tuple tuple) {
         final Integer hash = getTupleHash( workingMemory,
                                            tuple );
         MultiLinkedList list = (MultiLinkedList) this.memoryMap.get( hash );
@@ -305,7 +306,7 @@
      * @return
      */
     private final Integer getTupleHash(final WorkingMemory workingMemory,
-                                       final ReteTuple tuple) {
+                                       final Tuple tuple) {
         final Object select = this.declaration.getValue( tuple.get( this.column.getFactIndex() ).getObject() );
         final Integer hash = (select != null) ? new Integer( select.hashCode() ) : new Integer( 0 );
         return hash;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemory.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemory.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -28,11 +28,11 @@
 import org.drools.common.DefaultFactHandle;
 import org.drools.common.InternalFactHandle;
 import org.drools.reteoo.ObjectMatches;
-import org.drools.reteoo.ReteTuple;
 import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
+import org.drools.spi.Tuple;
 import org.drools.util.MultiLinkedList;
 import org.drools.util.MultiLinkedListNodeWrapper;
 
@@ -167,7 +167,7 @@
      * @see org.drools.reteoo.beta.BetaRightMemory#iterator(org.drools.WorkingMemory, org.drools.reteoo.ReteTuple)
      */
     public final Iterator iterator(final WorkingMemory workingMemory,
-                                   final ReteTuple tuple) {
+                                   final Tuple tuple) {
         this.selectPossibleMatches( workingMemory,
                                     tuple );
         Iterator iterator = null;
@@ -232,7 +232,7 @@
      * @see org.drools.reteoo.beta.BetaRightMemory#selectPossibleMatches(org.drools.WorkingMemory, org.drools.reteoo.ReteTuple)
      */
     public final void selectPossibleMatches(final WorkingMemory workingMemory,
-                                            final ReteTuple tuple) {
+                                            final Tuple tuple) {
         final Object select = this.declaration.getValue( tuple.get( this.column.getFactIndex() ).getObject() );
         final Integer hash = (select != null) ? new Integer( select.hashCode() ) : new Integer( 0 );
         this.selectedList = (MultiLinkedList) this.memoryMap.get( hash );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemory.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemory.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -28,6 +28,7 @@
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
+import org.drools.spi.Tuple;
 import org.drools.util.LinkedList;
 import org.drools.util.MultiLinkedList;
 import org.drools.util.MultiLinkedListNode;
@@ -130,7 +131,7 @@
         tuple.setChild( new MultiLinkedListNodeWrapper( tuple.getNode() ) );
 
         final MultiLinkedList list = this.getTupleBucket( workingMemory,
-                                                          (ReteTuple) tuple.getNode() );
+                                                          (Tuple) tuple.getNode() );
 
         // adding the wrapper instead of the node
         list.add( tuple.getChild() );
@@ -280,7 +281,7 @@
      * @return
      */
     private final MultiLinkedList getTupleBucket(final WorkingMemory workingMemory,
-                                                 final ReteTuple tuple) {
+                                                 final Tuple tuple) {
         final Object key = getTupleKey( workingMemory,
                                         tuple );
         MultiLinkedList list = (MultiLinkedList) this.memoryMap.get( key );
@@ -300,7 +301,7 @@
      * @return
      */
     private final Object getTupleKey(final WorkingMemory workingMemory,
-                                     final ReteTuple tuple) {
+                                     final Tuple tuple) {
         final Object select = this.declaration.getValue( tuple.get( this.column.getFactIndex() ).getObject() );
         return select;
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemory.java	2006-09-13 21:34:53 UTC (rev 6215)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemory.java	2006-09-14 02:53:26 UTC (rev 6216)
@@ -24,11 +24,11 @@
 import org.drools.WorkingMemory;
 import org.drools.common.InternalFactHandle;
 import org.drools.reteoo.ObjectMatches;
-import org.drools.reteoo.ReteTuple;
 import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
+import org.drools.spi.Tuple;
 import org.drools.util.MultiLinkedList;
 import org.drools.util.MultiLinkedListNodeWrapper;
 
@@ -195,7 +195,7 @@
      * @see org.drools.reteoo.beta.BetaRightMemory#iterator(org.drools.WorkingMemory, org.drools.reteoo.ReteTuple)
      */
     public final Iterator iterator(final WorkingMemory workingMemory,
-                                   final ReteTuple tuple) {
+                                   final Tuple tuple) {
         this.selectPossibleMatches( workingMemory,
                                     tuple );
         final Iterator iterator = new Iterator() {
@@ -259,7 +259,7 @@
      * @see org.drools.reteoo.beta.BetaRightMemory#selectPossibleMatches(org.drools.WorkingMemory, org.drools.reteoo.ReteTuple)
      */
     public final void selectPossibleMatches(final WorkingMemory workingMemory,
-                                            final ReteTuple tuple) {
+                                            final Tuple tuple) {
         final Object select = this.declaration.getValue( tuple.get( this.column.getFactIndex() ).getObject() );
         final Integer hash = (select != null) ? new Integer( select.hashCode() ) : new Integer( 0 );
         this.noMatchList = (MultiLinkedList) this.memoryMap.get( hash );




More information about the jboss-svn-commits mailing list