[jboss-svn-commits] JBL Code SVN: r6202 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Sep 13 12:26:52 EDT 2006


Author: mark.proctor at jboss.com
Date: 2006-09-13 12:26:51 -0400 (Wed, 13 Sep 2006)
New Revision: 6202

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
Log:
JBRULES-484 refactor the core reteoo code for sinle and composite propagations
-alpha node inexing bug fix

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2006-09-13 16:24:00 UTC (rev 6201)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2006-09-13 16:26:51 UTC (rev 6202)
@@ -49,10 +49,6 @@
                     FieldIndex fieldIndex = registerFieldIndex( index,
                                                                 literalConstraint.getFieldExtractor() );
 
-                    if ( this.hashedSinks == null ) {
-                        this.hashedSinks = new ObjectSinkNodeList();
-                    }
-
                     if ( fieldIndex.getCount() >= 3 ) {
                         if ( !fieldIndex.isHashed() ) {
                             hashSinks( fieldIndex );
@@ -62,13 +58,11 @@
                                                         value ),
                                            sink );    
                     } else {
+                        if ( this.hashedSinks == null ) {
+                            this.hashedSinks = new ObjectSinkNodeList();
+                        }
                         this.hashedSinks.add( (ObjectSinkNode) sink );   
                     }
-                    
-                    if ( !fieldIndex.isHashed() && fieldIndex.getCount() >= 3 ) {
-                        // this is our third equal constraint for this field, so hash this index
-                        hashSinks( fieldIndex );
-                    }
                     return;
                 }
 
@@ -127,6 +121,8 @@
     public void hashSinks(FieldIndex fieldIndex) {
         int index = fieldIndex.getIndex();
 
+        List list = new ArrayList();
+        
         if ( this.hashedSinkMap == null ) {
             this.hashedSinkMap = new HashMap();
         }
@@ -138,13 +134,23 @@
             Evaluator evaluator = literalConstraint.getEvaluator();
             if ( evaluator.getOperator() == Operator.EQUAL && index == literalConstraint.getFieldExtractor().getIndex() ) {
                 Object value = literalConstraint.getField().getValue();
-                this.hashedSinks.remove( sink );
+                list.add( sink );
                 hashedSinkMap.put( new HashKey( index,
                                                 value ),
                                    sink );
             }
+        }        
+        
+        for ( Iterator it = list.iterator(); it.hasNext(); ) {
+            ObjectSinkNode sink = ( ObjectSinkNode ) it.next();
+            this.hashedSinks.remove( sink );
         }
-        fieldIndex.setHashed( true );
+        
+        if ( this.hashedSinks.isEmpty() ) {
+            this.hashedSinks = null;
+        }
+        
+        fieldIndex.setHashed( true );        
     }
 
     public void unHashSinks(FieldIndex fieldIndex) {




More information about the jboss-svn-commits mailing list