[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