[jboss-svn-commits] JBL Code SVN: r12982 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools: common and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Jul 1 20:26:56 EDT 2007
Author: mark.proctor at jboss.com
Date: 2007-07-01 20:26:56 -0400 (Sun, 01 Jul 2007)
New Revision: 12982
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactList.java
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroup.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/QuadroupleBetaConstraints.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FactHandleMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/Iterator.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedList.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/TupleIndexHashTable.java
Log:
JBRULES-947 sequential rete
-We now optimise to use a LinkedList if the FactHandle is not indexed, as we don't need to remove the handle this is faster.
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 2007-07-01 23:50:28 UTC (rev 12981)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -408,7 +408,8 @@
public AgendaGroupFactory getAgendaGroupFactory() {
if ( isSequential() ) {
- return ArrayAgendaGroupFactory.getInstance();
+ //return ArrayAgendaGroupFactory.getInstance();
+ return PriorityQueueAgendaGroupFactory.getInstance();
} else {
return PriorityQueueAgendaGroupFactory.getInstance();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroup.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroup.java 2007-07-01 23:50:28 UTC (rev 12981)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroup.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -21,6 +21,7 @@
import org.drools.spi.AgendaGroup;
import org.drools.spi.ConflictResolver;
import org.drools.util.BinaryHeapQueue;
+import org.drools.util.Iterator;
import org.drools.util.LinkedList;
import org.drools.util.LinkedListEntry;
import org.drools.util.PrimitiveLongMap;
@@ -149,7 +150,7 @@
for ( int i = 0; i < this.array.length; i++ ) {;
LinkedList list = this.array[i];
if ( list != null ) {
- LinkedListIterator it = list.iterator();
+ Iterator it = list.iterator();
Activation activation = ( Activation ) ((LinkedListEntry)it.next()).getObject();
while ( activation != null) {
activations[j++] = activation;
Modified: 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 2007-07-01 23:50:28 UTC (rev 12981)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -32,6 +32,7 @@
import org.drools.spi.Constraint;
import org.drools.util.FactHashTable;
import org.drools.util.FactHandleIndexHashTable;
+import org.drools.util.FactList;
import org.drools.util.LinkedList;
import org.drools.util.LinkedListEntry;
import org.drools.util.TupleHashTable;
@@ -195,7 +196,7 @@
return false;
}
- public BetaMemory createBetaMemory(RuleBaseConfiguration conf) {
+ public BetaMemory createBetaMemory(RuleBaseConfiguration config) {
BetaMemory memory;
if ( this.indexed > 0 ) {
LinkedListEntry entry = (LinkedListEntry) this.constraints.getFirst();
@@ -213,23 +214,23 @@
final FieldIndex[] indexes = (FieldIndex[]) list.toArray( new FieldIndex[list.size()] );
TupleMemory tupleMemory;
- if ( conf.isIndexLeftBetaMemory() ) {
+ if ( config.isIndexLeftBetaMemory() ) {
tupleMemory = new TupleIndexHashTable( indexes );
} else {
tupleMemory = new TupleHashTable();
}
FactHandleMemory factHandleMemory;
- if ( conf.isIndexRightBetaMemory() ) {
+ if ( config.isIndexRightBetaMemory() ) {
factHandleMemory = new FactHandleIndexHashTable( indexes );
} else {
- factHandleMemory = new FactHashTable();
+ factHandleMemory = config.isSequential() ? (FactHandleMemory) new FactList() : (FactHandleMemory) new FactHashTable();
}
- memory = new BetaMemory( conf.isSequential() ? null : tupleMemory,
+ memory = new BetaMemory( config.isSequential() ? null : tupleMemory,
factHandleMemory );
} else {
- memory = new BetaMemory( conf.isSequential() ? null : new TupleHashTable(),
- new FactHashTable() );
+ memory = new BetaMemory( config.isSequential() ? null : new TupleHashTable(),
+ config.isSequential() ? (FactHandleMemory) new FactList() : (FactHandleMemory) new FactHashTable() );
}
return memory;
Modified: 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 2007-07-01 23:50:28 UTC (rev 12981)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -31,6 +31,7 @@
import org.drools.spi.BetaNodeFieldConstraint;
import org.drools.util.FactHashTable;
import org.drools.util.FactHandleIndexHashTable;
+import org.drools.util.FactList;
import org.drools.util.LinkedList;
import org.drools.util.LinkedListEntry;
import org.drools.util.TupleHashTable;
@@ -199,13 +200,13 @@
if ( config.isIndexRightBetaMemory() ) {
factHandleMemory = new FactHandleIndexHashTable( indexes );
} else {
- factHandleMemory = new FactHashTable();
+ factHandleMemory = config.isSequential() ? (FactHandleMemory) new FactList() : (FactHandleMemory) new FactHashTable();
}
memory = new BetaMemory( config.isSequential() ? null : tupleMemory,
factHandleMemory );
} else {
memory = new BetaMemory( config.isSequential() ? null : new TupleHashTable(),
- new FactHashTable() );
+ config.isSequential() ? (FactHandleMemory) new FactList() : (FactHandleMemory) new FactHashTable() );
}
return memory;
Modified: 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 2007-07-01 23:50:28 UTC (rev 12981)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -20,8 +20,10 @@
import org.drools.RuleBaseConfiguration;
import org.drools.reteoo.BetaMemory;
+import org.drools.reteoo.FactHandleMemory;
import org.drools.reteoo.ReteTuple;
import org.drools.util.FactHashTable;
+import org.drools.util.FactList;
import org.drools.util.LinkedList;
import org.drools.util.TupleHashTable;
@@ -82,7 +84,7 @@
public BetaMemory createBetaMemory(final RuleBaseConfiguration config) {
final BetaMemory memory = new BetaMemory( config.isSequential() ? null : new TupleHashTable(),
- new FactHashTable() );
+ config.isSequential() ? (FactHandleMemory) new FactList() : (FactHandleMemory) new FactHashTable() );
return memory;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java 2007-07-01 23:50:28 UTC (rev 12981)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -31,6 +31,7 @@
import org.drools.spi.BetaNodeFieldConstraint;
import org.drools.util.FactHashTable;
import org.drools.util.FactHandleIndexHashTable;
+import org.drools.util.FactList;
import org.drools.util.LinkedList;
import org.drools.util.LinkedListEntry;
import org.drools.util.TupleHashTable;
@@ -287,13 +288,13 @@
if ( conf.isIndexRightBetaMemory() ) {
factHandleMemory = new FactHandleIndexHashTable( indexes );
} else {
- factHandleMemory = new FactHashTable();
+ factHandleMemory = conf.isSequential() ? (FactHandleMemory) new FactList() : (FactHandleMemory) new FactHashTable();
}
memory = new BetaMemory( conf.isSequential() ? null : tupleMemory,
factHandleMemory );
} else {
memory = new BetaMemory( conf.isSequential() ? null : new TupleHashTable(),
- new FactHashTable() );
+ conf.isSequential() ? (FactHandleMemory) new FactList() : (FactHandleMemory) new FactHashTable() );
}
return memory;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java 2007-07-01 23:50:28 UTC (rev 12981)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -19,6 +19,7 @@
import org.drools.ruleflow.instance.RuleFlowNodeInstance;
import org.drools.ruleflow.instance.impl.RuleFlowSequenceNodeInstanceImpl;
import org.drools.spi.Activation;
+import org.drools.util.Iterator;
import org.drools.util.LinkedList;
import org.drools.util.LinkedList.LinkedListIterator;
@@ -90,7 +91,7 @@
((EventSupport) this.workingMemory).getRuleFlowEventSupport()
.fireRuleFlowGroupActivated(this);
} else {
- final LinkedListIterator it = this.list.iterator();
+ final Iterator it = this.list.iterator();
for ( RuleFlowGroupNode node = (RuleFlowGroupNode) it.next(); node != null; node = (RuleFlowGroupNode) it.next() ) {
final Activation activation = node.getActivation();
activation.remove();
@@ -120,7 +121,7 @@
private void triggerActivations() {
// iterate all activations adding them to their AgendaGroups
- final LinkedListIterator it = this.list.iterator();
+ final Iterator it = this.list.iterator();
for ( RuleFlowGroupNode node = (RuleFlowGroupNode) it.next(); node != null; node = (RuleFlowGroupNode) it.next() ) {
final Activation activation = node.getActivation();
((BinaryHeapQueueAgendaGroup) activation.getAgendaGroup()).add( activation );
@@ -128,7 +129,7 @@
}
public void clear() {
- final LinkedListIterator it = this.list.iterator();
+ final Iterator it = this.list.iterator();
for ( RuleFlowGroupNode node = (RuleFlowGroupNode) it.next(); node != null; node = (RuleFlowGroupNode) it.next() ) {
node.getActivation().remove();
}
Modified: 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 2007-07-01 23:50:28 UTC (rev 12981)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -31,6 +31,7 @@
import org.drools.spi.BetaNodeFieldConstraint;
import org.drools.util.FactHashTable;
import org.drools.util.FactHandleIndexHashTable;
+import org.drools.util.FactList;
import org.drools.util.LinkedList;
import org.drools.util.LinkedListEntry;
import org.drools.util.TupleHashTable;
@@ -241,13 +242,13 @@
if ( conf.isIndexRightBetaMemory() ) {
factHandleMemory = new FactHandleIndexHashTable( indexes );
} else {
- factHandleMemory = new FactHashTable();
+ factHandleMemory = conf.isSequential() ? (FactHandleMemory) new FactList() : (FactHandleMemory) new FactHashTable();
}
memory = new BetaMemory( conf.isSequential() ? null : tupleMemory,
factHandleMemory );
} else {
memory = new BetaMemory( conf.isSequential() ? null : new TupleHashTable(),
- new FactHashTable() );
+ conf.isSequential() ? (FactHandleMemory) new FactList() : (FactHandleMemory) new FactHashTable() );
}
return memory;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FactHandleMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FactHandleMemory.java 2007-07-01 23:50:28 UTC (rev 12981)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FactHandleMemory.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -22,6 +22,6 @@
public int size();
- public Entry[] getTable();
+// public Entry[] getTable();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java 2007-07-01 23:50:28 UTC (rev 12981)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -239,7 +239,7 @@
/* (non-Javadoc)
* @see org.drools.util.Iterator#next()
*/
- public Entry next() {
+ public Object next() {
if ( this.entry == null ) {
// keep skipping rows until we come to the end, or find one that is populated
while ( this.entry == null ) {
@@ -252,7 +252,7 @@
} else {
this.entry = this.entry.getNext();
if ( this.entry == null ) {
- this.entry = next();
+ this.entry = (Entry) next();
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java 2007-07-01 23:50:28 UTC (rev 12981)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -102,7 +102,7 @@
/* (non-Javadoc)
* @see org.drools.util.Iterator#next()
*/
- public Entry next() {
+ public Object next() {
final Entry current = this.entry;
this.entry = (this.entry != null) ? this.entry.getNext() : null;
return current;
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactList.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactList.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactList.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -0,0 +1,68 @@
+/**
+ *
+ */
+package org.drools.util;
+
+import org.drools.common.InternalFactHandle;
+import org.drools.reteoo.FactHandleMemory;
+import org.drools.reteoo.ReteTuple;
+
+public class FactList
+ implements
+ FactHandleMemory {
+ private static final long serialVersionUID = 320L;
+
+ private final LinkedList list;
+
+ public FactList() {
+ this.list = new LinkedList();
+ }
+
+ public Iterator iterator(final ReteTuple tuple) {
+ return iterator();
+ }
+
+ public boolean add(final InternalFactHandle handle) {
+ return add( handle,
+ true );
+ }
+
+ public boolean add(final InternalFactHandle handle,
+ final boolean checkExists) {
+ this.list.add( new LinkedListEntry( handle ) );
+ return true;
+ }
+
+ public boolean contains(final InternalFactHandle handle) {
+ Iterator it = this.list.iterator();
+ for ( Object object = it.next(); object != null; object = it.next() ) {
+ if ( handle.equals( ((LinkedListEntry)object).getObject() ) ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean remove(final InternalFactHandle handle) {
+ Iterator it = this.list.iterator();
+ for ( Object object = it.next(); object != null; object = it.next() ) {
+ if ( handle.equals( ((LinkedListEntry)object).getObject() ) ) {
+ this.list.remove( (LinkedListEntry)object );
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public Iterator iterator() {
+ return this.list.iterator();
+ }
+
+ public int size() {
+ return this.list.size();
+ }
+
+ public boolean isIndexed() {
+ return false;
+ }
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/Iterator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/Iterator.java 2007-07-01 23:50:28 UTC (rev 12981)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/Iterator.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -5,5 +5,5 @@
public interface Iterator
extends
Serializable {
- public Entry next();
+ public Object next();
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedList.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedList.java 2007-07-01 23:50:28 UTC (rev 12981)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedList.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -253,7 +253,7 @@
return true;
}
- public LinkedListIterator iterator() {
+ public Iterator iterator() {
this.iterator.reset( this );
return this.iterator;
}
@@ -268,6 +268,7 @@
*/
public class LinkedListIterator
implements
+ Iterator,
Serializable {
private LinkedList list;
private LinkedListNode current;
@@ -277,7 +278,7 @@
this.current = this.list.firstNode;
}
- public LinkedListNode next() {
+ public Object next() {
if ( this.current == null ) {
return null;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/TupleIndexHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/TupleIndexHashTable.java 2007-07-01 23:50:28 UTC (rev 12981)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/TupleIndexHashTable.java 2007-07-02 00:26:56 UTC (rev 12982)
@@ -106,7 +106,7 @@
/* (non-Javadoc)
* @see org.drools.util.Iterator#next()
*/
- public Entry next() {
+ public Object next() {
final Entry current = this.entry;
this.entry = (this.entry != null) ? this.entry.getNext() : null;
return current;
@@ -136,7 +136,7 @@
/* (non-Javadoc)
* @see org.drools.util.Iterator#next()
*/
- public Entry next() {
+ public Object next() {
if ( this.entry == null ) {
// keep skipping rows until we come to the end, or find one that is populated
while ( this.entry == null ) {
@@ -149,7 +149,7 @@
} else {
this.entry = this.entry.getNext();
if ( this.entry == null ) {
- this.entry = next();
+ this.entry = (Entry) next();
}
}
More information about the jboss-svn-commits
mailing list