[jboss-svn-commits] JBL Code SVN: r17697 - in labs/jbossrules/branches/righttuple/drools-core/src: main/java/org/drools/common and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jan 10 17:46:29 EST 2008
Author: mark.proctor at jboss.com
Date: 2008-01-10 17:46:28 -0500 (Thu, 10 Jan 2008)
New Revision: 17697
Modified:
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/BetaConstraints.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/MemoryVisitor.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/NotNode.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/RightTuple.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/AbstractCompositeConstraint.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/AbstractCompositeRestriction.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/ContextEntry.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/FactHashTable.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/TupleHashTable.java
labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/TupleIndexHashTable.java
labs/jbossrules/branches/righttuple/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java
Log:
-waltz and manners now run, but waltz is very slow.
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -49,6 +49,13 @@
this.activation = agendaItem;
this.tuple = agendaItem.getTuple();
}
+
+ public void reset() {
+ this.rule = null;
+ this.subrule = null;
+ this.activation = null;
+ this.tuple = null;
+ }
public void insert(final Object object) throws FactException {
insert( object,
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -53,6 +53,14 @@
this.activation = agendaItem;
this.tuple = agendaItem.getTuple();
}
+
+ public void reset() {
+ this.rule = null;
+ this.subrule = null;
+ this.activation = null;
+ this.tuple = null;
+ }
+
public void insert(final Object object) throws FactException {
}
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/BetaConstraints.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/BetaConstraints.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/BetaConstraints.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -31,4 +31,8 @@
public boolean isEmpty();
public BetaMemory createBetaMemory(final RuleBaseConfiguration config);
+
+ public void resetTuple();
+
+ public void resetFactHandle();
}
\ No newline at end of file
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -548,6 +548,7 @@
this.knowledgeHelper.setActivation( activation );
activation.getRule().getConsequence().evaluate( this.knowledgeHelper,
this.workingMemory );
+ this.knowledgeHelper.reset();
} catch ( final Exception e ) {
this.consequenceExceptionHandler.handleException( activation, this.workingMemory, e );
}
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -149,6 +149,18 @@
rightTuple.getHandle() );
}
}
+
+ public void resetTuple() {
+ for ( ContextEntry context = this.contexts; context != null; context = context.getNext() ) {
+ context.resetTuple();
+ }
+ }
+
+ public void resetFactHandle() {
+ for ( ContextEntry context = this.contexts; context != null; context = context.getNext() ) {
+ context.resetFactHandle();
+ }
+ }
/* (non-Javadoc)
* @see org.drools.common.BetaNodeConstraints#isAllowedCachedLeft(java.lang.Object)
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -138,6 +138,16 @@
this.context1.updateFromFactHandle( workingMemory,
rightTuple.getHandle() );
}
+
+ public void resetTuple() {
+ this.context0.resetTuple();
+ this.context1.resetTuple();
+ }
+
+ public void resetFactHandle() {
+ this.context0.resetFactHandle();
+ this.context1.resetFactHandle();
+ }
/* (non-Javadoc)
* @see org.drools.common.BetaNodeConstraints#isAllowedCachedLeft(java.lang.Object)
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -60,6 +60,12 @@
final RightTuple rightTuple) {
}
+ public void resetTuple() {
+ }
+
+ public void resetFactHandle() {
+ }
+
/* (non-Javadoc)
* @see org.drools.common.BetaNodeConstraints#isAllowedCachedLeft(java.lang.Object)
*/
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -130,5 +130,13 @@
final InternalFactHandle handle) {
this.right = handle.getObject();
}
+
+ public void resetTuple() {
+ this.left = null;
+ }
+
+ public void resetFactHandle() {
+ this.right = null;
+ }
}
}
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -123,8 +123,15 @@
public void updateFromFactHandle(final InternalWorkingMemory workingMemory,
final InternalFactHandle handle) {
this.right = handle.getObject();
-
}
+
+ public void resetTuple() {
+ this.left = null;
+ }
+
+ public void resetFactHandle() {
+ this.right = null;
+ }
}
}
\ No newline at end of file
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -199,6 +199,20 @@
this.context3.updateFromFactHandle( workingMemory,
rightTuple.getHandle() );
}
+
+ public void resetTuple() {
+ this.context0.resetTuple();
+ this.context1.resetTuple();
+ this.context2.resetTuple();
+ this.context3.resetTuple();
+ }
+
+ public void resetFactHandle() {
+ this.context0.resetFactHandle();
+ this.context1.resetFactHandle();
+ this.context2.resetFactHandle();
+ this.context3.resetFactHandle();
+ }
/* (non-Javadoc)
* @see org.drools.common.BetaNodeConstraints#isAllowedCachedLeft(java.lang.Object)
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -110,6 +110,14 @@
this.context.updateFromFactHandle( workingMemory,
rightTuple.getHandle() );
}
+
+ public void resetTuple() {
+ this.context.resetTuple();
+ }
+
+ public void resetFactHandle() {
+ this.context.resetFactHandle();
+ }
/* (non-Javadoc)
* @see org.drools.common.BetaNodeConstraints#isAllowedCachedLeft(java.lang.Object)
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -165,6 +165,18 @@
this.context2.updateFromFactHandle( workingMemory,
rightTuple.getHandle() );
}
+
+ public void resetTuple() {
+ this.context0.resetTuple();
+ this.context1.resetTuple();
+ this.context2.resetTuple();
+ }
+
+ public void resetFactHandle() {
+ this.context0.resetFactHandle();
+ this.context1.resetFactHandle();
+ this.context2.resetFactHandle();
+ }
/* (non-Javadoc)
* @see org.drools.common.BetaNodeConstraints#isAllowedCachedLeft(java.lang.Object)
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -141,5 +141,13 @@
// it MUST be a rete tuple
this.right = (LeftTuple) handle.getObject();
}
+
+ public void resetTuple() {
+ this.left = null;
+ }
+
+ public void resetFactHandle() {
+ this.right = null;
+ }
}
}
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -50,14 +50,14 @@
final InternalWorkingMemory workingMemory) {
LeftTuple child = leftTuple.getBetaChildren();
while ( child != null ) {
- //LeftTuple temp = leftTuple.getRightParentNext();
+ LeftTuple temp = child.getLeftParentNext();
//child.unlinkFromParents();
- child.unlinkFromRightParent();
child.getSink().retractTuple( child,
context,
workingMemory );
- child = child.getRightParentNext();
- //child = temp;
+ child.unlinkFromRightParent();
+ //child = child.getLeftParentNext();
+ child = temp;
}
leftTuple.setBetaChildren( null );
}
@@ -67,14 +67,14 @@
final InternalWorkingMemory workingMemory) {
LeftTuple child = rightTuple.getBetaChildren();
while ( child != null ) {
- //LeftTuple temp = child.getRightParentNext();
+ LeftTuple temp = child.getRightParentNext();
//child.unlinkFromParents();
- child.unlinkFromLeftParent();
child.getSink().retractTuple( child,
context,
workingMemory );
- child = child.getRightParentNext();
- //child = temp;
+ child.unlinkFromLeftParent();
+ //child = child.getRightParentNext();
+ child = temp;
}
rightTuple.setBetaChildren( null );
}
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -108,6 +108,8 @@
workingMemory );
}
}
+
+ this.constraints.resetTuple();
}
/**
@@ -151,6 +153,7 @@
workingMemory );
}
}
+ this.constraints.resetFactHandle();
}
/**
@@ -231,6 +234,8 @@
}
}
}
+ this.constraints.updateFromTuple( workingMemory,
+ null );
}
public String toString() {
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -118,34 +118,51 @@
this.sink = sink;
}
- public void unlinkFromParents() {
- if ( this.rightParent != null ) {
- if ( this.rightParentPrevious != null ) {
- this.rightParentPrevious.rightParentNext = this.rightParentNext;
- } else {
- // first one in the chain, so treat differently
- this.rightParent.setBetaChildren( this.rightParentNext );
- }
-
- if ( rightParentNext != null ) {
- rightParentNext.rightParentPrevious = this.rightParentPrevious;
- }
- }
-
- if ( this.leftParent != null ) {
- if ( this.leftParentPrevious != null ) {
- this.leftParentPrevious.leftParentNext = this.leftParentNext;
- } else {
- // first one in the chain, so treat differently
- this.leftParent.setBetaChildren( this.leftParentNext );
- }
-
- if ( leftParentNext != null ) {
- leftParentNext.leftParentPrevious = this.leftParentPrevious;
- }
- }
- }
-
+// public void unlinkFromParents() {
+// LeftTuple previous = (LeftTuple) this.rightParentPrevious;
+// LeftTuple next = (LeftTuple) this.rightParentNext;
+//
+// if ( previous != null && next != null ) {
+// //remove from middle
+// this.rightParentPrevious.rightParentNext = this.rightParentNext;
+// this.rightParentNext.rightParentPrevious = this.rightParentPrevious;
+// } else if ( next != null ) {
+// //remove from first
+// this.rightParent.setBetaChildren( this.rightParentNext );
+// this.rightParentNext.rightParentPrevious = null;
+// } else if ( previous != null ) {
+// //remove from end
+// this.rightParentPrevious.rightParentNext = null;
+// } else if ( this.rightParent != null ){
+// this.rightParent.setBetaChildren( null );
+// }
+//
+// if ( previous != null && next != null ) {
+// //remove from middle
+// this.leftParentPrevious.leftParentNext = this.leftParentNext;
+// this.leftParentNext.leftParentPrevious = this.leftParentPrevious;
+// } else if ( next != null ) {
+// //remove from first
+// this.leftParent.children = this.leftParentNext;
+// this.leftParentNext.leftParentPrevious = null;
+// } else if ( previous != null ) {
+// //remove from end
+// this.leftParentPrevious.leftParentNext = null;
+// } else {
+// this.leftParent.children = null;
+// }
+//
+// this.parent = null;
+//
+// this.leftParent = null;
+// this.leftParentPrevious = null;
+// this.leftParentNext = null;
+//
+// this.rightParent = null;
+// this.rightParentPrevious = null;
+// this.rightParentPrevious = null;
+// }
+//
public void unlinkFromLeftParent() {
LeftTuple previous = (LeftTuple) this.leftParentPrevious;
LeftTuple next = (LeftTuple) this.leftParentNext;
@@ -163,10 +180,22 @@
this.leftParentPrevious.leftParentNext = null;
} else {
this.leftParent.children = null;
- }
- }
+ }
+
+ //this.parent = null;
+
+ this.leftParent = null;
+ this.leftParentPrevious = null;
+ this.leftParentNext = null;
+
+ this.blocker = null;
+
+ this.rightParent = null;
+ this.rightParentPrevious = null;
+ this.rightParentNext = null;
+ }
- public void unlinkFromRightParent() {
+ public void unlinkFromRightParent() {
LeftTuple previous = (LeftTuple) this.rightParentPrevious;
LeftTuple next = (LeftTuple) this.rightParentNext;
@@ -183,8 +212,21 @@
this.rightParentPrevious.rightParentNext = null;
} else if ( this.rightParent != null ){
this.rightParent.setBetaChildren( null );
- }
+ }
+
+ //this.parent = null;
+
+ this.leftParent = null;
+ this.leftParentPrevious = null;
+ this.leftParentNext = null;
+
+ this.blocker = null;
+
+ this.rightParent = null;
+ this.rightParentPrevious = null;
+ this.rightParentNext = null;
}
+
public LeftTupleSink getSink() {
return sink;
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/MemoryVisitor.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/MemoryVisitor.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/MemoryVisitor.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -11,7 +11,8 @@
import org.drools.util.FactHandleIndexHashTable;
import org.drools.util.FactHashTable;
import org.drools.util.ReflectiveVisitor;
-import org.drools.util.FactHandleIndexHashTable.FieldIndexEntry;
+import org.drools.util.TupleHashTable;
+import org.drools.util.TupleIndexHashTable;
public class MemoryVisitor extends ReflectiveVisitor {
private InternalWorkingMemory workingMemory;
@@ -153,7 +154,7 @@
this.indent--;
}
- public void visitTerminalNode(final RuleTerminalNode node) {
+ public void visitRuleTerminalNode(final RuleTerminalNode node) {
System.out.println( indent() + node );
final TerminalNodeMemory memory = (TerminalNodeMemory) this.workingMemory.getNodeMemory( node );
checkTupleMemory( memory.getTupleMemory() );
@@ -176,25 +177,27 @@
private void checkObjectHashTable(final RightTupleMemory memory) {
if ( memory instanceof FactHashTable ) {
- checkFactHashTable( (FactHashTable) memory );
+ checkRightTupleList( (FactHashTable) memory );
} else if ( memory instanceof FactHandleIndexHashTable ) {
- checkFieldIndexHashTable( (FactHandleIndexHashTable) memory );
+ checkRightTupleIndexHashTable( (FactHandleIndexHashTable) memory );
} else {
throw new RuntimeException( memory.getClass() + " should not be here" );
}
}
- private void checkFactHashTable(final FactHashTable memory) {
- final Entry[] entries = memory.getTable();
+ private void checkRightTupleList(final FactHashTable memory) {
+ RightTuple rightTuple = memory.getFirst( null );
int count = 0;
- for ( int i = 0, length = entries.length; i < length; i++ ) {
- if ( entries[i] != null ) {
- Entry entry = entries[i];
- while ( entry != null ) {
- count++;
- entry = entry.getNext();
- }
+ while ( rightTuple != null ) {
+ count++;
+ if ( rightTuple.getBetaChildren() != null ) {
+ System.out.println( indent() + "error : RightTuple has beta children " + rightTuple );
}
+
+ if ( rightTuple.getBlocked() != null) {
+ System.out.println( indent() + "error : RightTuple is blocking a tuple " + rightTuple );
+ }
+ rightTuple = ( RightTuple ) rightTuple.getNext();
}
System.out.println( indent() + "FactHashTable: " + memory.size() + ":" + count );
@@ -203,24 +206,31 @@
}
}
- private void checkFieldIndexHashTable(final FactHandleIndexHashTable memory) {
+ private void checkRightTupleIndexHashTable(final FactHandleIndexHashTable memory) {
final Entry[] entries = memory.getTable();
int factCount = 0;
int bucketCount = 0;
for ( int i = 0, length = entries.length; i < length; i++ ) {
if ( entries[i] != null ) {
- FieldIndexEntry fieldIndexEntry = (FieldIndexEntry) entries[i];
- while ( fieldIndexEntry != null ) {
- if ( fieldIndexEntry.getFirst() != null ) {
- Entry entry = fieldIndexEntry.getFirst();
- while ( entry != null ) {
- entry = entry.getNext();
+ FactHashTable alphaList = (FactHashTable) entries[i];
+ while ( alphaList != null ) {
+ if ( alphaList.getFirst(null) != null ) {
+ RightTuple rightTuple = alphaList.getFirst(null);
+ while ( rightTuple != null ) {
+ if ( rightTuple.getBetaChildren() != null ) {
+ System.out.println( indent() + "error : RightTuple has beta children " + rightTuple );
+ }
+
+ if ( rightTuple.getBlocked() != null) {
+ System.out.println( indent() + "error : RightTuple is blocking a tuple " + rightTuple );
+ }
+ rightTuple = (RightTuple) rightTuple.getNext();
factCount++;
}
} else {
- System.out.println( "error : fieldIndexHashTable cannot have empty FieldIndexEntry objects" );
+ System.out.println( "error : RightTupleIndexHashTable cannot have empty RightTupleList objects" );
}
- fieldIndexEntry = (FieldIndexEntry) fieldIndexEntry.getNext();
+ alphaList = (FactHashTable) alphaList.getNext();
bucketCount++;
}
}
@@ -229,7 +239,7 @@
try {
final Field field = AbstractHashTable.class.getDeclaredField( "size" );
field.setAccessible( true );
- System.out.println( indent() + "FieldIndexBuckets: " + ((Integer) field.get( memory )).intValue() + ":" + bucketCount );
+ System.out.println( indent() + "RightTupleBuckets: " + ((Integer) field.get( memory )).intValue() + ":" + bucketCount );
if ( ((Integer) field.get( memory )).intValue() != bucketCount ) {
System.out.println( indent() + "error" );
}
@@ -237,29 +247,74 @@
e.printStackTrace();
}
- System.out.println( indent() + "FieldIndexFacts: " + memory.size() + ":" + factCount );
+ System.out.println( indent() + "RightTupleFacts: " + memory.size() + ":" + factCount );
if ( memory.size() != factCount ) {
System.out.println( indent() + "error" );
}
}
private void checkTupleMemory(final LeftTupleMemory memory) {
+ if ( memory instanceof TupleHashTable ) {
+ checkLeftTupleList( (TupleHashTable) memory );
+ } else if ( memory instanceof TupleIndexHashTable ) {
+ checkLeftTupleIndexedHashTable( (TupleIndexHashTable) memory );
+ } else {
+ throw new RuntimeException( memory.getClass() + " should not be here" );
+ }
+ }
+
+ private void checkLeftTupleList(final TupleHashTable memory){
+ Entry entry = memory.getFirst( null );
+ int count = 0;
+ while ( entry != null ) {
+ count++;
+ entry = entry.getNext();
+ }
+
+ System.out.println( indent() + "TupleHashTable: " + memory.size() + ":" + count );
+ if ( memory.size() != count ) {
+ System.out.println( indent() + "error" );
+ }
+ }
+
+ private void checkLeftTupleIndexedHashTable(final TupleIndexHashTable memory) {
final Entry[] entries = memory.getTable();
- int count = 0;
+ int factCount = 0;
+ int bucketCount = 0;
for ( int i = 0, length = entries.length; i < length; i++ ) {
if ( entries[i] != null ) {
- Entry entry = entries[i];
- while ( entry != null ) {
- count++;
- entry = entry.getNext();
+ TupleHashTable leftList = (TupleHashTable) entries[i];
+ while ( leftList != null ) {
+ if ( leftList.getFirst(null) != null ) {
+ Entry entry = leftList.getFirst(null);
+ while ( entry != null ) {
+ entry = entry.getNext();
+ factCount++;
+ }
+ } else {
+ System.out.println( "error : LeftIndexHashTable cannot have empty TupleHashTable objects" );
+ }
+ leftList = (TupleHashTable) leftList.getNext();
+ bucketCount++;
}
}
}
- System.out.println( indent() + "TupleMemory: " + memory.size() + ":" + count );
- if ( memory.size() != count ) {
+ try {
+ final Field field = AbstractHashTable.class.getDeclaredField( "size" );
+ field.setAccessible( true );
+ System.out.println( indent() + "LeftIndexBuckets: " + ((Integer) field.get( memory )).intValue() + ":" + bucketCount );
+ if ( ((Integer) field.get( memory )).intValue() != bucketCount ) {
+ System.out.println( indent() + "error" );
+ }
+ } catch ( final Exception e ) {
+ e.printStackTrace();
+ }
+
+ System.out.println( indent() + "LeftIndexFacts: " + memory.size() + ":" + factCount );
+ if ( memory.size() != factCount ) {
System.out.println( indent() + "error" );
- }
+ }
}
private String indent() {
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/NotNode.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/NotNode.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/NotNode.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -106,6 +106,8 @@
break;
}
}
+
+ this.constraints.resetTuple();
if ( leftTuple.getBlocker() == null ) {
// only add it to node memory if still need Objects to attempt to match
@@ -149,7 +151,6 @@
// we know that only unblocked LeftTuples are still in the memory
if ( this.constraints.isAllowedCachedRight( leftTuple ) ) {
leftTuple.setBlocker( rightTuple );
- leftTuple.setBlocker( rightTuple );
LeftTuple blockedPrevious = rightTuple.getBlocked();
if ( blockedPrevious != null ) {
@@ -169,6 +170,8 @@
}
}
}
+
+ this.constraints.resetFactHandle();
}
/**
@@ -263,17 +266,17 @@
LeftTuple next = (LeftTuple) leftTuple.getBlockedNext();
if ( previous != null && next != null ) {
//remove from middle
- previous.setNext( next );
- next.setPrevious( previous );
+ previous.setBlockedNext( next );
+ next.setBlockedPrevious( previous );
} else if ( next != null ) {
//remove from first
- leftTuple.getBlocker().setBlocked( next );
- next.setPrevious( null );
+ blocker.setBlocked( next );
+ next.setBlockedPrevious( null );
} else if ( previous != null ) {
//remove from end
- previous.setNext( null );
+ previous.setBlockedNext( null );
} else {
- leftTuple.getBlocker().setBlocked( null );
+ blocker.setBlocked( null );
}
}
}
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/RightTuple.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/RightTuple.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/RightTuple.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -8,7 +8,7 @@
Entry {
private final InternalFactHandle handle;
- private final RightTuple parent;
+ private RightTuple parent;
private RightTuple parentPrevious;
private RightTuple parentNext;
@@ -29,14 +29,14 @@
this.hashCode = this.handle.hashCode();
this.parent = null;
}
-
+
public RightTuple(InternalFactHandle handle,
RightTupleSink sink) {
this.handle = handle;
this.hashCode = this.handle.hashCode();
this.parent = null;
this.sink = sink;
- }
+ }
public RightTuple(RightTuple parent) {
this.handle = parent.getHandle();
@@ -44,7 +44,7 @@
this.parent = parent;
this.parentNext = parent.getAlphaChildren();
- if (parentNext != null ) {
+ if ( parentNext != null ) {
this.parentNext.parentPrevious = this;
}
parent.setAlphaChildren( this );
@@ -57,14 +57,13 @@
this.parent = parent;
this.parentNext = parent.getAlphaChildren();
- if (parentNext != null ) {
+ if ( parentNext != null ) {
this.parentNext.parentPrevious = this;
}
parent.setAlphaChildren( this );
-
+
this.sink = sink;
-
}
public RightTupleSink getRightTupleSink() {
@@ -72,18 +71,23 @@
}
public void unlinkFromRightParent() {
- if ( this.parent != null ) {
+ if ( this.parent != null ) {
if ( this.parentPrevious != null ) {
- this.parentPrevious.parentNext = this.parentNext;
+ this.parentPrevious.parentNext = this.parentNext;
} else {
// first one in the chain, so treat differently
- this.parent.setAlphaChildren( this.parentNext );
+ this.parent.setAlphaChildren( this.parentNext );
}
-
- if ( this.parentNext != null ) {
+
+ if ( this.parentNext != null ) {
this.parentNext.parentPrevious = this.parentPrevious;
}
}
+
+ this.parent = null;
+ this.parentPrevious = null;
+ this.parentNext = null;
+ this.blocked = null;
}
public InternalFactHandle getHandle() {
@@ -100,15 +104,15 @@
public void setParentPrevious(RightTuple parentPrevious) {
this.parentPrevious = parentPrevious;
- }
+ }
public RightTuple getParentNext() {
return parentNext;
}
-
+
public void setParentNext(RightTuple parentNext) {
this.parentNext = parentNext;
- }
+ }
public LeftTuple getBlocked() {
return blocked;
@@ -161,10 +165,10 @@
public int hashCode() {
return this.hashCode;
}
-
+
public String toString() {
return this.handle.toString() + "\n";
- }
+ }
public boolean equals(RightTuple other) {
// we know the object is never null and always of the type ReteTuple
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -31,20 +31,37 @@
context,
workingMemory );
}
+
+// public void propagateNotRetractLeftTuple(final LeftTuple leftTuple,
+// final PropagationContext context,
+// final InternalWorkingMemory workingMemory) {
+// LeftTuple child = leftTuple.getBetaChildren();
+// while ( child != null ) {
+// //LeftTuple temp = leftTuple.getRightParentNext();
+// //child.unlinkFromParents();
+// //child.unlinkFromLeftParent();
+// child.getSink().retractTuple( child,
+// context,
+// workingMemory );
+// child = child.getLeftParentNext();
+// //child = temp;
+// }
+// leftTuple.setBetaChildren( null );
+// }
public void propagateRetractLeftTuple(final LeftTuple leftTuple,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
LeftTuple child = leftTuple.getBetaChildren();
while ( child != null ) {
- //LeftTuple temp = leftTuple.getRightParentNext();
+ LeftTuple temp = child.getLeftParentNext();
//child.unlinkFromParents();
- child.unlinkFromRightParent();
child.getSink().retractTuple( child,
context,
workingMemory );
- child = child.getRightParentNext();
- //child = temp;
+ child.unlinkFromRightParent();
+ //child = child.getLeftParentNext();
+ child = temp;
}
leftTuple.setBetaChildren( null );
}
@@ -54,14 +71,14 @@
final InternalWorkingMemory workingMemory) {
LeftTuple child = rightTuple.getBetaChildren();
while ( child != null ) {
- //LeftTuple temp = child.getRightParentNext();
+ LeftTuple temp = child.getRightParentNext();
//child.unlinkFromParents();
- child.unlinkFromLeftParent();
child.getSink().retractTuple( child,
context,
workingMemory );
- child = child.getRightParentNext();
- //child = temp;
+ child.unlinkFromLeftParent();
+ //child = child.getRightParentNext();
+ child = temp;
}
rightTuple.setBetaChildren( null );
}
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/AbstractCompositeConstraint.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/AbstractCompositeConstraint.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/AbstractCompositeConstraint.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -228,6 +228,18 @@
tuple );
}
}
+
+ public void resetTuple() {
+ for ( int i = 0, length = this.contexts.length; i < length; i++ ) {
+ this.contexts[i].resetTuple();
+ }
+ }
+
+ public void resetFactHandle() {
+ for ( int i = 0, length = this.contexts.length; i < length; i++ ) {
+ this.contexts[i].resetFactHandle();
+ }
+ }
}
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/AbstractCompositeRestriction.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/AbstractCompositeRestriction.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/AbstractCompositeRestriction.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -127,6 +127,18 @@
tuple );
}
}
+
+ public void resetTuple() {
+ for ( int i = 0, length = this.contextEntries.length; i < length; i++ ) {
+ this.contextEntries[i].resetTuple();
+ }
+ }
+
+ public void resetFactHandle() {
+ for ( int i = 0, length = this.contextEntries.length; i < length; i++ ) {
+ this.contextEntries[i].resetFactHandle();
+ }
+ }
}
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/ContextEntry.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/ContextEntry.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/ContextEntry.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -19,5 +19,9 @@
public void updateFromFactHandle(InternalWorkingMemory workingMemory,
InternalFactHandle handle);
+
+ public void resetTuple();
+
+ public void resetFactHandle();
}
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -165,6 +165,13 @@
final LeftTuple tuple) {
// nothing to do
}
+
+ public void resetTuple() {
+ }
+
+ public void resetFactHandle() {
+ this.object = null;
+ }
}
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -315,6 +315,14 @@
this.workingMemory = workingMemory;
this.leftTuple = tuple;
}
+
+ public void resetTuple() {
+ this.leftTuple = null;
+ }
+
+ public void resetFactHandle() {
+ this.rightObject = null;
+ }
}
}
\ No newline at end of file
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -358,6 +358,14 @@
public InternalWorkingMemory getWorkingMemory() {
return this.workingMemory;
}
+
+ public void resetTuple() {
+ this.leftTuple = null;
+ }
+
+ public void resetFactHandle() {
+ this.handle = null;
+ }
}
}
\ No newline at end of file
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -212,6 +212,14 @@
public boolean isRightNull() {
return this.rightNull;
}
+
+ public void resetTuple() {
+ this.reteTuple = null;
+ }
+
+ public void resetFactHandle() {
+ this.object = null;
+ }
}
public static class ObjectVariableContextEntry extends VariableContextEntry {
@@ -247,6 +255,17 @@
this.right = this.extractor.getValue( workingMemory,
evaluator.prepareObject( handle ) );
}
+
+ public void resetTuple() {
+ this.reteTuple = null;
+ this.left = null;
+ this.reteTuple = null;
+ }
+
+ public void resetFactHandle() {
+ this.right = null;
+ this.object = null;
+ }
}
public static class LongVariableContextEntry extends VariableContextEntry {
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -43,6 +43,9 @@
public void setActivation(final Activation agendaItem);
+ public void reset();
+
+
/**
* Asserts an object, notice that it does not return the FactHandle
*
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -18,8 +18,6 @@
private int startResult;
- private FieldIndexHashTableIterator tupleValueIterator;
-
private int factSize;
private Index index;
@@ -277,6 +275,21 @@
public int size() {
return this.factSize;
}
+
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ for ( Entry entry : this.table) {
+ while ( entry != null ) {
+ FactHashTable bucket = ( FactHashTable ) entry;
+ for ( RightTuple rightTuple = bucket.getFirst( null ); rightTuple != null; rightTuple = ( RightTuple ) rightTuple.getNext() ) {
+ builder.append( rightTuple );
+ }
+ entry = entry.getNext();
+ }
+ }
+
+ return builder.toString();
+ }
// public static class FactHashTable
// implements
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/FactHashTable.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/FactHashTable.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/FactHashTable.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -143,10 +143,6 @@
return this.hashCode == other.hashCode && this.index == other.index;
}
- public String toString() {
- return "FieldIndexEntry( hashCode=" + this.hashCode + " first=" + this.first + " )";
- }
-
public Entry getPrevious() {
return null;
// return this.previous;
@@ -167,4 +163,13 @@
public boolean isIndexed() {
return ( this.index != null );
}
+
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ for ( RightTuple rightTuple = ( RightTuple ) this.first; rightTuple != null; rightTuple = ( RightTuple ) rightTuple.getNext() ) {
+ builder.append( rightTuple );
+ }
+
+ return builder.toString();
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/TupleHashTable.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/TupleHashTable.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/TupleHashTable.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -72,6 +72,9 @@
} else {
this.first = null;
}
+
+ leftTuple.setPrevious( null );
+ leftTuple.setNext( null );
this.size--;
}
@@ -183,4 +186,14 @@
public void setPrevious(Entry previous) {
// this.previous = previous;
}
+
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ Iterator it = iterator();
+ for ( LeftTuple leftTuple = ( LeftTuple ) it.next(); leftTuple != null; leftTuple = ( LeftTuple ) it.next() ) {
+ builder.append( leftTuple + "\n" );
+ }
+
+ return builder.toString();
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/TupleIndexHashTable.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/TupleIndexHashTable.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/main/java/org/drools/util/TupleIndexHashTable.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -168,13 +168,17 @@
}
public void remove(final LeftTuple leftTuple) {
- LeftTuple previousRightTuple = (LeftTuple) leftTuple.getPrevious();
- if ( previousRightTuple != null && leftTuple.getNext() != null ) {
+ LeftTuple previousLeftTuple = (LeftTuple) leftTuple.getPrevious();
+ LeftTuple nextLeftTuple = (LeftTuple) leftTuple.getNext();
+ if ( previousLeftTuple != null && nextLeftTuple != null ) {
// Optimisation for tuple self removal if it's not the first in the chain
// we can't do this if it's the only remain tuple, as we need to also remove the parent bucket.
- previousRightTuple.setNext( leftTuple.getNext() );
- leftTuple.getNext().setPrevious( previousRightTuple );
+ previousLeftTuple.setNext( nextLeftTuple );
+ nextLeftTuple.setPrevious( previousLeftTuple );
this.size--;
+ leftTuple.setPrevious( null );
+ leftTuple.setNext( null );
+ return;
}
final int hashCode = this.index.hashCodeOf( leftTuple );
@@ -206,6 +210,9 @@
previous = current;
current = next;
}
+
+ leftTuple.setPrevious( null );
+ leftTuple.setNext( null );
}
public boolean contains(final LeftTuple tuple) {
@@ -284,6 +291,16 @@
public int size() {
return this.factSize;
}
+
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ Iterator it = iterator();
+ for ( LeftTuple leftTuple = ( LeftTuple ) it.next(); leftTuple != null; leftTuple = ( LeftTuple ) it.next() ) {
+ builder.append( leftTuple + "\n" );
+ }
+
+ return builder.toString();
+ }
// public static class TupleHashTable
// implements
Modified: labs/jbossrules/branches/righttuple/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java
===================================================================
--- labs/jbossrules/branches/righttuple/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java 2008-01-10 22:30:37 UTC (rev 17696)
+++ labs/jbossrules/branches/righttuple/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java 2008-01-10 22:46:28 UTC (rev 17697)
@@ -23,8 +23,10 @@
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
+import org.drools.common.InternalWorkingMemory;
import org.drools.event.AfterActivationFiredEvent;
import org.drools.event.DefaultAgendaEventListener;
+import org.drools.reteoo.MemoryVisitor;
public class ReteooMannersTest extends BaseMannersTest {
@@ -65,7 +67,7 @@
};
//workingMemory.addEventListener(listener );
- final InputStream is = getClass().getResourceAsStream( "/manners32.dat" );
+ final InputStream is = getClass().getResourceAsStream( "/manners64.dat" );
final List list = getInputObjects( is );
for ( final Iterator it = list.iterator(); it.hasNext(); ) {
final Object object = it.next();
@@ -77,6 +79,9 @@
final long start = System.currentTimeMillis();
workingMemory.fireAllRules();
System.err.println( System.currentTimeMillis() - start );
+
+ MemoryVisitor visitor = new MemoryVisitor( (InternalWorkingMemory) workingMemory);
+ visitor.visit( ruleBase );
//System.out.println( listener );
More information about the jboss-svn-commits
mailing list