[jboss-svn-commits] JBL Code SVN: r6753 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/common main/java/org/drools/leaps main/java/org/drools/reteoo test/java/org/drools/reteoo
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Oct 12 08:04:11 EDT 2006
Author: mark.proctor at jboss.com
Date: 2006-10-12 08:04:00 -0400 (Thu, 12 Oct 2006)
New Revision: 6753
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaConstraints.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
Removed:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaNodeConstraints.java
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/Builder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/ColumnConstraints.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/FromConstraint.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsBuilder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/NotNodeTest.java
Log:
JBRULES-498 Optimised HashMap implementations
-Unrolled the loops
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaConstraints.java (from rev 6747, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaNodeConstraints.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaNodeConstraints.java 2006-10-11 18:08:10 UTC (rev 6747)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaConstraints.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -0,0 +1,26 @@
+package org.drools.common;
+
+import org.drools.reteoo.BetaMemory;
+import org.drools.reteoo.ObjectHashTable;
+import org.drools.reteoo.ReteTuple;
+import org.drools.util.LinkedList;
+import org.drools.util.TupleHashTable;
+
+public interface BetaConstraints {
+
+ public void updateFromTuple(ReteTuple tuple);
+
+ public void updateFromFactHandle(InternalFactHandle handle);
+
+ public boolean isAllowedCachedLeft(Object object);
+
+ public boolean isAllowedCachedRight(ReteTuple tuple);
+
+ public LinkedList getConstraints();
+
+ public boolean isIndexed();
+
+ public boolean isEmpty();
+
+ public BetaMemory createBetaMemory();
+}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaNodeConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaNodeConstraints.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaNodeConstraints.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -1,180 +0,0 @@
-package org.drools.common;
-
-/*
- * Copyright 2005 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.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.drools.WorkingMemory;
-import org.drools.base.evaluators.Operator;
-import org.drools.common.InstanceNotEqualsConstraint.InstanceNotEqualsConstraintContextEntry;
-import org.drools.reteoo.BetaMemory;
-import org.drools.reteoo.ObjectHashTable;
-import org.drools.reteoo.ReteTuple;
-import org.drools.rule.ContextEntry;
-import org.drools.rule.Declaration;
-import org.drools.rule.LiteralConstraint;
-import org.drools.rule.VariableConstraint;
-import org.drools.spi.BetaNodeFieldConstraint;
-import org.drools.spi.Evaluator;
-import org.drools.spi.AlphaNodeFieldConstraint;
-import org.drools.spi.FieldExtractor;
-import org.drools.spi.Tuple;
-import org.drools.util.FactHashTable;
-import org.drools.util.FieldIndexHashTable;
-import org.drools.util.LinkedList;
-import org.drools.util.LinkedListEntry;
-import org.drools.util.TupleHashTable;
-
-public class BetaNodeConstraints
- implements
- Serializable {
-
- /**
- *
- */
- private static final long serialVersionUID = 320L;
-
- public final static BetaNodeConstraints emptyBetaNodeConstraints = new BetaNodeConstraints();
-
- private final LinkedList constraints;
-
- private ContextEntry contexts;
-
- public BetaNodeConstraints() {
- this.constraints = null;
- this.contexts = null;
- }
-
- public BetaNodeConstraints(final BetaNodeFieldConstraint constraint) {
- this( new BetaNodeFieldConstraint[]{constraint} );
- }
-
- public BetaNodeConstraints(final BetaNodeFieldConstraint[] constraints) {
- this.constraints = new LinkedList();
- ContextEntry current = null;
- for ( int i = 0, length = constraints.length; i < length; i++ ) {
- this.constraints.add( new LinkedListEntry( constraints[i] ) );
- ContextEntry context = constraints[i].getContextEntry();
- if ( current == null ) {
- current = context;
- this.contexts = context;
- } else {
- current.setNext( context );
- }
- current = context;
- }
- }
-
- public void updateFromTuple(ReteTuple tuple) {
- for ( ContextEntry context = this.contexts; context != null; context = context.getNext() ) {
- context.updateFromTuple( tuple );
- }
- }
-
- public void updateFromFactHandle(InternalFactHandle handle) {
- for ( ContextEntry context = this.contexts; context != null; context = context.getNext() ) {
- context.updateFromFactHandle( handle );
- }
- }
-
- public boolean isAllowedCachedLeft(Object object ) {
- if ( this.constraints == null ) {
- return true;
- }
-
- LinkedListEntry entry = (LinkedListEntry) this.constraints.getFirst();
- ContextEntry context = this.contexts;
- while ( entry != null ) {
- if ( !((BetaNodeFieldConstraint) entry.getObject()).isAllowedCachedLeft(context, object ) ) {
- return false;
- }
- entry = (LinkedListEntry) entry.getNext();
- context = context.getNext();
- }
- return true;
- }
-
- public boolean isAllowedCachedRight(ReteTuple tuple) {
- if ( this.constraints == null ) {
- return true;
- }
-
- LinkedListEntry entry = (LinkedListEntry) this.constraints.getFirst();
- ContextEntry context = this.contexts;
- while ( entry != null ) {
- if ( !((BetaNodeFieldConstraint) entry.getObject()).isAllowedCachedRight(tuple, context ) ) {
- return false;
- }
- entry = (LinkedListEntry) entry.getNext();
- context = context.getNext();
- }
- return true;
- }
-
- // public Set getRequiredDeclarations() {
- // final Set declarations = new HashSet();
- // for ( int i = 0; i < this.constraints.length; i++ ) {
- // final Declaration[] array = this.constraints[i].getRequiredDeclarations();
- // for ( int j = 0; j < array.length; j++ ) {
- // declarations.add( array[j] );
- // }
- // }
- // return declarations;
- // }
-
- public int hashCode() {
- return this.constraints.hashCode();
- }
-
- public LinkedList getConstraints() {
- return this.constraints;
- }
-
- /**
- * Determine if another object is equal to this.
- *
- * @param object
- * The object to test.
- *
- * @return <code>true</code> if <code>object</code> is equal to this,
- * otherwise <code>false</code>.
- */
- public boolean equals(final Object object) {
- if ( this == object ) {
- return true;
- }
-
- if ( object == null || getClass() != object.getClass() ) {
- return false;
- }
-
- final BetaNodeConstraints other = (BetaNodeConstraints) object;
-
- if ( this.constraints == other.constraints ) {
- return true;
- }
-
- if ( this.constraints.size() != other.constraints.size() ) {
- return false;
- }
-
- return this.constraints.equals( other );
- }
-
-}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -0,0 +1,225 @@
+package org.drools.common;
+
+/*
+ * Copyright 2005 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.WorkingMemory;
+import org.drools.base.evaluators.Operator;
+import org.drools.common.InstanceNotEqualsConstraint.InstanceNotEqualsConstraintContextEntry;
+import org.drools.reteoo.BetaMemory;
+import org.drools.reteoo.ObjectHashTable;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.ContextEntry;
+import org.drools.rule.Declaration;
+import org.drools.rule.LiteralConstraint;
+import org.drools.rule.VariableConstraint;
+import org.drools.spi.BetaNodeFieldConstraint;
+import org.drools.spi.Constraint;
+import org.drools.spi.Evaluator;
+import org.drools.spi.AlphaNodeFieldConstraint;
+import org.drools.spi.FieldExtractor;
+import org.drools.spi.Tuple;
+import org.drools.util.FactHashTable;
+import org.drools.util.FieldIndexHashTable;
+import org.drools.util.LinkedList;
+import org.drools.util.LinkedListEntry;
+import org.drools.util.TupleHashTable;
+
+public class DefaultBetaConstraints
+ implements
+ Serializable, BetaConstraints {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 320L;
+
+ private final LinkedList constraints;
+
+ private ContextEntry contexts;
+
+ private boolean indexed;
+
+ public DefaultBetaConstraints(final BetaNodeFieldConstraint constraint) {
+ this( new BetaNodeFieldConstraint[]{constraint} );
+ }
+
+ public DefaultBetaConstraints(final BetaNodeFieldConstraint[] constraints) {
+ this.constraints = new LinkedList();
+ ContextEntry current = null;
+ for ( int i = 0, length = constraints.length; i < length; i++ ) {
+ // Determine if this constraint is indexable
+ // it is only indexable if there is already no indexed constraints
+ // An indexed constraint is always the first constraint
+ if ( isIndexable( constraints[i] ) && !indexed ) {
+ this.constraints.insertAfter( null, new LinkedListEntry( constraints[i] ) );
+ this.indexed = true;
+ } else {
+ this.constraints.add( new LinkedListEntry( constraints[i] ) );
+ }
+ //Setup the contextEntry cache to be iterated in the same order
+ ContextEntry context = constraints[i].getContextEntry();
+ if ( current == null ) {
+ current = context;
+ this.contexts = context;
+ } else {
+ current.setNext( context );
+ }
+ current = context;
+ }
+ }
+
+ private boolean isIndexable(final BetaNodeFieldConstraint constraint) {
+ if ( constraint.getClass() == VariableConstraint.class ) {
+ VariableConstraint variableConstraint = (VariableConstraint) constraint;
+ return ( variableConstraint.getEvaluator().getOperator() == Operator.EQUAL );
+ } else {
+ return false;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#updateFromTuple(org.drools.reteoo.ReteTuple)
+ */
+ public void updateFromTuple(ReteTuple tuple) {
+ for ( ContextEntry context = this.contexts; context != null; context = context.getNext() ) {
+ context.updateFromTuple( tuple );
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#updateFromFactHandle(org.drools.common.InternalFactHandle)
+ */
+ public void updateFromFactHandle(InternalFactHandle handle) {
+ for ( ContextEntry context = this.contexts; context != null; context = context.getNext() ) {
+ context.updateFromFactHandle( handle );
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#isAllowedCachedLeft(java.lang.Object)
+ */
+ public boolean isAllowedCachedLeft(Object object ) {
+ LinkedListEntry entry = (LinkedListEntry) this.constraints.getFirst();
+ ContextEntry context = this.contexts;
+ while ( entry != null ) {
+ if ( !((BetaNodeFieldConstraint) entry.getObject()).isAllowedCachedLeft(context, object ) ) {
+ return false;
+ }
+ entry = (LinkedListEntry) entry.getNext();
+ context = context.getNext();
+ }
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#isAllowedCachedRight(org.drools.reteoo.ReteTuple)
+ */
+ public boolean isAllowedCachedRight(ReteTuple tuple) {
+ LinkedListEntry entry = (LinkedListEntry) this.constraints.getFirst();
+ ContextEntry context = this.contexts;
+ while ( entry != null ) {
+ if ( !((BetaNodeFieldConstraint) entry.getObject()).isAllowedCachedRight(tuple, context ) ) {
+ return false;
+ }
+ entry = (LinkedListEntry) entry.getNext();
+ context = context.getNext();
+ }
+ return true;
+ }
+
+ public boolean isIndexed() {
+ return this.indexed;
+ }
+
+ public boolean isEmpty() {
+ return false;
+ }
+
+ public BetaMemory createBetaMemory() {
+ BetaMemory memory;
+ if ( this.indexed ) {
+ Constraint constraint = ( Constraint ) this.constraints.getFirst();
+ VariableConstraint variableConstraint = (VariableConstraint) constraint;
+ memory = new BetaMemory( new TupleHashTable(),
+ new FieldIndexHashTable( variableConstraint.getFieldExtractor(),
+ variableConstraint.getRequiredDeclarations()[0] ) );
+ } else {
+ memory = new BetaMemory( new TupleHashTable(),
+ new FactHashTable() );
+ }
+
+ return memory;
+ }
+
+ // public Set getRequiredDeclarations() {
+ // final Set declarations = new HashSet();
+ // for ( int i = 0; i < this.constraints.length; i++ ) {
+ // final Declaration[] array = this.constraints[i].getRequiredDeclarations();
+ // for ( int j = 0; j < array.length; j++ ) {
+ // declarations.add( array[j] );
+ // }
+ // }
+ // return declarations;
+ // }
+
+ public int hashCode() {
+ return this.constraints.hashCode();
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#getConstraints()
+ */
+ public LinkedList getConstraints() {
+ return this.constraints;
+ }
+
+ /**
+ * Determine if another object is equal to this.
+ *
+ * @param object
+ * The object to test.
+ *
+ * @return <code>true</code> if <code>object</code> is equal to this,
+ * otherwise <code>false</code>.
+ */
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+
+ if ( object == null || getClass() != object.getClass() ) {
+ return false;
+ }
+
+ final DefaultBetaConstraints other = (DefaultBetaConstraints) object;
+
+ if ( this.constraints == other.constraints ) {
+ return true;
+ }
+
+ if ( this.constraints.size() != other.constraints.size() ) {
+ return false;
+ }
+
+ return this.constraints.equals( other );
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -0,0 +1,208 @@
+package org.drools.common;
+
+/*
+ * Copyright 2005 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.WorkingMemory;
+import org.drools.base.evaluators.Operator;
+import org.drools.common.InstanceNotEqualsConstraint.InstanceNotEqualsConstraintContextEntry;
+import org.drools.reteoo.BetaMemory;
+import org.drools.reteoo.ObjectHashTable;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.ContextEntry;
+import org.drools.rule.Declaration;
+import org.drools.rule.LiteralConstraint;
+import org.drools.rule.VariableConstraint;
+import org.drools.spi.BetaNodeFieldConstraint;
+import org.drools.spi.Constraint;
+import org.drools.spi.Evaluator;
+import org.drools.spi.AlphaNodeFieldConstraint;
+import org.drools.spi.FieldExtractor;
+import org.drools.spi.Tuple;
+import org.drools.util.FactHashTable;
+import org.drools.util.FieldIndexHashTable;
+import org.drools.util.LinkedList;
+import org.drools.util.LinkedListEntry;
+import org.drools.util.LinkedListNode;
+import org.drools.util.TupleHashTable;
+
+public class DoubleBetaConstraints
+ implements
+ Serializable,
+ BetaConstraints {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 320L;
+
+ private final BetaNodeFieldConstraint constraint0;
+ private final BetaNodeFieldConstraint constraint1;
+
+ private ContextEntry context0;
+ private ContextEntry context1;
+
+ private boolean indexed;
+
+ public DoubleBetaConstraints(final BetaNodeFieldConstraint[] constraints) {
+ // find the first instrumental
+ for ( int i = 0, length = constraints.length; i < length; i++ ) {
+ if ( isIndexable( constraints[i] ) ) {
+ if ( i > 0) {
+ // swap the constraint to the first position
+ BetaNodeFieldConstraint temp = constraints[0];
+ constraints[0] = constraints[i];
+ constraints[i] = temp;
+ }
+ this.indexed = true;
+ break;
+ }
+ }
+
+ this.constraint0 = constraints[0];
+ this.context0 = this.constraint0.getContextEntry();
+
+ this.constraint1 = constraints[1];
+ this.context1 = this.constraint1.getContextEntry();
+ }
+
+ private boolean isIndexable(final BetaNodeFieldConstraint constraint) {
+ if ( constraint.getClass() == VariableConstraint.class ) {
+ VariableConstraint variableConstraint = (VariableConstraint) constraint;
+ return (variableConstraint.getEvaluator().getOperator() == Operator.EQUAL);
+ } else {
+ return false;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#updateFromTuple(org.drools.reteoo.ReteTuple)
+ */
+ public void updateFromTuple(ReteTuple tuple) {
+ context0.updateFromTuple( tuple );
+ context1.updateFromTuple( tuple );
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#updateFromFactHandle(org.drools.common.InternalFactHandle)
+ */
+ public void updateFromFactHandle(InternalFactHandle handle) {
+ context0.updateFromFactHandle( handle );
+ context1.updateFromFactHandle( handle );
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#isAllowedCachedLeft(java.lang.Object)
+ */
+ public boolean isAllowedCachedLeft(Object object) {
+ return this.constraint0.isAllowedCachedLeft( context0,
+ object ) && this.constraint1.isAllowedCachedLeft( context1,
+ object );
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#isAllowedCachedRight(org.drools.reteoo.ReteTuple)
+ */
+ public boolean isAllowedCachedRight(ReteTuple tuple) {
+ return this.constraint0.isAllowedCachedRight( tuple,
+ context0 ) && this.constraint1.isAllowedCachedRight( tuple,
+ context1 );
+ }
+
+ public boolean isIndexed() {
+ return this.indexed;
+ }
+
+ public boolean isEmpty() {
+ return false;
+ }
+
+ public BetaMemory createBetaMemory() {
+ BetaMemory memory;
+ if ( this.indexed ) {
+ VariableConstraint variableConstraint = (VariableConstraint) this.constraint0;
+ memory = new BetaMemory( new TupleHashTable(),
+ new FieldIndexHashTable( variableConstraint.getFieldExtractor(),
+ variableConstraint.getRequiredDeclarations()[0] ) );
+ } else {
+ memory = new BetaMemory( new TupleHashTable(),
+ new FactHashTable() );
+ }
+
+ return memory;
+ }
+
+ // public Set getRequiredDeclarations() {
+ // final Set declarations = new HashSet();
+ // for ( int i = 0; i < this.constraints.length; i++ ) {
+ // final Declaration[] array = this.constraints[i].getRequiredDeclarations();
+ // for ( int j = 0; j < array.length; j++ ) {
+ // declarations.add( array[j] );
+ // }
+ // }
+ // return declarations;
+ // }
+
+ public int hashCode() {
+ return this.constraint0.hashCode() ^ this.constraint0.hashCode();
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#getConstraints()
+ */
+ public LinkedList getConstraints() {
+ LinkedList list = new LinkedList();
+ list.add( new LinkedListEntry( this.constraint0 ) );
+ list.add( new LinkedListEntry( this.constraint1 ) );
+ return list;
+ }
+
+ /**
+ * Determine if another object is equal to this.
+ *
+ * @param object
+ * The object to test.
+ *
+ * @return <code>true</code> if <code>object</code> is equal to this,
+ * otherwise <code>false</code>.
+ */
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+
+ if ( object == null || getClass() != object.getClass() ) {
+ return false;
+ }
+
+ final DoubleBetaConstraints other = (DoubleBetaConstraints) object;
+
+ if ( this.constraint0 != other.constraint0 && this.constraint0.equals( other.constraint0 ) ) {
+ return false;
+ }
+
+ if ( this.constraint1 != other.constraint1 && this.constraint1.equals( other.constraint1 ) ) {
+ return false;
+ }
+
+ return true;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -0,0 +1,134 @@
+package org.drools.common;
+
+/*
+ * Copyright 2005 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.WorkingMemory;
+import org.drools.base.evaluators.Operator;
+import org.drools.common.InstanceNotEqualsConstraint.InstanceNotEqualsConstraintContextEntry;
+import org.drools.reteoo.BetaMemory;
+import org.drools.reteoo.ObjectHashTable;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.ContextEntry;
+import org.drools.rule.Declaration;
+import org.drools.rule.LiteralConstraint;
+import org.drools.rule.VariableConstraint;
+import org.drools.spi.BetaNodeFieldConstraint;
+import org.drools.spi.Constraint;
+import org.drools.spi.Evaluator;
+import org.drools.spi.AlphaNodeFieldConstraint;
+import org.drools.spi.FieldExtractor;
+import org.drools.spi.Tuple;
+import org.drools.util.FactHashTable;
+import org.drools.util.FieldIndexHashTable;
+import org.drools.util.LinkedList;
+import org.drools.util.LinkedListEntry;
+import org.drools.util.LinkedListNode;
+import org.drools.util.TupleHashTable;
+
+public class EmptyBetaConstraints
+ implements
+ Serializable, BetaConstraints {
+
+ private static final BetaConstraints INSTANCE = new EmptyBetaConstraints();
+
+ public static BetaConstraints getInstance() {
+ return INSTANCE;
+ }
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 320L;
+
+ private EmptyBetaConstraints() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#updateFromTuple(org.drools.reteoo.ReteTuple)
+ */
+ public void updateFromTuple(ReteTuple tuple) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#updateFromFactHandle(org.drools.common.InternalFactHandle)
+ */
+ public void updateFromFactHandle(InternalFactHandle handle) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#isAllowedCachedLeft(java.lang.Object)
+ */
+ public boolean isAllowedCachedLeft(Object object ) {
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#isAllowedCachedRight(org.drools.reteoo.ReteTuple)
+ */
+ public boolean isAllowedCachedRight(ReteTuple tuple) {
+ return true;
+ }
+
+ public boolean isIndexed() {
+ return false;
+ }
+
+ public boolean isEmpty() {
+ return true;
+ }
+
+ public BetaMemory createBetaMemory() {
+ BetaMemory memory = new BetaMemory( new TupleHashTable(),
+ new FactHashTable() );
+
+ return memory;
+ }
+
+ public int hashCode() {
+ return 1;
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#getConstraints()
+ */
+ public LinkedList getConstraints() {
+ LinkedList list = new LinkedList();
+ return list;
+ }
+
+ /**
+ * Determine if another object is equal to this.
+ *
+ * @param object
+ * The object to test.
+ *
+ * @return <code>true</code> if <code>object</code> is equal to this,
+ * otherwise <code>false</code>.
+ */
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+
+ return ( object != null && getClass() == object.getClass() );
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -0,0 +1,181 @@
+package org.drools.common;
+
+/*
+ * Copyright 2005 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.WorkingMemory;
+import org.drools.base.evaluators.Operator;
+import org.drools.common.InstanceNotEqualsConstraint.InstanceNotEqualsConstraintContextEntry;
+import org.drools.reteoo.BetaMemory;
+import org.drools.reteoo.ObjectHashTable;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.ContextEntry;
+import org.drools.rule.Declaration;
+import org.drools.rule.LiteralConstraint;
+import org.drools.rule.VariableConstraint;
+import org.drools.spi.BetaNodeFieldConstraint;
+import org.drools.spi.Constraint;
+import org.drools.spi.Evaluator;
+import org.drools.spi.AlphaNodeFieldConstraint;
+import org.drools.spi.FieldExtractor;
+import org.drools.spi.Tuple;
+import org.drools.util.FactHashTable;
+import org.drools.util.FieldIndexHashTable;
+import org.drools.util.LinkedList;
+import org.drools.util.LinkedListEntry;
+import org.drools.util.LinkedListNode;
+import org.drools.util.TupleHashTable;
+
+public class SingleBetaConstraints
+ implements
+ Serializable,
+ BetaConstraints {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 320L;
+
+ private final BetaNodeFieldConstraint constraint;
+
+ private ContextEntry context;
+
+ private boolean indexed;
+
+ public SingleBetaConstraints(final BetaNodeFieldConstraint constraint) {
+ this.constraint = constraint;
+ // Determine if this constraint is indexable
+ if ( isIndexable( constraint ) ) {
+ this.indexed = true;
+ }
+
+ this.context = constraint.getContextEntry();
+ }
+
+ private boolean isIndexable(final BetaNodeFieldConstraint constraint) {
+ if ( constraint.getClass() == VariableConstraint.class ) {
+ VariableConstraint variableConstraint = (VariableConstraint) constraint;
+ return (variableConstraint.getEvaluator().getOperator() == Operator.EQUAL);
+ } else {
+ return false;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#updateFromTuple(org.drools.reteoo.ReteTuple)
+ */
+ public void updateFromTuple(ReteTuple tuple) {
+ context.updateFromTuple( tuple );
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#updateFromFactHandle(org.drools.common.InternalFactHandle)
+ */
+ public void updateFromFactHandle(InternalFactHandle handle) {
+ context.updateFromFactHandle( handle );
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#isAllowedCachedLeft(java.lang.Object)
+ */
+ public boolean isAllowedCachedLeft(Object object) {
+ return this.constraint.isAllowedCachedLeft( context,
+ object );
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#isAllowedCachedRight(org.drools.reteoo.ReteTuple)
+ */
+ public boolean isAllowedCachedRight(ReteTuple tuple) {
+ return this.constraint.isAllowedCachedRight( tuple,
+ context );
+ }
+
+ public boolean isIndexed() {
+ return this.indexed;
+ }
+
+ public boolean isEmpty() {
+ return false;
+ }
+
+ public BetaMemory createBetaMemory() {
+ BetaMemory memory;
+ if ( this.indexed ) {
+ VariableConstraint variableConstraint = (VariableConstraint) this.constraint;
+ memory = new BetaMemory( new TupleHashTable(),
+ new FieldIndexHashTable( variableConstraint.getFieldExtractor(),
+ variableConstraint.getRequiredDeclarations()[0] ) );
+ } else {
+ memory = new BetaMemory( new TupleHashTable(),
+ new FactHashTable() );
+ }
+
+ return memory;
+ }
+
+ // public Set getRequiredDeclarations() {
+ // final Set declarations = new HashSet();
+ // for ( int i = 0; i < this.constraints.length; i++ ) {
+ // final Declaration[] array = this.constraints[i].getRequiredDeclarations();
+ // for ( int j = 0; j < array.length; j++ ) {
+ // declarations.add( array[j] );
+ // }
+ // }
+ // return declarations;
+ // }
+
+ public int hashCode() {
+ return this.constraint.hashCode();
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#getConstraints()
+ */
+ public LinkedList getConstraints() {
+ LinkedList list = new LinkedList();
+ list.add( new LinkedListEntry( this.constraint ) );
+ return list;
+ }
+
+ /**
+ * Determine if another object is equal to this.
+ *
+ * @param object
+ * The object to test.
+ *
+ * @return <code>true</code> if <code>object</code> is equal to this,
+ * otherwise <code>false</code>.
+ */
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+
+ if ( object == null || getClass() != object.getClass() ) {
+ return false;
+ }
+
+ final SingleBetaConstraints other = (SingleBetaConstraints) object;
+
+ return this.constraint == other.constraint || this.constraint.equals( other );
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -0,0 +1,222 @@
+package org.drools.common;
+
+/*
+ * Copyright 2005 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.WorkingMemory;
+import org.drools.base.evaluators.Operator;
+import org.drools.common.InstanceNotEqualsConstraint.InstanceNotEqualsConstraintContextEntry;
+import org.drools.reteoo.BetaMemory;
+import org.drools.reteoo.ObjectHashTable;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.ContextEntry;
+import org.drools.rule.Declaration;
+import org.drools.rule.LiteralConstraint;
+import org.drools.rule.VariableConstraint;
+import org.drools.spi.BetaNodeFieldConstraint;
+import org.drools.spi.Constraint;
+import org.drools.spi.Evaluator;
+import org.drools.spi.AlphaNodeFieldConstraint;
+import org.drools.spi.FieldExtractor;
+import org.drools.spi.Tuple;
+import org.drools.util.FactHashTable;
+import org.drools.util.FieldIndexHashTable;
+import org.drools.util.LinkedList;
+import org.drools.util.LinkedListEntry;
+import org.drools.util.LinkedListNode;
+import org.drools.util.TupleHashTable;
+
+public class TripleBetaConstraints
+ implements
+ Serializable,
+ BetaConstraints {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 320L;
+
+ private final BetaNodeFieldConstraint constraint0;
+ private final BetaNodeFieldConstraint constraint1;
+ private final BetaNodeFieldConstraint constraint2;
+
+ private ContextEntry context0;
+ private ContextEntry context1;
+ private ContextEntry context2;
+
+ private boolean indexed;
+
+ public TripleBetaConstraints(final BetaNodeFieldConstraint[] constraints) {
+ // find the first instrumental
+ for ( int i = 0, length = constraints.length; i < length; i++ ) {
+ if ( isIndexable( constraints[i] ) ) {
+ if ( i > 0) {
+ // swap the constraint to the first position
+ BetaNodeFieldConstraint temp = constraints[0];
+ constraints[0] = constraints[i];
+ constraints[i] = temp;
+ }
+ this.indexed = true;
+ break;
+ }
+ }
+
+ this.constraint0 = constraints[0];
+ this.context0 = this.constraint0.getContextEntry();
+
+ this.constraint1 = constraints[1];
+ this.context1 = this.constraint1.getContextEntry();
+
+ this.constraint2 = constraints[2];
+ this.context2 = this.constraint2.getContextEntry();
+ }
+
+ private boolean isIndexable(final BetaNodeFieldConstraint constraint) {
+ if ( constraint.getClass() == VariableConstraint.class ) {
+ VariableConstraint variableConstraint = (VariableConstraint) constraint;
+ return (variableConstraint.getEvaluator().getOperator() == Operator.EQUAL);
+ } else {
+ return false;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#updateFromTuple(org.drools.reteoo.ReteTuple)
+ */
+ public void updateFromTuple(ReteTuple tuple) {
+ context0.updateFromTuple( tuple );
+ context1.updateFromTuple( tuple );
+ context2.updateFromTuple( tuple );
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#updateFromFactHandle(org.drools.common.InternalFactHandle)
+ */
+ public void updateFromFactHandle(InternalFactHandle handle) {
+ context0.updateFromFactHandle( handle );
+ context1.updateFromFactHandle( handle );
+ context2.updateFromFactHandle( handle );
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#isAllowedCachedLeft(java.lang.Object)
+ */
+ public boolean isAllowedCachedLeft(Object object) {
+ return this.constraint0.isAllowedCachedLeft( context0,
+ object ) && this.constraint1.isAllowedCachedLeft( context1,
+ object ) && this.constraint2.isAllowedCachedLeft( context2,
+ object );
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#isAllowedCachedRight(org.drools.reteoo.ReteTuple)
+ */
+ public boolean isAllowedCachedRight(ReteTuple tuple) {
+ return this.constraint0.isAllowedCachedRight( tuple,
+ context0 ) && this.constraint1.isAllowedCachedRight( tuple,
+ context1 ) && this.constraint1.isAllowedCachedRight( tuple,
+ context1 );
+ }
+
+ public boolean isIndexed() {
+ return this.indexed;
+ }
+
+ public boolean isEmpty() {
+ return false;
+ }
+
+ public BetaMemory createBetaMemory() {
+ BetaMemory memory;
+ if ( this.indexed ) {
+ VariableConstraint variableConstraint = (VariableConstraint) this.constraint0;
+ memory = new BetaMemory( new TupleHashTable(),
+ new FieldIndexHashTable( variableConstraint.getFieldExtractor(),
+ variableConstraint.getRequiredDeclarations()[0] ) );
+ } else {
+ memory = new BetaMemory( new TupleHashTable(),
+ new FactHashTable() );
+ }
+
+ return memory;
+ }
+
+ // public Set getRequiredDeclarations() {
+ // final Set declarations = new HashSet();
+ // for ( int i = 0; i < this.constraints.length; i++ ) {
+ // final Declaration[] array = this.constraints[i].getRequiredDeclarations();
+ // for ( int j = 0; j < array.length; j++ ) {
+ // declarations.add( array[j] );
+ // }
+ // }
+ // return declarations;
+ // }
+
+ public int hashCode() {
+ return this.constraint0.hashCode() ^ this.constraint0.hashCode() ^ this.constraint0.hashCode();
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#getConstraints()
+ */
+ public LinkedList getConstraints() {
+ LinkedList list = new LinkedList();
+ list.add( new LinkedListEntry( this.constraint0 ) );
+ list.add( new LinkedListEntry( this.constraint1 ) );
+ list.add( new LinkedListEntry( this.constraint2 ) );
+ return list;
+ }
+
+ /**
+ * Determine if another object is equal to this.
+ *
+ * @param object
+ * The object to test.
+ *
+ * @return <code>true</code> if <code>object</code> is equal to this,
+ * otherwise <code>false</code>.
+ */
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+
+ if ( object == null || getClass() != object.getClass() ) {
+ return false;
+ }
+
+ final TripleBetaConstraints other = (TripleBetaConstraints) object;
+
+ if ( this.constraint0 != other.constraint0 && this.constraint0.equals( other.constraint0 ) ) {
+ return false;
+ }
+
+ if ( this.constraint1 != other.constraint1 && this.constraint1.equals( other.constraint1 ) ) {
+ return false;
+ }
+
+ if ( this.constraint2 != other.constraint2 && this.constraint2.equals( other.constraint2 ) ) {
+ return false;
+ }
+
+ return true;
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/Builder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/Builder.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/Builder.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -22,7 +22,8 @@
import java.util.List;
import java.util.Map;
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.BetaConstraints;
+import org.drools.common.DefaultBetaConstraints;
import org.drools.rule.And;
import org.drools.rule.Column;
import org.drools.rule.Declaration;
@@ -156,7 +157,7 @@
*/
final private static ColumnConstraints processColumn(final Column column,
final boolean removeIdentities ) {
- BetaNodeConstraints binder;
+ BetaConstraints binder;
final List alphaConstraints = new ArrayList( );
final List predicateConstraints = new ArrayList( );
@@ -190,9 +191,9 @@
if ( !predicateConstraints.isEmpty() ) {
- binder = new BetaNodeConstraints( (AlphaNodeFieldConstraint[]) predicateConstraints.toArray( new AlphaNodeFieldConstraint[predicateConstraints.size()] ) );
+ binder = new DefaultBetaConstraints( (AlphaNodeFieldConstraint[]) predicateConstraints.toArray( new AlphaNodeFieldConstraint[predicateConstraints.size()] ) );
} else {
- binder = new BetaNodeConstraints();
+ binder = new DefaultBetaConstraints();
}
return new ColumnConstraints( column,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/ColumnConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/ColumnConstraints.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/ColumnConstraints.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -20,7 +20,7 @@
import java.util.List;
import org.drools.WorkingMemory;
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.BetaConstraints;
import org.drools.common.InternalFactHandle;
import org.drools.rule.Column;
import org.drools.spi.AlphaNodeFieldConstraint;
@@ -39,13 +39,13 @@
private final boolean alphaPresent;
- private final BetaNodeConstraints beta;
+ private final BetaConstraints beta;
private final boolean betaPresent;
public ColumnConstraints(final Column column,
final List alpha,
- final BetaNodeConstraints beta) {
+ final BetaConstraints beta) {
this.classType = LeapsBuilder.getLeapsClassType( column.getObjectType() );
if ( beta != null ) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/FromConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/FromConstraint.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/FromConstraint.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -2,7 +2,7 @@
import java.util.Arrays;
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.DefaultBetaConstraints;
import org.drools.rule.Column;
import org.drools.spi.DataProvider;
@@ -15,7 +15,7 @@
super( column,
( constraints.getAlphaContraints( ) == null || constraints.getAlphaContraints( ).length == 0 ) ? Arrays.asList( new FromConstraint[0] )
: Arrays.asList( constraints.getAlphaContraints( ) ),
- new BetaNodeConstraints( constraints.getBetaContraints( ) ) );
+ new DefaultBetaConstraints( constraints.getBetaContraints( ) ) );
this.provider = provider;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsBuilder.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsBuilder.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -23,7 +23,8 @@
import java.util.Map;
import org.drools.base.ClassObjectType;
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.BetaConstraints;
+import org.drools.common.DefaultBetaConstraints;
import org.drools.facttemplates.FactTemplateObjectType;
import org.drools.rule.And;
import org.drools.rule.Column;
@@ -167,7 +168,7 @@
* @return leaps packaged ColumnConstraints
*/
final private static ColumnConstraints processColumn(final Column column ) {
- BetaNodeConstraints binder;
+ BetaConstraints binder;
final List alphaConstraints = new ArrayList( );
final List predicateConstraints = new ArrayList( );
@@ -200,9 +201,9 @@
}
if ( !predicateConstraints.isEmpty() ) {
- binder = new BetaNodeConstraints( (AlphaNodeFieldConstraint[]) predicateConstraints.toArray( new AlphaNodeFieldConstraint[predicateConstraints.size()] ) );
+ binder = new DefaultBetaConstraints( (AlphaNodeFieldConstraint[]) predicateConstraints.toArray( new AlphaNodeFieldConstraint[predicateConstraints.size()] ) );
} else {
- binder = new BetaNodeConstraints();
+ binder = new DefaultBetaConstraints();
}
return new ColumnConstraints( column,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -21,7 +21,8 @@
import java.util.List;
import java.util.Map;
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.BetaConstraints;
+import org.drools.common.DefaultBetaConstraints;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.rule.Accumulate;
@@ -45,7 +46,7 @@
private final Accumulate accumulate;
private final AlphaNodeFieldConstraint[] constraints;
- private final BetaNodeConstraints resultsBinder;
+ private final BetaConstraints resultsBinder;
/**
* Construct.
@@ -67,8 +68,8 @@
leftInput,
rightInput,
new AlphaNodeFieldConstraint[0],
- new BetaNodeConstraints(),
- new BetaNodeConstraints(),
+ new DefaultBetaConstraints(),
+ new DefaultBetaConstraints(),
accumulate );
}
@@ -76,8 +77,8 @@
final TupleSource leftInput,
final ObjectSource rightInput,
final AlphaNodeFieldConstraint[] constraints,
- final BetaNodeConstraints sourceBinder,
- final BetaNodeConstraints resultsBinder,
+ final BetaConstraints sourceBinder,
+ final BetaConstraints resultsBinder,
final Accumulate accumulate) {
super( id,
leftInput,
@@ -236,7 +237,7 @@
memory.add( workingMemory,
handle );
- final BetaNodeConstraints binder = constraints();
+ final BetaConstraints binder = constraints();
for ( final Iterator it = memory.leftTupleIterator( workingMemory,
handle ); it.hasNext(); ) {
final ReteTuple leftTuple = (ReteTuple) it.next();
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 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -22,7 +22,9 @@
import org.drools.RuleBaseConfiguration;
import org.drools.base.evaluators.Operator;
import org.drools.common.BaseNode;
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.BetaConstraints;
+import org.drools.common.DefaultBetaConstraints;
+import org.drools.common.EmptyBetaConstraints;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.common.NodeMemory;
@@ -62,12 +64,12 @@
// ------------------------------------------------------------
/** The left input <code>TupleSource</code>. */
- protected final TupleSource leftInput;
+ protected final TupleSource leftInput;
/** The right input <code>TupleSource</code>. */
- protected final ObjectSource rightInput;
+ protected final ObjectSource rightInput;
- protected final BetaNodeConstraints constraints;
+ protected final BetaConstraints constraints;
private TupleSinkNode previousTupleSinkNode;
private TupleSinkNode nextTupleSinkNode;
@@ -93,7 +95,7 @@
this( id,
leftInput,
rightInput,
- BetaNodeConstraints.emptyBetaNodeConstraints );
+ EmptyBetaConstraints.getInstance() );
}
/**
@@ -107,7 +109,7 @@
BetaNode(final int id,
final TupleSource leftInput,
final ObjectSource rightInput,
- final BetaNodeConstraints constraints) {
+ final BetaConstraints constraints) {
super( id );
this.leftInput = leftInput;
this.rightInput = rightInput;
@@ -134,28 +136,28 @@
}
public List getRules() {
- List list = new ArrayList();
-
+ List list = new ArrayList();
+
TupleSink[] sinks = this.sink.getSinks();
- for ( int i = 0, length = sinks.length; i < length; i++ ) {
+ for ( int i = 0, length = sinks.length; i < length; i++ ) {
if ( sinks[i].getClass() == TerminalNode.class ) {
- list.add( ( ( TerminalNode ) sinks[i]).getRule().getName() );
- } else if ( sinks[i] instanceof BetaNode ) {
- list.addAll( ( (BetaNode) sinks[i] ).getRules() );
+ list.add( ((TerminalNode) sinks[i]).getRule().getName() );
+ } else if ( sinks[i] instanceof BetaNode ) {
+ list.addAll( ((BetaNode) sinks[i]).getRules() );
}
- }
-
+ }
+
return list;
- }
-
- public ObjectTypeNode getObjectTypeNode() {
- ObjectSource source = this.rightInput;
- while ( source.getClass() != ObjectTypeNode.class ) {
- source = source.objectSource;
- }
- return ((ObjectTypeNode)source);
}
-
+
+ public ObjectTypeNode getObjectTypeNode() {
+ ObjectSource source = this.rightInput;
+ while ( source.getClass() != ObjectTypeNode.class ) {
+ source = source.objectSource;
+ }
+ return ((ObjectTypeNode) source);
+ }
+
public void attach(final InternalWorkingMemory[] workingMemories) {
attach();
@@ -177,21 +179,21 @@
public void remove(final BaseNode node,
final InternalWorkingMemory[] workingMemories) {
- if( !node.isInUse()) {
- removeTupleSink( ( TupleSink) node );
- }
- removeShare();
-
- if ( ! this.isInUse() ) {
- for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
- workingMemories[i].clearNodeMemory( this );
- }
- }
- this.rightInput.remove( this,
- workingMemories );
- this.leftInput.remove( this,
- workingMemories );
+ if ( !node.isInUse() ) {
+ removeTupleSink( (TupleSink) node );
+ }
+ removeShare();
+ if ( !this.isInUse() ) {
+ for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
+ workingMemories[i].clearNodeMemory( this );
+ }
+ }
+ this.rightInput.remove( this,
+ workingMemories );
+ this.leftInput.remove( this,
+ workingMemories );
+
}
//public abstract TupleSink getTupleSink();
@@ -201,10 +203,10 @@
public String toString() {
return "";
}
-
+
public void dumpMemory(InternalWorkingMemory workingMemory) {
MemoryVisitor visitor = new MemoryVisitor( workingMemory );
- visitor.visit( this );
+ visitor.visit( this );
}
/* (non-Javadoc)
@@ -235,42 +237,43 @@
* Creates a BetaMemory for the BetaNode's memory.
*/
public Object createMemory(final RuleBaseConfiguration config) {
- // iterate over all the constraints untill we find one that is indexeable. When we find it we remove it from the list and create the
- // BetaMemory for it. If we don't find one, we create a normal beta memory. We don't need the constraint as we can assume that
- // anything returned by the memory already passes that test.
- LinkedList constraints = this.constraints.getConstraints();
- BetaMemory memory = null;
-
- if ( constraints != null ) {
-
- for ( LinkedListEntry entry = (LinkedListEntry) constraints.getFirst(); entry != null; entry = (LinkedListEntry) entry.getNext() ) {
- BetaNodeFieldConstraint constraint = (BetaNodeFieldConstraint) entry.getObject();
- if ( constraint.getClass() == VariableConstraint.class ) {
- VariableConstraint variableConstraint = (VariableConstraint) constraint;
- FieldExtractor extractor = variableConstraint.getFieldExtractor();
- Evaluator evaluator = variableConstraint.getEvaluator();
- if ( evaluator.getOperator() == Operator.EQUAL ) {
- // make suret the indexed constraint is first
- if ( constraints.getFirst() != entry ) {
- constraints.remove( entry );
- constraints.insertAfter( null, entry );
- }
- memory = new BetaMemory( new TupleHashTable(),
- new FieldIndexHashTable( extractor,
- variableConstraint.getRequiredDeclarations()[0] ) );
- break;
-
- }
- }
- }
- }
-
- if ( memory == null ) {
- memory = new BetaMemory( new TupleHashTable(),
- new FactHashTable() );
- }
-
- return memory;
+ return this.constraints.createBetaMemory();
+// // iterate over all the constraints untill we find one that is indexeable. When we find it we remove it from the list and create the
+// // BetaMemory for it. If we don't find one, we create a normal beta memory. We don't need the constraint as we can assume that
+// // anything returned by the memory already passes that test.
+// LinkedList constraints = this.constraints.getConstraints();
+// BetaMemory memory = null;
+//
+// if ( constraints != null ) {
+// for ( LinkedListEntry entry = (LinkedListEntry) constraints.getFirst(); entry != null; entry = (LinkedListEntry) entry.getNext() ) {
+// BetaNodeFieldConstraint constraint = (BetaNodeFieldConstraint) entry.getObject();
+// if ( constraint.getClass() == VariableConstraint.class ) {
+// VariableConstraint variableConstraint = (VariableConstraint) constraint;
+// FieldExtractor extractor = variableConstraint.getFieldExtractor();
+// Evaluator evaluator = variableConstraint.getEvaluator();
+// if ( evaluator.getOperator() == Operator.EQUAL ) {
+// // make suret the indexed constraint is first
+// if ( constraints.getFirst() != entry ) {
+// constraints.remove( entry );
+// constraints.insertAfter( null,
+// entry );
+// }
+// memory = new BetaMemory( new TupleHashTable(),
+// new FieldIndexHashTable( extractor,
+// variableConstraint.getRequiredDeclarations()[0] ) );
+// break;
+//
+// }
+// }
+// }
+// }
+//
+// if ( memory == null ) {
+// memory = new BetaMemory( new TupleHashTable(),
+// new FactHashTable() );
+// }
+//
+// return memory;
}
/**
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -22,7 +22,8 @@
import java.util.List;
import java.util.Map;
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.BetaConstraints;
+import org.drools.common.DefaultBetaConstraints;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.rule.Collect;
@@ -44,7 +45,7 @@
private final Collect collect;
private final AlphaNodeFieldConstraint[] resultConstraints;
- private final BetaNodeConstraints resultsBinder;
+ private final BetaConstraints resultsBinder;
/**
* Constructor.
@@ -66,8 +67,8 @@
leftInput,
rightInput,
new AlphaNodeFieldConstraint[0],
- new BetaNodeConstraints(),
- new BetaNodeConstraints(),
+ new DefaultBetaConstraints(),
+ new DefaultBetaConstraints(),
collect );
}
@@ -93,8 +94,8 @@
final TupleSource leftInput,
final ObjectSource rightInput,
final AlphaNodeFieldConstraint[] resultConstraints,
- final BetaNodeConstraints sourceBinder,
- final BetaNodeConstraints resultsBinder,
+ final BetaConstraints sourceBinder,
+ final BetaConstraints resultsBinder,
final Collect collect) {
super( id,
leftInput,
@@ -239,7 +240,7 @@
memory.add( workingMemory,
handle );
- final BetaNodeConstraints binder = constraints();
+ final BetaConstraints binder = constraints();
for ( final Iterator it = memory.leftTupleIterator( workingMemory,
handle ); it.hasNext(); ) {
final ReteTuple leftTuple = (ReteTuple) it.next();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -6,7 +6,8 @@
import org.drools.RuleBaseConfiguration;
import org.drools.common.BaseNode;
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.BetaConstraints;
+import org.drools.common.DefaultBetaConstraints;
import org.drools.common.DefaultFactHandle;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
@@ -28,19 +29,19 @@
private DataProvider dataProvider;
private TupleSource tupleSource;
private AlphaNodeFieldConstraint[] constraints;
- private BetaNodeConstraints binder;
+ private BetaConstraints binder;
public FromNode(final int id,
final DataProvider dataProvider,
final TupleSource tupleSource,
final AlphaNodeFieldConstraint[] constraints,
- final BetaNodeConstraints binder) {
+ final BetaConstraints binder) {
super( id );
this.dataProvider = dataProvider;
this.tupleSource = tupleSource;
this.constraints = constraints;
if ( binder == null ) {
- this.binder = new BetaNodeConstraints();
+ this.binder = new DefaultBetaConstraints();
} else {
this.binder = binder;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.BetaConstraints;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.spi.PropagationContext;
@@ -77,7 +77,7 @@
JoinNode(final int id,
final TupleSource leftInput,
final ObjectSource rightInput,
- final BetaNodeConstraints binder) {
+ final BetaConstraints binder) {
super( id,
leftInput,
rightInput,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -24,7 +24,7 @@
import org.drools.RuleBaseConfiguration;
import org.drools.common.BaseNode;
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.DefaultBetaConstraints;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.common.NodeMemory;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -21,8 +21,10 @@
import java.util.List;
import java.util.Map;
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.BetaConstraints;
+import org.drools.common.DefaultBetaConstraints;
import org.drools.common.DefaultFactHandle;
+import org.drools.common.EmptyBetaConstraints;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.spi.PropagationContext;
@@ -75,7 +77,7 @@
super( id,
leftInput,
rightInput,
- new BetaNodeConstraints() );
+ EmptyBetaConstraints.getInstance() );
}
/**
@@ -89,7 +91,7 @@
NotNode(final int id,
final TupleSource leftInput,
final ObjectSource rightInput,
- final BetaNodeConstraints joinNodeBinder) {
+ final BetaConstraints joinNodeBinder) {
super( id,
leftInput,
rightInput,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -33,9 +33,14 @@
import org.drools.base.ValueType;
import org.drools.base.evaluators.Operator;
import org.drools.common.BaseNode;
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.BetaConstraints;
+import org.drools.common.DefaultBetaConstraints;
+import org.drools.common.DoubleBetaConstraints;
+import org.drools.common.EmptyBetaConstraints;
import org.drools.common.InstanceEqualsConstraint;
import org.drools.common.InstanceNotEqualsConstraint;
+import org.drools.common.SingleBetaConstraints;
+import org.drools.common.TripleBetaConstraints;
import org.drools.rule.Accumulate;
import org.drools.rule.And;
import org.drools.rule.Collect;
@@ -249,7 +254,7 @@
continue;
}
- BetaNodeConstraints binder = null;
+ BetaConstraints binder = null;
Column column = null;
if ( object instanceof Column ) {
@@ -362,7 +367,7 @@
alphaNodeSource ) );
}
- private BetaNodeConstraints attachColumn(final Column column,
+ private BetaConstraints attachColumn(final Column column,
final GroupElement parent,
final boolean removeIdentities) throws InvalidPatternException {
// Adjusting offset in case a previous Initial-Fact was added to the network
@@ -379,14 +384,8 @@
final List predicates = attachAlphaNodes( column,
removeIdentities );
- BetaNodeConstraints binder;
-
- if ( !predicates.isEmpty() ) {
- binder = new BetaNodeConstraints( (BetaNodeFieldConstraint[]) predicates.toArray( new BetaNodeFieldConstraint[predicates.size()] ) );
- } else {
- binder = new BetaNodeConstraints();
- }
-
+ BetaConstraints binder = createBetaNodeConstraint( predicates );
+
return binder;
}
@@ -398,7 +397,7 @@
column.getObjectType(),
this.rete ) );
- final List predicateConstraints = new ArrayList();
+ final List betaConstraints = new ArrayList();
if ( removeIdentities && column.getObjectType().getClass() == ClassObjectType.class ) {
// Check if this object type exists before
@@ -408,7 +407,7 @@
final Map.Entry entry = (Map.Entry) it.next();
final Class previousClass = ((ClassObjectType) entry.getKey()).getClassType();
if ( thisClass.isAssignableFrom( previousClass ) ) {
- predicateConstraints.add( new InstanceNotEqualsConstraint( (Column) entry.getValue()) );
+ betaConstraints.add( new InstanceNotEqualsConstraint( (Column) entry.getValue()) );
}
}
@@ -435,17 +434,17 @@
this.objectSource ) );
} else {
checkUnboundDeclarations( ((BetaNodeFieldConstraint) constraint).getRequiredDeclarations() );
- predicateConstraints.add( (BetaNodeFieldConstraint) constraint );
+ betaConstraints.add( (BetaNodeFieldConstraint) constraint );
}
}
- return predicateConstraints;
+ return betaConstraints;
}
private void attachNot(final TupleSource tupleSource,
final Not not,
final ObjectSource ObjectSource,
- final BetaNodeConstraints binder,
+ final BetaConstraints binder,
final Column column) {
final NotNode notNode = (NotNode) attachNode( new NotNode( this.id++,
tupleSource,
@@ -459,7 +458,7 @@
attachNot( tupleSource,
(Not) not.getChild(),
adapter,
- new BetaNodeConstraints(),
+ EmptyBetaConstraints.getInstance(),
column );
} else if ( not.getChild() instanceof Exists ) {
final RightInputAdapterNode adapter = (RightInputAdapterNode) attachNode( new RightInputAdapterNode( this.id++,
@@ -468,7 +467,7 @@
attachExists( tupleSource,
(Exists) not.getChild(),
adapter,
- new BetaNodeConstraints(),
+ EmptyBetaConstraints.getInstance(),
column );
} else {
this.tupleSource = notNode;
@@ -478,7 +477,7 @@
private void attachExists(final TupleSource tupleSource,
final Exists exists,
final ObjectSource ObjectSource,
- final BetaNodeConstraints binder,
+ final BetaConstraints binder,
final Column column) {
NotNode notNode = (NotNode) attachNode( new NotNode( this.id++,
tupleSource,
@@ -488,7 +487,7 @@
column.getFactIndex(),
notNode ) );
- BetaNodeConstraints identityBinder = new BetaNodeConstraints( new InstanceEqualsConstraint( column ) );
+ BetaConstraints identityBinder = new DefaultBetaConstraints( new InstanceEqualsConstraint( column ) );
notNode = (NotNode) attachNode( new NotNode( this.id++,
tupleSource,
adapter,
@@ -501,7 +500,7 @@
attachNot( tupleSource,
(Not) exists.getChild(),
adapter,
- new BetaNodeConstraints(),
+ EmptyBetaConstraints.getInstance(),
column );
} else if ( exists.getChild() instanceof Exists ) {
adapter = (RightInputAdapterNode) attachNode( new RightInputAdapterNode( this.id++,
@@ -510,7 +509,7 @@
attachExists( tupleSource,
(Exists) exists.getChild(),
adapter,
- new BetaNodeConstraints(),
+ EmptyBetaConstraints.getInstance(),
column );
} else {
this.tupleSource = notNode;
@@ -586,8 +585,8 @@
declaration );
}
- final List predicateConstraints = new ArrayList();
- final List alphaNodeConstraints = new ArrayList();
+ final List betaConstraints = new ArrayList();
+ final List alphaConstraints = new ArrayList();
for ( final Iterator it = constraints.iterator(); it.hasNext(); ) {
final Object object = it.next();
@@ -602,25 +601,19 @@
final AlphaNodeFieldConstraint fieldConstraint = (AlphaNodeFieldConstraint) object;
if ( fieldConstraint instanceof LiteralConstraint ) {
- alphaNodeConstraints.add( fieldConstraint );
+ alphaConstraints.add( fieldConstraint );
} else {
checkUnboundDeclarations( fieldConstraint.getRequiredDeclarations() );
- predicateConstraints.add( fieldConstraint );
+ betaConstraints.add( fieldConstraint );
}
}
- BetaNodeConstraints binder;
+ BetaConstraints binder = createBetaNodeConstraint( betaConstraints );
- if ( !predicateConstraints.isEmpty() ) {
- binder = new BetaNodeConstraints( (BetaNodeFieldConstraint[]) predicateConstraints.toArray( new BetaNodeFieldConstraint[predicateConstraints.size()] ) );
- } else {
- binder = new BetaNodeConstraints();
- }
-
this.tupleSource = attachNode( new FromNode( id++,
from.getDataProvider(),
this.tupleSource,
- (AlphaNodeFieldConstraint[]) alphaNodeConstraints.toArray( new AlphaNodeFieldConstraint[alphaNodeConstraints.size()] ),
+ (AlphaNodeFieldConstraint[]) alphaConstraints.toArray( new AlphaNodeFieldConstraint[alphaConstraints.size()] ),
binder ) );
}
@@ -643,7 +636,7 @@
}
final Column sourceColumn = accumulate.getSourceColumn();
- final BetaNodeConstraints sourceBinder = attachColumn( sourceColumn,
+ final BetaConstraints sourceBinder = attachColumn( sourceColumn,
parent,
true );
@@ -661,8 +654,8 @@
declaration );
}
- final List predicateConstraints = new ArrayList();
- final List alphaNodeConstraints = new ArrayList();
+ final List betaConstraints = new ArrayList();
+ final List alphaConstraints = new ArrayList();
for ( final Iterator it = constraints.iterator(); it.hasNext(); ) {
final Object object = it.next();
@@ -677,24 +670,19 @@
final AlphaNodeFieldConstraint fieldConstraint = (AlphaNodeFieldConstraint) object;
if ( fieldConstraint instanceof LiteralConstraint ) {
- alphaNodeConstraints.add( fieldConstraint );
+ alphaConstraints.add( fieldConstraint );
} else {
checkUnboundDeclarations( fieldConstraint.getRequiredDeclarations() );
- predicateConstraints.add( fieldConstraint );
+ betaConstraints.add( fieldConstraint );
}
}
- BetaNodeConstraints resultsBinder = null;
- if ( !predicateConstraints.isEmpty() ) {
- resultsBinder = new BetaNodeConstraints( (BetaNodeFieldConstraint[]) predicateConstraints.toArray( new BetaNodeFieldConstraint[predicateConstraints.size()] ) );
- } else {
- resultsBinder = new BetaNodeConstraints();
- }
+ BetaConstraints resultsBinder = createBetaNodeConstraint( betaConstraints );
this.tupleSource = attachNode( new AccumulateNode( id++,
this.tupleSource,
this.objectSource,
- (AlphaNodeFieldConstraint[]) alphaNodeConstraints.toArray( new AlphaNodeFieldConstraint[alphaNodeConstraints.size()] ),
+ (AlphaNodeFieldConstraint[]) alphaConstraints.toArray( new AlphaNodeFieldConstraint[alphaConstraints.size()] ),
sourceBinder,
resultsBinder,
accumulate ) );
@@ -718,7 +706,7 @@
}
final Column sourceColumn = collect.getSourceColumn();
- final BetaNodeConstraints sourceBinder = attachColumn( sourceColumn,
+ final BetaConstraints sourceBinder = attachColumn( sourceColumn,
parent,
true );
@@ -736,8 +724,8 @@
declaration );
}
- final List predicateConstraints = new ArrayList();
- final List alphaNodeConstraints = new ArrayList();
+ final List betaConstraints = new ArrayList();
+ final List alphaConstraints = new ArrayList();
for ( final Iterator it = constraints.iterator(); it.hasNext(); ) {
final Object object = it.next();
@@ -752,24 +740,19 @@
final AlphaNodeFieldConstraint fieldConstraint = (AlphaNodeFieldConstraint) object;
if ( fieldConstraint instanceof LiteralConstraint ) {
- alphaNodeConstraints.add( fieldConstraint );
+ alphaConstraints.add( fieldConstraint );
} else {
checkUnboundDeclarations( fieldConstraint.getRequiredDeclarations() );
- predicateConstraints.add( fieldConstraint );
+ betaConstraints.add( fieldConstraint );
}
}
- BetaNodeConstraints resultsBinder = null;
- if ( !predicateConstraints.isEmpty() ) {
- resultsBinder = new BetaNodeConstraints( (BetaNodeFieldConstraint[]) predicateConstraints.toArray( new BetaNodeFieldConstraint[predicateConstraints.size()] ) );
- } else {
- resultsBinder = new BetaNodeConstraints();
- }
+ BetaConstraints resultsBinder = createBetaNodeConstraint( betaConstraints );
this.tupleSource = attachNode( new CollectNode( id++,
this.tupleSource,
this.objectSource,
- (AlphaNodeFieldConstraint[]) alphaNodeConstraints.toArray( new AlphaNodeFieldConstraint[alphaNodeConstraints.size()] ),
+ (AlphaNodeFieldConstraint[]) alphaConstraints.toArray( new AlphaNodeFieldConstraint[alphaConstraints.size()] ),
sourceBinder,
resultsBinder,
collect ) );
@@ -842,7 +825,27 @@
throw new InvalidPatternException( "Required Declarations not bound: '" + buffer );
}
-
}
+
+ public static BetaConstraints createBetaNodeConstraint(List list){
+ BetaConstraints constraints;
+ switch (list.size()) {
+ case 0:
+ constraints = EmptyBetaConstraints.getInstance();
+ break;
+ case 1:
+ constraints = new SingleBetaConstraints( (BetaNodeFieldConstraint) list.get( 0 ) );
+ break;
+ case 2:
+ constraints = new DoubleBetaConstraints( (BetaNodeFieldConstraint[]) list.toArray( new BetaNodeFieldConstraint[list.size()] ) );
+ break;
+ case 3:
+ constraints = new TripleBetaConstraints( (BetaNodeFieldConstraint[]) list.toArray( new BetaNodeFieldConstraint[list.size()] ) );
+ break;
+ default:
+ constraints = new DefaultBetaConstraints( (BetaNodeFieldConstraint[]) list.toArray( new BetaNodeFieldConstraint[list.size()] ) );
+ }
+ return constraints;
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -21,7 +21,7 @@
import java.util.List;
import org.drools.common.BaseNode;
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.DefaultBetaConstraints;
import org.drools.common.DefaultFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.spi.PropagationContext;
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -22,7 +22,7 @@
import org.drools.DroolsTestCase;
import org.drools.RuleBaseFactory;
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.DefaultBetaConstraints;
import org.drools.common.DefaultFactHandle;
import org.drools.common.InternalFactHandle;
import org.drools.common.PropagationContextImpl;
@@ -64,7 +64,7 @@
this.node = new JoinNode( 15,
this.tupleSource,
this.objectSource,
- new BetaNodeConstraints( new AlphaNodeFieldConstraint[]{this.constraint} ) );
+ new DefaultBetaConstraints( new AlphaNodeFieldConstraint[]{this.constraint} ) );
this.node.addTupleSink( this.sink );
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/NotNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/NotNodeTest.java 2006-10-12 11:41:24 UTC (rev 6752)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/NotNodeTest.java 2006-10-12 12:04:00 UTC (rev 6753)
@@ -24,7 +24,7 @@
import org.drools.DroolsTestCase;
import org.drools.FactException;
import org.drools.RuleBaseFactory;
-import org.drools.common.BetaNodeConstraints;
+import org.drools.common.DefaultBetaConstraints;
import org.drools.common.DefaultFactHandle;
import org.drools.common.PropagationContextImpl;
import org.drools.rule.Rule;
@@ -60,7 +60,7 @@
this.node = new NotNode( 15,
new MockTupleSource( 5 ),
new MockObjectSource( 8 ),
- new BetaNodeConstraints( this.constraint ) );
+ new DefaultBetaConstraints( this.constraint ) );
this.sink = new MockTupleSink();
this.node.addTupleSink( this.sink );
More information about the jboss-svn-commits
mailing list