[jboss-svn-commits] JBL Code SVN: r19416 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo: builder and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Apr 4 09:12:45 EDT 2008


Author: mingjin
Date: 2008-04-04 09:12:45 -0400 (Fri, 04 Apr 2008)
New Revision: 19416

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.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/EmptyObjectSinkAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java
Log:
JBRULES-1095 Rete build performance optimization
- BuildUtils: calling getMatchingNode instead of getSinks
- CompositeLeftTupleSinkAdapter: implemented getMatchingNode
- CompositeObjectSinkAdapter: implemented getMatchingNode and optimized getSinks.
- EmptyLeftTupleSinkAdapter: implemented getMatchingNode.
- EmptyObjectSinkAdapter: implemented getMatchingNode.
- LeftTupleSinkProagator: added getMatchingNode.
- ObjectSinkPropagator: added getMatchingNode
- SingleLeftTupleSinkAdapter: implemented getMatchingNode
- SingleObjectSinkAdapter: implemented getMatchingNode

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java	2008-04-04 13:11:42 UTC (rev 19415)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java	2008-04-04 13:12:45 UTC (rev 19416)
@@ -6,6 +6,7 @@
 
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.common.BaseNode;
 import org.drools.spi.PropagationContext;
 
 public class CompositeLeftTupleSinkAdapter
@@ -53,7 +54,7 @@
                                   workingMemory );
         }
     }
-    
+
     public void createAndPropagateAssertLeftTuple(final InternalFactHandle factHandle,
                                                   final PropagationContext context,
                                                   final InternalWorkingMemory workingMemory,
@@ -66,8 +67,8 @@
                                   workingMemory );
         }
     }
-    
 
+
     public void propagateRetractLeftTuple(final LeftTuple leftTuple,
                                           final PropagationContext context,
                                           final InternalWorkingMemory workingMemory) {
@@ -114,6 +115,15 @@
         }
     }
 
+    public BaseNode getMatchingNode(BaseNode candidate) {
+        for ( LeftTupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextLeftTupleSinkNode() ) {
+            if (candidate.equals(sink)) {
+                return (BaseNode)sink;
+            }
+        }
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
     public LeftTupleSink[] getSinks() {
         final LeftTupleSink[] sinkArray = new LeftTupleSink[this.sinks.size()];
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2008-04-04 13:11:42 UTC (rev 19415)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2008-04-04 13:12:45 UTC (rev 19416)
@@ -11,6 +11,7 @@
 import org.drools.base.evaluators.Operator;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.common.BaseNode;
 import org.drools.rule.LiteralConstraint;
 import org.drools.spi.AlphaNodeFieldConstraint;
 import org.drools.spi.Evaluator;
@@ -343,38 +344,64 @@
 
     }
 
+    public BaseNode getMatchingNode(BaseNode candidate) {
+        if ( this.otherSinks != null ) {
+            for ( ObjectTupleSinkNode sink = this.otherSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
+                if (candidate.equals( sink )) {
+                    return (BaseNode)sink;
+                }
+            }
+        }
+
+        if ( this.hashableSinks != null ) {
+            for ( ObjectTupleSinkNode sink = this.hashableSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
+                if (candidate.equals( sink )) {
+                    return (BaseNode)sink;
+                }
+            }
+        }
+
+        if ( this.hashedSinkMap != null ) {
+            final Iterator it = this.hashedSinkMap.newIterator();
+            for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) {
+                final ObjectSink sink = (ObjectSink) entry.getValue();
+                if (candidate.equals( sink )) {
+                    return (BaseNode)sink;
+                }
+            }
+        }
+        return null;
+    }
+
     public ObjectSink[] getSinks() {
-        final List list = new ArrayList();
+        ObjectSink[]    sinks   = new ObjectSink[size()];
+        int             at      = 0;
 
         if ( this.otherSinks != null ) {
             for ( ObjectTupleSinkNode sink = this.otherSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
-                list.add( sink );
+                sinks[at++] = sink;
             }
         }
 
         if ( this.hashableSinks != null ) {
             for ( ObjectTupleSinkNode sink = this.hashableSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
-                list.add( sink );
+                sinks[at++] = sink;
             }
         }
 
         if ( this.hashedSinkMap != null ) {
             final Iterator it = this.hashedSinkMap.newIterator();
             for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) {
-                final ObjectSink sink = (ObjectSink) entry.getValue();
-                list.add( sink );
+                sinks[at++] = (ObjectSink) entry.getValue();
             }
         }
-
-        return (ObjectSink[]) list.toArray( new ObjectSink[list.size()] );
+        return sinks;
     }
 
     public int size() {
-        int size = 0;
-        size += ((this.otherSinks != null) ? this.otherSinks.size() : 0);
-        size += ((this.hashableSinks != null) ? this.hashableSinks.size() : 0);
-        size += ((this.hashedSinkMap != null) ? this.hashedSinkMap.size() : 0);
-        return size;
+        return (this.otherSinks != null ? this.otherSinks.size() : 0) +
+               (this.hashableSinks != null ? this.hashableSinks.size() : 0)+
+               (this.hashedSinkMap != null ? this.hashedSinkMap.size() : 0);
     }
 
     public static class HashKey

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-04-04 13:11:42 UTC (rev 19415)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java	2008-04-04 13:12:45 UTC (rev 19416)
@@ -2,6 +2,7 @@
 
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.common.BaseNode;
 import org.drools.spi.PropagationContext;
 
 import java.io.ObjectOutput;
@@ -39,8 +40,8 @@
                                                   final PropagationContext context,
                                                   final InternalWorkingMemory workingMemory,
                                                   final boolean leftTupleMemoryEnabled) {
-    }    
-    
+    }
+
     public void propagateRetractLeftTuple(final LeftTuple tuple,
                                           final PropagationContext context,
                                           final InternalWorkingMemory workingMemory) {
@@ -50,11 +51,15 @@
                                            PropagationContext context,
                                            InternalWorkingMemory workingMemory) {
     }
-    
+
+    public BaseNode getMatchingNode(BaseNode candidate) {
+        return null;
+    }
+
     public void propagateRetractLeftTupleDestroyRightTuple(LeftTuple tuple,
                                                            PropagationContext context,
                                                            InternalWorkingMemory workingMemory) {
-    }    
+    }
 
     public void readExternal(ObjectInput in) throws IOException,
                                             ClassNotFoundException {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java	2008-04-04 13:11:42 UTC (rev 19415)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java	2008-04-04 13:12:45 UTC (rev 19416)
@@ -2,6 +2,7 @@
 
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.common.BaseNode;
 import org.drools.spi.PropagationContext;
 
 import java.io.ObjectOutput;
@@ -44,6 +45,10 @@
                                        final boolean useHash) {
     }
 
+    public BaseNode getMatchingNode(BaseNode candidate) {
+        return null;
+    }
+
     public ObjectSink[] getSinks() {
         return SINK_LIST;
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java	2008-04-04 13:11:42 UTC (rev 19415)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java	2008-04-04 13:12:45 UTC (rev 19416)
@@ -4,6 +4,7 @@
 
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.common.BaseNode;
 import org.drools.spi.PropagationContext;
 
 public interface LeftTupleSinkPropagator
@@ -19,16 +20,16 @@
                                          PropagationContext context,
                                          InternalWorkingMemory workingMemory,
                                          boolean leftTupleMemoryEnabled);
-    
+
     public void createAndPropagateAssertLeftTuple(InternalFactHandle factHandle,
                                                   PropagationContext context,
                                                   InternalWorkingMemory workingMemory,
-                                                  boolean leftTupleWorkingMemoryEnabled );    
+                                                  boolean leftTupleWorkingMemoryEnabled );
 
     public void propagateRetractLeftTuple(LeftTuple tuple,
                                           PropagationContext context,
                                           InternalWorkingMemory workingMemory);
-    
+
     public void propagateRetractLeftTupleDestroyRightTuple(LeftTuple tuple,
                                                            PropagationContext context,
                                                            InternalWorkingMemory workingMemory);
@@ -37,6 +38,8 @@
                                            PropagationContext context,
                                            InternalWorkingMemory workingMemory);
 
+    public BaseNode getMatchingNode(BaseNode candidate);
+
     public LeftTupleSink[] getSinks();
 
     //    public void propagateNewTupleSink(TupleMatch tupleMatch,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java	2008-04-04 13:11:42 UTC (rev 19415)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java	2008-04-04 13:12:45 UTC (rev 19416)
@@ -1,10 +1,10 @@
 package org.drools.reteoo;
 
-import java.io.Serializable;
 import java.io.Externalizable;
 
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.common.BaseNode;
 import org.drools.spi.PropagationContext;
 
 public interface ObjectSinkPropagator
@@ -14,6 +14,8 @@
                                       PropagationContext context,
                                       InternalWorkingMemory workingMemory);
 
+    public BaseNode getMatchingNode(BaseNode candidate);
+
     public ObjectSink[] getSinks();
 
     public int size();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java	2008-04-04 13:11:42 UTC (rev 19415)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java	2008-04-04 13:12:45 UTC (rev 19416)
@@ -2,6 +2,7 @@
 
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.common.BaseNode;
 import org.drools.spi.PropagationContext;
 
 import java.io.ObjectInput;
@@ -59,7 +60,7 @@
             child = temp;
         }
     }
-    
+
     public void propagateRetractLeftTupleDestroyRightTuple(final LeftTuple leftTuple,
                                           final PropagationContext context,
                                           final InternalWorkingMemory workingMemory) {
@@ -74,7 +75,7 @@
             child.unlinkFromLeftParent();
             child = temp;
         }
-    }    
+    }
 
     public void propagateRetractRightTuple(final RightTuple rightTuple,
                                            final PropagationContext context,
@@ -102,6 +103,13 @@
                                    workingMemory );
     }
 
+    public BaseNode getMatchingNode(BaseNode candidate) {
+        if (candidate.equals(sink)) {
+            return (BaseNode)sink;
+        }
+        return null;
+    }
+
     public LeftTupleSink[] getSinks() {
         return new LeftTupleSink[]{this.sink};
     }
@@ -116,6 +124,6 @@
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeObject( this.sink );     
+        out.writeObject( this.sink );
     }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java	2008-04-04 13:11:42 UTC (rev 19415)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java	2008-04-04 13:12:45 UTC (rev 19416)
@@ -2,6 +2,7 @@
 
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.common.BaseNode;
 import org.drools.spi.PropagationContext;
 
 import java.io.Externalizable;
@@ -44,6 +45,13 @@
 
     }
 
+    public BaseNode getMatchingNode(BaseNode candidate) {
+        if (candidate.equals(sink)) {
+            return (BaseNode)sink;
+        }
+        return null;
+    }
+
     public ObjectSink[] getSinks() {
         return new ObjectSink[]{this.sink};
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java	2008-04-04 13:11:42 UTC (rev 19415)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java	2008-04-04 13:12:45 UTC (rev 19416)
@@ -1,12 +1,12 @@
 /*
  * Copyright 2006 JBoss Inc
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -45,7 +45,7 @@
 
 /**
  * Utility functions for reteoo build
- * 
+ *
  * @author etirelli
  */
 public class BuildUtils {
@@ -54,7 +54,7 @@
 
     /**
      * Adds the given builder for the given target to the builders map
-     * 
+     *
      * @param target
      * @param builder
      */
@@ -66,7 +66,7 @@
 
     /**
      * Returns a builder for the given target from the builders map
-     * 
+     *
      * @param target
      * @return returns null if not found
      */
@@ -82,7 +82,7 @@
      *            The current build context
      * @param candidate
      *            The node to attach.
-     *            
+     *
      * @return the actual attached node that may be the one given as parameter
      *         or eventually one that was already in the cache if sharing is enabled
      */
@@ -107,21 +107,9 @@
             }
         } else if( isSharingEnabledForNode( context, candidate ) ) {
             if ( (context.getTupleSource() != null) && ( candidate instanceof LeftTupleSink ) ) {
-                LeftTupleSink[] sinks = context.getTupleSource().getSinkPropagator().getSinks(); 
-                for( int i = 0; i < sinks.length; i++ ) {
-                    if( candidate.equals( sinks[i] ) ) {
-                        node = (BaseNode) sinks[i];
-                        break;
-                    }
-                }
+                node    = context.getTupleSource().getSinkPropagator().getMatchingNode(candidate);
             } else if ( (context.getObjectSource() != null) && (candidate instanceof ObjectSink) ) {
-                ObjectSink[] sinks = context.getObjectSource().getSinkPropagator().getSinks();
-                for( int i = 0; i < sinks.length; i++ ) {
-                    if( candidate.equals( sinks[i] ) ) {
-                        node = (BaseNode) sinks[i];
-                        break;
-                    }
-                }
+                node    = context.getObjectSource().getSinkPropagator().getMatchingNode(candidate);
             } else {
                 throw new RuntimeDroolsException( "This is a bug on node sharing verification. Please report to development team." );
             }
@@ -131,8 +119,8 @@
                 context.releaseId( candidate.getId() );
             }
         }
-        
 
+
         if ( node == null ) {
             // only attach() if it is a new node
             node = candidate;
@@ -143,12 +131,12 @@
             }
         }
         return node;
-        
+
     }
 
     /**
      * Utility function to check if sharing is enabled for nodes of the given class
-     * 
+     *
      * @param context
      * @param node
      * @return
@@ -165,10 +153,10 @@
 
     /**
      * Creates and returns a BetaConstraints object for the given list of constraints
-     * 
+     *
      * @param context the current build context
      * @param list the list of constraints
-     * 
+     *
      * @return
      */
     public BetaConstraints createBetaNodeConstraint(final BuildContext context,
@@ -209,7 +197,7 @@
 
     /**
      * Make sure the required declarations are previously bound
-     * 
+     *
      * @param declarations
      * @throws InvalidPatternException
      */
@@ -226,7 +214,7 @@
             }
         }
 
-        // Make sure the required declarations        
+        // Make sure the required declarations
         if ( list.size() != 0 ) {
             final StringBuffer buffer = new StringBuffer();
             buffer.append( list.get( 0 ) );




More information about the jboss-svn-commits mailing list