[jboss-svn-commits] JBL Code SVN: r9429 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Feb 10 17:12:51 EST 2007
Author: mark.proctor at jboss.com
Date: 2007-02-10 17:12:51 -0500 (Sat, 10 Feb 2007)
New Revision: 9429
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/ObjectSource.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
Log:
-magic
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 2007-02-10 16:49:03 UTC (rev 9428)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java 2007-02-10 22:12:51 UTC (rev 9429)
@@ -27,6 +27,7 @@
import org.drools.common.NodeMemory;
import org.drools.common.PropagationContextImpl;
import org.drools.spi.AlphaNodeFieldConstraint;
+import org.drools.spi.BetaNodeFieldConstraint;
import org.drools.spi.PropagationContext;
import org.drools.util.LinkedList;
import org.drools.util.LinkedListEntry;
@@ -103,21 +104,19 @@
this.leftInput = leftInput;
this.rightInput = rightInput;
this.constraints = constraints;
- }
-
- public AlphaNodeFieldConstraint[] getConstraints() {
-
- // Sanity check
+
if ( this.constraints == null ) {
- return null;
+ throw new RuntimeException( "cannot have null constraints, must atleast be an instanceof EmptyBetaCosntraints" );
}
+ }
+ public BetaNodeFieldConstraint[] getConstraints() {
final LinkedList constraints = this.constraints.getConstraints();
- final AlphaNodeFieldConstraint[] array = new AlphaNodeFieldConstraint[constraints.size()];
+ final BetaNodeFieldConstraint[] array = new BetaNodeFieldConstraint[constraints.size()];
int i = 0;
for ( LinkedListEntry entry = (LinkedListEntry) constraints.getFirst(); entry != null; entry = (LinkedListEntry) entry.getNext() ) {
- array[i++] = (AlphaNodeFieldConstraint) entry.getObject();
+ array[i++] = (BetaNodeFieldConstraint) entry.getObject();
}
return array;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java 2007-02-10 16:49:03 UTC (rev 9428)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java 2007-02-10 22:12:51 UTC (rev 9429)
@@ -48,8 +48,10 @@
protected ObjectSource objectSource;
- private int alphaNodeHashingThreshold;
+ private int alphaNodeHashingThreshold;
+ protected boolean skipOnModify = false;
+
// ------------------------------------------------------------
// Constructors
// ------------------------------------------------------------
@@ -103,6 +105,8 @@
} else {
((CompositeObjectSinkAdapter) this.sink).addObjectSink( objectSink );
}
+
+ this.skipOnModify = canSkipOnModify();
}
/**
@@ -124,7 +128,9 @@
if ( sinkAdapter.size() == 1 ) {
this.sink = new SingleObjectSinkAdapter( sinkAdapter.getSinks()[0] );
}
- }
+ }
+
+ this.skipOnModify = canSkipOnModify();
}
public abstract void updateSink(ObjectSink sink,
@@ -134,4 +140,18 @@
public ObjectSinkPropagator getSinkPropagator() {
return this.sink;
}
+
+ private boolean canSkipOnModify() {
+ // If we have no alpha or beta node with constraints on this ObjectType, we can just skip modifies
+ ObjectSink[] sinks = this.sink.getSinks();
+ boolean hasConstraints = false;
+ for ( int i = 0; i < sinks.length; i++ ) {
+ if ( sinks[i] instanceof AlphaNode ||( sinks[i] instanceof BetaNode && ((BetaNode) sinks[i]).getConstraints().length > 0 ) ) {
+ hasConstraints = true;
+ }
+ }
+
+ // Can only skip if we have no constraints
+ return !hasConstraints;
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2007-02-10 16:49:03 UTC (rev 9428)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2007-02-10 22:12:51 UTC (rev 9429)
@@ -21,6 +21,7 @@
import org.drools.RuleBaseConfiguration;
import org.drools.base.ShadowProxy;
import org.drools.common.BaseNode;
+import org.drools.common.EmptyBetaConstraints;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.common.NodeMemory;
@@ -70,7 +71,7 @@
private final ObjectType objectType;
/** The parent Rete node */
- private final Rete rete;
+ private final Rete rete;
// ------------------------------------------------------------
// Constructors
@@ -92,7 +93,7 @@
super( id, null, alphaNodeHashingThreshold );
this.rete = rete;
this.objectType = objectType;
- setHasMemory( true );
+ setHasMemory( true );
}
// ------------------------------------------------------------
@@ -136,7 +137,7 @@
public void assertObject(final InternalFactHandle handle,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
- final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
+ final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
// checks if shadow is enabled
if ( this.objectType.isShadowEnabled() ) {
@@ -149,9 +150,14 @@
((ShadowProxy) handle.getObject()).updateProxy();
}
}
- // we do not need to check if the fact exists already
+
+ if (context.getType() == PropagationContext.MODIFICATION && this.skipOnModify ) {
+ // we do this after the shadowproxy update, just so that its up to date for the future
+ return;
+ }
+
memory.add( handle,
- false );
+ false );
this.sink.propagateAssertObject( handle,
context,
@@ -172,8 +178,12 @@
public void retractObject(final InternalFactHandle handle,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
+ if (context.getType() == PropagationContext.MODIFICATION && this.skipOnModify ) {
+ return;
+ }
+
final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
- memory.remove( handle );
+ memory.remove( handle );
this.sink.propagateRetractObject( handle,
context,
More information about the jboss-svn-commits
mailing list