[jboss-svn-commits] JBL Code SVN: r19322 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools: util and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Mar 30 00:30:01 EDT 2008
Author: mark.proctor at jboss.com
Date: 2008-03-30 00:30:01 -0400 (Sun, 30 Mar 2008)
New Revision: 19322
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/CollectNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.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/LeftTuple.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTuple.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleIndexHashTable.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleList.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleIndexHashTable.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleList.java
Log:
JBRULES-1520 RightTuple merge for asymmetrical Rete propagations
-Lots of fixes, mostly missing read/write external methods and default constructors.
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 2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java 2008-03-30 04:30:01 UTC (rev 19322)
@@ -447,12 +447,15 @@
final Iterator tupleIter = memory.betaMemory.getLeftTupleMemory().iterator();
for ( LeftTuple leftTuple = (LeftTuple) tupleIter.next(); leftTuple != null; leftTuple = (LeftTuple) tupleIter.next() ) {
- RightTuple rightTuple = leftTuple.getBetaChildren().getRightParent();
- sink.assertLeftTuple( new LeftTuple( leftTuple,
- rightTuple,
- sink ),
- context,
- workingMemory );
+ LeftTuple childLeftTuple = leftTuple.getBetaChildren();
+ if ( childLeftTuple != null ) {
+ RightTuple rightTuple = childLeftTuple.getRightParent();
+ sink.assertLeftTuple( new LeftTuple( leftTuple,
+ rightTuple,
+ sink ),
+ context,
+ workingMemory );
+ }
}
}
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 2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java 2008-03-30 04:30:01 UTC (rev 19322)
@@ -350,12 +350,15 @@
final Iterator tupleIter = memory.betaMemory.getLeftTupleMemory().iterator();
for ( LeftTuple leftTuple = (LeftTuple) tupleIter.next(); leftTuple != null; leftTuple = (LeftTuple) tupleIter.next() ) {
- RightTuple rightTuple = leftTuple.getBetaChildren().getRightParent();
- sink.assertLeftTuple( new LeftTuple( leftTuple,
- rightTuple,
- sink ),
- context,
- workingMemory );
+ LeftTuple childLeftTuple = leftTuple.getBetaChildren();
+ if ( childLeftTuple != null ) {
+ RightTuple rightTuple = childLeftTuple.getRightParent();
+ sink.assertLeftTuple( new LeftTuple( leftTuple,
+ rightTuple,
+ sink ),
+ context,
+ workingMemory );
+ }
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java 2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java 2008-03-30 04:30:01 UTC (rev 19322)
@@ -18,7 +18,8 @@
return instance;
}
- private EmptyLeftTupleSinkAdapter() {
+ public EmptyLeftTupleSinkAdapter() {
+ // constructor needed for serialisation
}
public void propagateAssertLeftTuple(final LeftTuple leftTuple,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java 2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java 2008-03-30 04:30:01 UTC (rev 19322)
@@ -15,6 +15,10 @@
private LeftInputAdapterNode node;
private InternalFactHandle handle;
private PropagationContext context;
+
+ public LIANodePropagation() {
+ // constructor needed for serialisation
+ }
public LIANodePropagation(final LeftInputAdapterNode node,
final InternalFactHandle handle,
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 2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2008-03-30 04:30:01 UTC (rev 19322)
@@ -139,8 +139,7 @@
context,
workingMemory );
} else {
- // @todo
- //workingMemory.addLIANodePropagation( new LIANodePropagation(this, rightTuple, context) );
+ workingMemory.addLIANodePropagation( new LIANodePropagation(this, factHandle, context) );
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java 2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java 2008-03-30 04:30:01 UTC (rev 19322)
@@ -19,45 +19,49 @@
implements
Tuple,
Entry {
- private static final long serialVersionUID = 400L;
+ private static final long serialVersionUID = 400L;
- private int index;
+ private int index;
- private final InternalFactHandle handle;
+ private InternalFactHandle handle;
- private LeftTuple parent;
+ private LeftTuple parent;
- private Activation activation;
+ private Activation activation;
- private long recency;
+ private long recency;
- private int hashCode;
+ private int hashCode;
- private RightTuple blocker;
+ private RightTuple blocker;
- private LeftTuple blockedPrevious;
+ private LeftTuple blockedPrevious;
- private LeftTuple blockedNext;
+ private LeftTuple blockedNext;
// left and right tuples in parent
- private LeftTuple leftParent;
- private LeftTuple leftParentPrevious;
- private LeftTuple leftParentNext;
+ private LeftTuple leftParent;
+ private LeftTuple leftParentPrevious;
+ private LeftTuple leftParentNext;
- private RightTuple rightParent;
- private LeftTuple rightParentPrevious;
- private LeftTuple rightParentNext;
+ private RightTuple rightParent;
+ private LeftTuple rightParentPrevious;
+ private LeftTuple rightParentNext;
// node memory
- private LeftTupleList memory;
- private Entry next;
- private Entry previous;
+ private LeftTupleList memory;
+ private Entry next;
+ private Entry previous;
// children
- private LeftTuple children;
+ private LeftTuple children;
- private final LeftTupleSink sink;
+ private LeftTupleSink sink;
+ public LeftTuple() {
+ // constructor needed for serialisation
+ }
+
// ------------------------------------------------------------
// Constructors
// ------------------------------------------------------------
@@ -435,10 +439,52 @@
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
- // @todo
+ index = in.readInt();
+ handle = (InternalFactHandle) in.readObject();
+ parent = (LeftTuple) in.readObject();
+ activation = (Activation) in.readObject();
+ recency = in.readLong();
+ hashCode = in.readInt();
+ blocker = (RightTuple) in.readObject();
+ blockedPrevious = (LeftTuple) in.readObject();
+ blockedNext = (LeftTuple) in.readObject();
+ leftParent = (LeftTuple) in.readObject();
+ leftParentPrevious = (LeftTuple) in.readObject();
+ leftParentNext = (LeftTuple) in.readObject();
+ rightParent = (RightTuple) in.readObject();
+ rightParentPrevious = (LeftTuple) in.readObject();
+ rightParentNext = (LeftTuple) in.readObject();
+ memory = (LeftTupleList) in.readObject();
+ next = (Entry) in.readObject();
+ previous = (Entry) in.readObject();
+ children = (LeftTuple) in.readObject();
+
+ // @todo should not serialise out part of the rete network
+ sink = (LeftTupleSink) in.readObject();
}
public void writeExternal(ObjectOutput out) throws IOException {
- // @todo
+ out.writeInt( index );
+ out.writeObject( handle );
+ out.writeObject( parent );
+ out.writeObject( activation );
+ out.writeLong( recency );
+ out.writeInt( hashCode );
+ out.writeObject( blocker );
+ out.writeObject( blockedPrevious );
+ out.writeObject( blockedNext );
+ out.writeObject( leftParent );
+ out.writeObject( leftParentPrevious );
+ out.writeObject( leftParentNext );
+ out.writeObject( rightParent );
+ out.writeObject( rightParentPrevious );
+ out.writeObject( rightParentNext );
+ out.writeObject( memory );
+ out.writeObject( next );
+ out.writeObject( previous );
+ out.writeObject( children );
+
+ // @todo should not serialise in part of the rete network
+ out.writeObject( sink );
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTuple.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTuple.java 2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTuple.java 2008-03-30 04:30:01 UTC (rev 19322)
@@ -11,7 +11,7 @@
public class RightTuple
implements
Entry {
- private final InternalFactHandle handle;
+ private InternalFactHandle handle;
private RightTuple handlePrevious;
private RightTuple handleNext;
@@ -28,6 +28,10 @@
private RightTupleSink sink;
private int hashCode;
+
+ public RightTuple() {
+
+ }
public RightTuple(InternalFactHandle handle,
RightTupleSink sink) {
@@ -178,13 +182,29 @@
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
- // TODO Auto-generated method stub
-
+ this.handle = ( InternalFactHandle ) in.readObject();
+ this.handlePrevious = ( RightTuple ) in.readObject();
+ this.handleNext = ( RightTuple ) in.readObject();
+ this.memory = ( RightTupleList ) in.readObject();
+ this.previous = ( RightTuple ) in.readObject();
+ this.next = ( RightTuple ) in.readObject();
+ this.betaChildren = ( LeftTuple) in.readObject();
+ this.blocked = ( LeftTuple) in.readObject();
+ this.sink = ( RightTupleSink ) in.readObject();
+ this.hashCode = in.readInt();
}
public void writeExternal(ObjectOutput out) throws IOException {
- // TODO Auto-generated method stub
-
+ out.writeObject( this.handle );
+ out.writeObject( this.handlePrevious );
+ out.writeObject( this.handleNext );
+ out.writeObject( this.memory );
+ out.writeObject( this.previous );
+ out.writeObject( this.next );
+ out.writeObject( this.betaChildren );
+ out.writeObject( this.blocked );
+ out.writeObject( this.sink );
+ out.writeInt( this.hashCode );
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2008-03-30 04:30:01 UTC (rev 19322)
@@ -124,7 +124,7 @@
subrule = (GroupElement) in.readObject();
tupleSource = (LeftTupleSource) in.readObject();
previousTupleSinkNode = (LeftTupleSinkNode) in.readObject();
- nextTupleSinkNode = (LeftTupleSinkNode) in.readObject();
+ nextTupleSinkNode = (LeftTupleSinkNode) in.readObject();
}
public void writeExternal(ObjectOutput out) throws IOException {
@@ -390,6 +390,12 @@
memory.getTupleMemory().remove( leftTuple );
final Activation activation = leftTuple.getActivation();
+
+ // activation can be null if the LeftTuple previous propagated into a no-loop
+ if ( activation == null ) {
+ return;
+ }
+
if ( activation.getLogicalDependencies() != null && !activation.getLogicalDependencies().isEmpty() ) {
context.addRetractedTuple( this.rule,
activation );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleIndexHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleIndexHashTable.java 2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleIndexHashTable.java 2008-03-30 04:30:01 UTC (rev 19322)
@@ -7,6 +7,8 @@
import org.drools.reteoo.LeftTuple;
import org.drools.reteoo.LeftTupleMemory;
import org.drools.reteoo.RightTuple;
+import org.drools.util.AbstractHashTable.HashTableIterator;
+import org.drools.util.AbstractHashTable.ObjectComparator;
import java.io.ObjectOutput;
import java.io.ObjectInput;
@@ -23,11 +25,15 @@
private int startResult;
- private FieldIndexHashTableFullIterator tupleValueFullIterator;
+ private transient FieldIndexHashTableFullIterator tupleValueFullIterator;
private int factSize;
private Index index;
+
+ public LeftTupleIndexHashTable() {
+ // constructor for serialisation
+ }
public LeftTupleIndexHashTable(final FieldIndex[] index) {
this( 128,
@@ -65,7 +71,21 @@
throw new IllegalArgumentException( "FieldIndexHashTable cannot use an index[] of length great than 3" );
}
}
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal( in );
+ startResult = in.readInt();
+ factSize = in.readInt();
+ index = ( Index ) in.readObject();
+ }
+ public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal( out );
+ out.writeInt( startResult );
+ out.writeInt( factSize );
+ out.writeObject( index );
+ }
+
public Iterator iterator() {
if ( this.tupleValueFullIterator == null ) {
this.tupleValueFullIterator = new FieldIndexHashTableFullIterator( this );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleList.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleList.java 2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleList.java 2008-03-30 04:30:01 UTC (rev 19322)
@@ -24,8 +24,8 @@
public LeftTuple first;
- private final int hashCode;
- private final Index index;
+ private int hashCode;
+ private Index index;
private TupleHashTableIterator iterator;
@@ -38,7 +38,7 @@
}
public LeftTupleList(final Index index,
- final int hashCode) {
+ final int hashCode) {
this.index = index;
this.hashCode = hashCode;
}
@@ -203,11 +203,16 @@
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
- // @todo
-
+ next = (LeftTuple) in.readObject();
+ first = (LeftTuple) in.readObject();
+ hashCode = in.readInt();
+ index = (Index) in.readObject();
}
public void writeExternal(ObjectOutput out) throws IOException {
- // @todo
+ out.writeObject( next );
+ out.writeObject( first );
+ out.writeInt( hashCode );
+ out.writeObject( index );
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleIndexHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleIndexHashTable.java 2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleIndexHashTable.java 2008-03-30 04:30:01 UTC (rev 19322)
@@ -7,6 +7,9 @@
import org.drools.reteoo.RightTuple;
import org.drools.reteoo.RightTupleMemory;
import org.drools.reteoo.LeftTuple;
+import org.drools.util.AbstractHashTable.HashTableIterator;
+import org.drools.util.AbstractHashTable.Index;
+import org.drools.util.AbstractHashTable.ObjectComparator;
import java.io.ObjectInput;
import java.io.IOException;
@@ -26,6 +29,10 @@
private int factSize;
private Index index;
+
+ public RightTupleIndexHashTable() {
+
+ }
public RightTupleIndexHashTable(final FieldIndex[] index) {
this( 128,
@@ -63,7 +70,21 @@
throw new IllegalArgumentException( "FieldIndexHashTable cannot use an index[] of length great than 3" );
}
}
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal( in );
+ startResult = in.readInt();
+ factSize = in.readInt();
+ index = ( Index ) in.readObject();
+ }
+ public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal( out );
+ out.writeInt( startResult );
+ out.writeInt( factSize );
+ out.writeObject( index );
+ }
+
public RightTuple getFirst(LeftTuple leftTuple) {
RightTupleList bucket = get( leftTuple );
if ( bucket != null ) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleList.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleList.java 2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleList.java 2008-03-30 04:30:01 UTC (rev 19322)
@@ -24,8 +24,8 @@
public RightTuple first;
public RightTuple last;
- private final int hashCode;
- private final Index index;
+ private int hashCode;
+ private Index index;
public RightTupleList() {
// this is not an index bucket
@@ -179,12 +179,20 @@
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
- // TODO Auto-generated method stub
-
+ previous = ( RightTuple ) in.readObject();
+ next = ( RightTuple ) in.readObject();
+ first = ( RightTuple ) in.readObject();
+ last = ( RightTuple ) in.readObject();
+ hashCode = in.readInt();
+ index = ( Index ) in.readObject();
}
public void writeExternal(ObjectOutput out) throws IOException {
- // TODO Auto-generated method stub
-
+ out.writeObject( previous );
+ out.writeObject( next );
+ out.writeObject( first );
+ out.writeObject( last );
+ out.writeInt( hashCode );
+ out.writeObject( index );
}
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list