[jboss-svn-commits] JBL Code SVN: r18903 - labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Mar 12 18:11:21 EDT 2008
Author: tirelli
Date: 2008-03-12 18:11:21 -0400 (Wed, 12 Mar 2008)
New Revision: 18903
Modified:
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
Log:
Fixing OTN opt
Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2008-03-12 21:22:07 UTC (rev 18902)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2008-03-12 22:11:21 UTC (rev 18903)
@@ -193,6 +193,7 @@
context,
workingMemory );
}
+ this.skipOnModify = canSkipOnModify( this.sink.getSinks() );
}
/**
@@ -282,7 +283,6 @@
*/
protected void addObjectSink(final ObjectSink objectSink) {
super.addObjectSink( objectSink );
- this.skipOnModify = canSkipOnModify( this.sink.getSinks() );
}
/**
@@ -290,7 +290,6 @@
*/
protected void removeObjectSink(final ObjectSink objectSink) {
super.removeObjectSink( objectSink );
- this.skipOnModify = canSkipOnModify( this.sink.getSinks() );
}
/**
@@ -301,28 +300,23 @@
* @return
*/
private boolean canSkipOnModify(final Sink[] sinks) {
- // this mechanism is broken, so I'm disabling it for now
- return false;
-
// If we have no alpha or beta node with constraints on this ObjectType, we can just skip modifies
-// boolean hasConstraints = false;
-// for ( int i = 0; i < sinks.length && !hasConstraints; i++ ) {
-// if ( sinks[i] instanceof AlphaNode ) {
-// hasConstraints = this.usesDeclaration( ((AlphaNode) sinks[i]).getConstraint() );
-// } else if ( sinks[i] instanceof BetaNode && ((BetaNode) sinks[i]).getConstraints().length > 0 ) {
-// hasConstraints = this.usesDeclaration( ((BetaNode) sinks[i]).getConstraints() );
-// }
-// if ( !hasConstraints && sinks[i] instanceof ObjectSource ) {
-// hasConstraints = !this.canSkipOnModify( ((ObjectSource) sinks[i]).getSinkPropagator().getSinks() );
-// } else if ( sinks[i] instanceof TupleSource ) {
-// hasConstraints = !this.canSkipOnModify( ((TupleSource) sinks[i]).getSinkPropagator().getSinks() );
-// }
-// }
-//
-// // Can only skip if we have no constraints
-// return !hasConstraints;
-
-
+ boolean hasConstraints = false;
+ for ( int i = 0; i < sinks.length && !hasConstraints; i++ ) {
+ if ( sinks[i] instanceof AlphaNode || sinks[i] instanceof AccumulateNode || sinks[i] instanceof CollectNode || sinks[i] instanceof FromNode ) {
+ hasConstraints = true;
+ } else if ( sinks[i] instanceof BetaNode && ((BetaNode) sinks[i]).getConstraints().length > 0 ) {
+ hasConstraints = this.usesDeclaration( ((BetaNode) sinks[i]).getConstraints() );
+ }
+ if ( !hasConstraints && sinks[i] instanceof ObjectSource ) {
+ hasConstraints = !this.canSkipOnModify( ((ObjectSource) sinks[i]).getSinkPropagator().getSinks() );
+ } else if ( !hasConstraints && sinks[i] instanceof TupleSource ) {
+ hasConstraints = !this.canSkipOnModify( ((TupleSource) sinks[i]).getSinkPropagator().getSinks() );
+ }
+ }
+
+ // Can only skip if we have no constraints
+ return !hasConstraints;
}
private boolean usesDeclaration(final Constraint[] constraints) {
@@ -337,7 +331,7 @@
boolean usesDecl = false;
final Declaration[] declarations = constraint.getRequiredDeclarations();
for ( int j = 0; !usesDecl && j < declarations.length; j++ ) {
- usesDecl = (declarations[j].getPattern().getObjectType() == this.objectType);
+ usesDecl = (declarations[j].getPattern().getObjectType().equals( this.objectType ) );
}
return usesDecl;
}
More information about the jboss-svn-commits
mailing list