コード例 #1
0
 /// <summary>
 /// When new Successor nodes are added, we propogate the facts that matched to
 /// the new join node.
 /// </summary>
 /// <param name="node">The node.</param>
 /// <param name="engine">The engine.</param>
 /// <param name="mem">The mem.</param>
 public virtual void addSuccessorNode(BaseJoin node, Rete engine, IWorkingMemory mem)
 {
     if (addNode(node))
     {
         // first, we Get the memory for this node
         IGenericMap <Object, Object> leftmem = (IGenericMap <Object, Object>)mem.getBetaLeftMemory(this);
         // now we iterate over the entry set
         IEnumerator itr = leftmem.GetEnumerator();
         while (itr.MoveNext())
         {
             IBetaMemory bmem = (IBetaMemory)itr.Current;
             Index       left = bmem.Index;
             // iterate over the matches
             IGenericMap <Object, Object> rightmem = (IGenericMap <Object, Object>)mem.getBetaRightMemory(this);
             IEnumerator ritr = rightmem.Keys.GetEnumerator();
             while (ritr.MoveNext())
             {
                 IFact rfcts = (IFact)ritr.Current;
                 // now assert in the new join node
                 node.assertLeft(left.add(rfcts), engine, mem);
             }
         }
     }
 }