[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