[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