[jboss-svn-commits] JBL Code SVN: r6747 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/base/evaluators main/java/org/drools/common main/java/org/drools/reteoo main/java/org/drools/rule main/java/org/drools/spi test/java/org/drools/examples/manners

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Oct 11 14:08:25 EDT 2006


Author: mark.proctor at jboss.com
Date: 2006-10-11 14:08:10 -0400 (Wed, 11 Oct 2006)
New Revision: 6747

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaNodeConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.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/NotNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ContextEntry.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java
Log:
JBRULES-498 Optimised HashMap implementations
-Improved the  caching context, so it only caches the left or  the right.

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java	2006-10-11 15:52:39 UTC (rev 6746)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java	2006-10-11 18:08:10 UTC (rev 6747)
@@ -72,6 +72,8 @@
 
         public boolean evaluate(final Object object1,
                                 final Object object2) {
+//            return ((Integer) object1).intValue() == ((Integer) object2).intValue(); 
+            
             if ( object1 == null ) {
                 return object2 == null;
             }
@@ -97,6 +99,7 @@
 
         public boolean evaluate(final Object object1,
                                 final Object object2) {
+//            return ((Integer) object1).intValue() != ((Integer) object2).intValue();             
             if ( object1 == null ) {
                 return (object2 != null);
             }

Modified: 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 15:52:39 UTC (rev 6746)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaNodeConstraints.java	2006-10-11 18:08:10 UTC (rev 6747)
@@ -22,6 +22,7 @@
 
 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;
@@ -51,10 +52,10 @@
 
     public final static BetaNodeConstraints emptyBetaNodeConstraints = new BetaNodeConstraints();
 
-    private final LinkedList         constraints;
-    
-    private ContextEntry         contexts;
+    private final LinkedList                constraints;
 
+    private ContextEntry                    contexts;
+
     public BetaNodeConstraints() {
         this.constraints = null;
         this.contexts = null;
@@ -65,61 +66,78 @@
     }
 
     public BetaNodeConstraints(final BetaNodeFieldConstraint[] constraints) {
-        this.constraints =  new  LinkedList();
-        ContextEntry current  = null;
-        for ( int  i  = 0, length = constraints.length; i < length; i++ ) {
+        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 )  {
+            if ( current == null ) {
                 current = context;
                 this.contexts = context;
             } else {
-                current.setNext( context );    
+                current.setNext( context );
             }
             current = context;
-        }             
+        }
     }
-    
+
     public void updateFromTuple(ReteTuple tuple) {
-        for( ContextEntry context = this.contexts; context != null; context = context.getNext() )  {
+        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() )  {
+        for ( ContextEntry context = this.contexts; context != null; context = context.getNext() ) {
             context.updateFromFactHandle( handle );
-        }                
+        }
     }
-
-    public boolean isAllowed() {
+    
+    public boolean isAllowedCachedLeft(Object object ) {       
         if ( this.constraints == null ) {
             return true;
         }
-              
-        LinkedListEntry entry = ( LinkedListEntry ) this.constraints.getFirst();
+
+        LinkedListEntry entry = (LinkedListEntry) this.constraints.getFirst();
         ContextEntry context = this.contexts;
-        while( entry != null )  {
-            if ( !((BetaNodeFieldConstraint) entry.getObject()).isAllowed( context ) ) {
+        while ( entry != null ) {
+            if ( !((BetaNodeFieldConstraint) entry.getObject()).isAllowedCachedLeft(context, object ) ) {
                 return false;
-            }            
-            entry = ( LinkedListEntry ) entry.getNext() ;
+            }
+            entry = (LinkedListEntry) entry.getNext();
             context = context.getNext();
         }
-        return true;
+        return true;        
     }    
+    
+    public boolean isAllowedCachedRight(ReteTuple tuple) {
+        if ( this.constraints == null ) {
+            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;
-//    }
+        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();
     }
@@ -155,8 +173,8 @@
         if ( this.constraints.size() != other.constraints.size() ) {
             return false;
         }
-        
+
         return this.constraints.equals( other );
     }
-    
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java	2006-10-11 15:52:39 UTC (rev 6746)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java	2006-10-11 18:08:10 UTC (rev 6747)
@@ -17,6 +17,7 @@
 package org.drools.common;
 
 import org.drools.WorkingMemory;
+import org.drools.common.InstanceNotEqualsConstraint.InstanceNotEqualsConstraintContextEntry;
 import org.drools.reteoo.ReteTuple;
 import org.drools.rule.Column;
 import org.drools.rule.ContextEntry;
@@ -61,10 +62,13 @@
         return new InstanceEqualsConstraintContextEntry( this.otherColumn  );
     }
     
-    public boolean isAllowed(final ContextEntry entry) {
-        InstanceEqualsConstraintContextEntry context = (InstanceEqualsConstraintContextEntry) entry;
-        return context.left == context.right;
-    }
+    public boolean isAllowedCachedLeft(ContextEntry context, Object object ) {
+        return ((InstanceNotEqualsConstraintContextEntry)context).left == object;
+    }    
+    
+    public boolean isAllowedCachedRight(ReteTuple tuple, ContextEntry context) {
+        return tuple.get( this.otherColumn.getFactIndex()).getObject() == ((InstanceNotEqualsConstraintContextEntry)context).right ;        
+    }      
 
     public String toString() {
         return "[InstanceEqualsConstraint otherColumn=" + this.otherColumn + " ]";
@@ -107,13 +111,13 @@
             this.entry = entry;
         }
         
+        public void updateFromTuple(ReteTuple tuple) {
+            this.left =  tuple.get( this.column.getFactIndex() ).getObject();            
+        }           
+        
         public void updateFromFactHandle(InternalFactHandle handle) {
-            this.left = handle.getObject();
+            this.right = handle.getObject();
             
-        }
-        
-        public void updateFromTuple(ReteTuple tuple) {
-            this.right =  tuple.get( this.column.getFactIndex() );            
-        }                
+        }                    
     }    
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java	2006-10-11 15:52:39 UTC (rev 6746)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java	2006-10-11 18:08:10 UTC (rev 6747)
@@ -28,13 +28,13 @@
 
 public class InstanceNotEqualsConstraint
     implements
-    BetaNodeFieldConstraint { 
+    BetaNodeFieldConstraint {
 
-    private static final long serialVersionUID = 320L;
+    private static final long   serialVersionUID = 320L;
 
-    private final Declaration[] declarations     = new Declaration[0];
+    private static final Declaration[] declarations     = new Declaration[0];
 
-    private Column                 otherColumn;
+    private Column              otherColumn;
 
     public InstanceNotEqualsConstraint(final Column otherColumn) {
         this.otherColumn = otherColumn;
@@ -43,20 +43,30 @@
     public Declaration[] getRequiredDeclarations() {
         return this.declarations;
     }
-    
+
     public Column getOtherColumn() {
         return this.otherColumn;
     }
-    
+
     public ContextEntry getContextEntry() {
-        return new InstanceNotEqualsConstraintContextEntry( this.otherColumn  );
+        return new InstanceNotEqualsConstraintContextEntry( this.otherColumn );
     }
-    
+
     public boolean isAllowed(final ContextEntry entry) {
         InstanceNotEqualsConstraintContextEntry context = (InstanceNotEqualsConstraintContextEntry) entry;
         return context.left != context.right;
     }
 
+    public boolean isAllowedCachedLeft(ContextEntry context,
+                                       Object object) {
+        return ((InstanceNotEqualsConstraintContextEntry) context).left != object;
+    }
+
+    public boolean isAllowedCachedRight(ReteTuple tuple,
+                                        ContextEntry context) {
+        return tuple.get( this.otherColumn.getFactIndex() ).getObject() != ((InstanceNotEqualsConstraintContextEntry) context).right;
+    }
+
     public String toString() {
         return "[InstanceEqualsConstraint otherColumn=" + this.otherColumn + " ]";
     }
@@ -78,34 +88,35 @@
         return this.otherColumn.equals( other.otherColumn );
     }
 
-    public static class InstanceNotEqualsConstraintContextEntry implements ContextEntry {
-        public Object left;
-        public Object right;        
-        
-        private Column column;
+    public static class InstanceNotEqualsConstraintContextEntry
+        implements
+        ContextEntry {
+        public Object        left;
+        public Object        right;
+
+        private Column       column;
         private ContextEntry entry;
-        
-        
+
         public InstanceNotEqualsConstraintContextEntry(Column column) {
             this.column = column;
         }
-        
+
         public ContextEntry getNext() {
             return this.entry;
         }
-        
-        public void setNext(ContextEntry  entry) {
+
+        public void setNext(ContextEntry entry) {
             this.entry = entry;
         }
+
+        public void updateFromTuple(ReteTuple tuple) {
+            this.left = tuple.get( this.column.getFactIndex() ).getObject();
+        }
         
         public void updateFromFactHandle(InternalFactHandle handle) {
-            this.left = handle.getObject();
-            
+            this.right = handle.getObject();
+
         }
-        
-        public void updateFromTuple(ReteTuple tuple) {
-            this.right =  tuple.get( this.column.getFactIndex() );            
-        }                
-    }  
+    }
 
 }
\ No newline at end of file

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-11 15:52:39 UTC (rev 6746)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2006-10-11 18:08:10 UTC (rev 6747)
@@ -107,13 +107,12 @@
                             final InternalWorkingMemory workingMemory) {
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
         memory.getTupleMemory().add( leftTuple );
-        Iterator it = memory.getObjectMemory().iterator( leftTuple );
         
+        Iterator it = memory.getObjectMemory().iterator( leftTuple );        
         this.constraints.updateFromTuple( leftTuple );
         for ( FactEntry entry = ( FactEntry ) it.next(); entry != null; entry = ( FactEntry ) it.next() ) {
             InternalFactHandle handle = entry.getFactHandle();
-            this.constraints.updateFromFactHandle( handle );
-            if ( this.constraints.isAllowed() ) {
+            if ( this.constraints.isAllowedCachedLeft(handle.getObject()) ) {
                 sink.propagateAssertTuple( leftTuple, handle, context, workingMemory );
             }
         }        
@@ -146,8 +145,7 @@
         Iterator it = memory.getTupleMemory().iterator();
         this.constraints.updateFromFactHandle( handle );
         for ( ReteTuple tuple = ( ReteTuple ) it.next(); tuple != null; tuple = ( ReteTuple ) it.next() ) {
-            this.constraints.updateFromTuple( tuple );
-            if ( this.constraints.isAllowed( ) ) {
+            if ( this.constraints.isAllowedCachedRight( tuple ) ) {
                 sink.propagateAssertTuple( tuple, handle, context, workingMemory );
             }
         }
@@ -173,8 +171,11 @@
         }
         
         Iterator it = memory.getTupleMemory().iterator();
+        this.constraints.updateFromFactHandle( handle );
         for ( ReteTuple tuple = ( ReteTuple ) it.next(); tuple != null; tuple = ( ReteTuple ) it.next() ) {
-            sink.propagateRetractTuple( tuple, handle, context, workingMemory );
+            if ( this.constraints.isAllowedCachedRight( tuple ) ) {
+                sink.propagateRetractTuple( tuple, handle, context, workingMemory );
+            }
         }
     }
 
@@ -201,8 +202,12 @@
         }
         
         Iterator it = memory.getObjectMemory().iterator( leftTuple );
+        this.constraints.updateFromTuple( leftTuple );
         for ( FactEntry entry = ( FactEntry ) it.next(); entry != null; entry = ( FactEntry ) it.next() ) {
-            sink.propagateRetractTuple( leftTuple, entry.getFactHandle(), context, workingMemory );
+            InternalFactHandle handle = entry.getFactHandle();
+            if ( this.constraints.isAllowedCachedLeft( handle.getObject() ) ) {
+                sink.propagateRetractTuple( leftTuple, handle, context, workingMemory );
+            }
         }   
         tuple.release();
         leftTuple.release();
@@ -223,8 +228,7 @@
             this.constraints.updateFromTuple( tuple );
             for ( FactEntry entry = ( FactEntry ) objectIter.next(); entry != null; entry = ( FactEntry ) objectIter.next() ) {
                 InternalFactHandle handle = entry.getFactHandle();
-                this.constraints.updateFromFactHandle( handle );
-                if ( this.constraints.isAllowed( ) ) {
+                if ( this.constraints.isAllowedCachedLeft( handle.getObject() ) ) {
                     sink.assertTuple( new ReteTuple( tuple, handle),  context, workingMemory );
                 }
             }               

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-11 15:52:39 UTC (rev 6746)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2006-10-11 18:08:10 UTC (rev 6747)
@@ -119,8 +119,7 @@
         int matches = 0;
         for ( FactEntry entry = ( FactEntry ) it.next(); entry != null; entry = ( FactEntry ) it.next() ) {
             InternalFactHandle handle = entry.getFactHandle();  
-            this.constraints.updateFromFactHandle( handle );
-            if ( this.constraints.isAllowed( ) ) {
+            if ( this.constraints.isAllowedCachedLeft( handle.getObject() ) ) {
                 matches++;
             }
         }
@@ -155,8 +154,7 @@
         Iterator it = memory.getTupleMemory().iterator();
         this.constraints.updateFromFactHandle( handle );
         for ( ReteTuple tuple = ( ReteTuple ) it.next(); tuple != null; tuple = ( ReteTuple ) it.next() ) {
-            this.constraints.updateFromTuple( tuple );
-            if ( this.constraints.isAllowed( ) ) {
+            if ( this.constraints.isAllowedCachedRight( tuple ) ) {
                 int matches = tuple.getMatches();
                 tuple.setMatches( matches + 1 );
                 this.sink.propagateRetractTuple( tuple, context, workingMemory );
@@ -191,8 +189,7 @@
         Iterator it = memory.getTupleMemory().iterator();
         this.constraints.updateFromFactHandle( handle );
         for ( ReteTuple tuple = ( ReteTuple ) it.next(); tuple != null; tuple = ( ReteTuple ) it.next() ) {
-            this.constraints.updateFromTuple( tuple );
-            if ( this.constraints.isAllowed( ) ) {
+            if ( this.constraints.isAllowedCachedRight( tuple ) ) {
                 tuple.setMatches( tuple.getMatches() - 1 );
                 if ( tuple.getMatches() == 0 ) {
                     this.sink.propagateAssertTuple( tuple, context, workingMemory );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ContextEntry.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ContextEntry.java	2006-10-11 15:52:39 UTC (rev 6746)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ContextEntry.java	2006-10-11 18:08:10 UTC (rev 6747)
@@ -6,8 +6,13 @@
 import org.drools.util.LinkedListNode;
 
 public interface ContextEntry {
+    
     public ContextEntry getNext();
-    public void setNext(ContextEntry  entry);
-    public void updateFromTuple(ReteTuple tuple);   
+    
+    public void setNext(ContextEntry  entry);           
+    
+    public void updateFromTuple(ReteTuple tuple);  
+
     public void updateFromFactHandle(InternalFactHandle handle);
+    
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java	2006-10-11 15:52:39 UTC (rev 6746)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java	2006-10-11 18:08:10 UTC (rev 6747)
@@ -107,31 +107,5 @@
         final LiteralConstraint other = (LiteralConstraint) object;
 
         return this.extractor.equals( other.extractor ) && this.restriction.equals( other.restriction );
-    }
-
-    public static class LiteralContextEntry implements ContextEntry {
-        public Object object;    
-        
-        private FieldExtractor extractor;
-        
-        
-        public LiteralContextEntry(FieldExtractor extractor) {
-            this.extractor = extractor;
-        }
-        
-        public ContextEntry getNext() {
-            return null;
-        }
-        
-        public void setNext(ContextEntry  entry) {
-        }
-        
-        public void updateFromFactHandle(InternalFactHandle handle) {
-            this.object = this.extractor.getValue( handle.getObject() );
-            
-        }
-        
-        public void updateFromTuple(ReteTuple tuple) {            
-        }                
-    }    
+    }  
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java	2006-10-11 15:52:39 UTC (rev 6746)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java	2006-10-11 18:08:10 UTC (rev 6747)
@@ -18,6 +18,8 @@
 
 import org.drools.WorkingMemory;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldValue;
 import org.drools.spi.Restriction;
@@ -56,11 +58,15 @@
                              InternalWorkingMemory workingMemoiry) {
         return this.evaluator.evaluate( object, field );
     }
-
-    public boolean isAllowed(ContextEntry context) {
-        throw  new UnsupportedOperationException("cannot call isAllowed(ContextEntry context)");
+    
+    public boolean isAllowedCachedLeft(ContextEntry context, Object object) {
+        throw  new UnsupportedOperationException("cannot call isAllowed(ContextEntry context)");        
     }    
-
+    
+    public boolean isAllowedCachedRight(ReteTuple tuple, ContextEntry context) {
+        throw  new UnsupportedOperationException("cannot call isAllowed(ContextEntry context)");        
+    }      
+    
     /**
      * Literal constraints cannot have required declarations, so always return an empty array.
      * @return

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableConstraint.java	2006-10-11 15:52:39 UTC (rev 6746)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableConstraint.java	2006-10-11 18:08:10 UTC (rev 6747)
@@ -33,7 +33,7 @@
     /**
      * 
      */
-    private static final long         serialVersionUID = 320;
+    private static final long         serialVersionUID = 320L;
 
     private final FieldExtractor      fieldExtractor;
     private final VariableRestriction restriction;
@@ -63,11 +63,15 @@
     public Evaluator getEvaluator() {
         return this.restriction.getEvaluator();
     }
+
+    public boolean isAllowedCachedLeft(ContextEntry context, Object object ) {
+        return this.restriction.isAllowedCachedLeft( context, this.fieldExtractor.getValue( object ) );        
+    }    
     
-    public boolean isAllowed(ContextEntry context) {
-        return this.restriction.isAllowed( context );        
-    }
-
+    public boolean isAllowedCachedRight(ReteTuple tuple, ContextEntry context) {
+        return this.restriction.isAllowedCachedRight( tuple, context );        
+    }        
+    
     public String toString() {
         return "[VariableConstraint fieldExtractor=" + this.fieldExtractor + " declaration=" + getRequiredDeclarations() + "]";
     }
@@ -111,7 +115,7 @@
         public VariableContextEntry(FieldExtractor extractor, Declaration declaration) {
             this.extractor = extractor;
             this.declaration = declaration;
-        }
+        }       
         
         public ContextEntry getNext() {
             return this.entry;
@@ -119,16 +123,16 @@
         
         public void setNext(ContextEntry  entry) {
             this.entry = entry;
+        }        
+        
+        public void updateFromTuple(ReteTuple tuple) {
+            this.left =  this.declaration.getValue( tuple.get( this.declaration ).getObject() );            
         }
         
         public void updateFromFactHandle(InternalFactHandle handle) {
-            this.left = this.extractor.getValue( handle.getObject() );
+            this.right = this.extractor.getValue( handle.getObject() );
             
-        }
-        
-        public void updateFromTuple(ReteTuple tuple) {
-            this.right =  this.declaration.getValue( tuple.get( this.declaration ).getObject() );            
-        }                
+        }                        
     }
     
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java	2006-10-11 15:52:39 UTC (rev 6746)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java	2006-10-11 18:08:10 UTC (rev 6747)
@@ -20,6 +20,7 @@
 
 import org.drools.WorkingMemory;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.ReteTuple;
 import org.drools.rule.VariableConstraint.VariableContextEntry;
 import org.drools.spi.Evaluator;
 import org.drools.spi.Restriction;
@@ -53,13 +54,15 @@
 
     public Evaluator getEvaluator() {
         return this.evaluator;
-    }
+    }    
     
-    public boolean isAllowed(ContextEntry context) {
-        VariableContextEntry variableContext = ( VariableContextEntry ) context;
-        return this.evaluator.evaluate( variableContext.left,
-                                        variableContext.right );        
-    }
+    public boolean isAllowedCachedLeft(ContextEntry context, Object object) {
+        return this.evaluator.evaluate( ((VariableContextEntry) context).left, object );        
+    }    
+    
+    public boolean isAllowedCachedRight(ReteTuple tuple, ContextEntry context) {
+        return this.evaluator.evaluate( this.declaration.getValue( tuple.get( this.declaration ).getObject() ), ((VariableContextEntry) context).right );        
+    }  
 
     public String toString() {
         return "[VariableRestriction declaration=" + this.declaration + "]";

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java	2006-10-11 15:52:39 UTC (rev 6746)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java	2006-10-11 18:08:10 UTC (rev 6747)
@@ -16,16 +16,17 @@
  * limitations under the License.
  */
 
-import org.drools.WorkingMemory;
+import org.drools.reteoo.ReteTuple;
 import org.drools.rule.ContextEntry;
-import org.drools.rule.Declaration;
 
 public interface BetaNodeFieldConstraint
     extends
     Constraint {
     
-    public boolean isAllowed(ContextEntry context);
+    public boolean isAllowedCachedLeft(ContextEntry context, Object object );
     
+    public boolean isAllowedCachedRight(ReteTuple tuple, ContextEntry context);
+    
     public ContextEntry getContextEntry();
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java	2006-10-11 15:52:39 UTC (rev 6746)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java	2006-10-11 18:08:10 UTC (rev 6747)
@@ -4,13 +4,17 @@
 
 import org.drools.WorkingMemory;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.ReteTuple;
 import org.drools.rule.ContextEntry;
 import org.drools.rule.Declaration;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
 
 public interface Restriction extends Serializable {
     Declaration[] getRequiredDeclarations();
     
     public boolean isAllowed(Object object, InternalWorkingMemory workingMemoiry);
     
-    public boolean isAllowed(ContextEntry context);
+    public boolean isAllowedCachedLeft(ContextEntry context, Object object);
+    
+    public boolean isAllowedCachedRight(ReteTuple tuple, ContextEntry context);
 }

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java	2006-10-11 15:52:39 UTC (rev 6746)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java	2006-10-11 18:08:10 UTC (rev 6747)
@@ -66,8 +66,7 @@
         };
         
         //workingMemory.addEventListener(listener );
-
-        final InputStream is = getClass().getResourceAsStream( "/manners64.dat" );
+        final InputStream is = getClass().getResourceAsStream( "/manners128.dat" );
         final List list = getInputObjects( is );
         for ( final Iterator it = list.iterator(); it.hasNext(); ) {
             final Object object = it.next();




More information about the jboss-svn-commits mailing list