コード例 #1
0
        /// <summary> assertLeft takes an array of facts. Since the Current join may be
        /// joining against one or more objects, we need to pass all
        /// previously matched facts.
        /// </summary>
        /// <param name="">factInstance
        /// </param>
        /// <param name="">engine
        ///
        /// </param>
        public override void assertLeft(Index linx, Rete engine, IWorkingMemory mem)
        {
            IGenericMap <Object, Object> leftmem = (IGenericMap <Object, Object>)mem.getBetaLeftMemory(this);
            IBetaMemory bmem = new BetaMemoryImpl(linx);

            leftmem.Put(linx, bmem);
            IGenericMap <Object, Object> rightmem = (IGenericMap <Object, Object>)mem.getBetaRightMemory(this);
            IEnumerator itr = rightmem.Keys.GetEnumerator();

            if (itr != null)
            {
                while (itr.MoveNext())
                {
                    IFact vl = (IFact)itr.Current;
                    // we have to evaluate the function
                    if (vl != null && evaluate(linx.Facts, vl, engine))
                    {
                        bmem.addMatch(vl);
                    }
                }
            }
            if (bmem.matchCount() > 0)
            {
                propogateAssert(linx, engine, mem);
            }
        }
コード例 #2
0
        /// <summary>
        /// assertLeft takes an array of facts. Since the Current join may be
        /// joining against one or more objects, we need to pass all
        /// previously matched facts.
        /// </summary>
        /// <param name="linx">The linx.</param>
        /// <param name="engine">The engine.</param>
        /// <param name="mem">The mem.</param>
        public override void assertLeft(Index linx, Rete engine, IWorkingMemory mem)
        {
            IGenericMap <Object, Object> leftmem = (IGenericMap <Object, Object>)mem.getBetaLeftMemory(this);
            // we create a new list for storing the matches.
            // any fact that isn't in the list will be evaluated.
            IBetaMemory bmem = new BetaMemoryImpl(linx);

            leftmem.Put(bmem.Index, bmem);
            IGenericMap <IFact, IFact> rightmem = (IGenericMap <IFact, IFact>)mem.getBetaRightMemory(this);
            int         prevCount = bmem.matchCount();
            IEnumerator itr       = rightmem.Values.GetEnumerator();

            while (itr.MoveNext())
            {
                IFact rfcts = (IFact)itr.Current;
                if (evaluate(linx.Facts, rfcts, engine))
                {
                    // it matched, so we Add it to the beta memory
                    bmem.addMatch(rfcts);
                }
            }
            // since the Fact[] is entering the left for the first time,
            // if there are no matches, we merged the facts propogate.
            if (bmem.matchCount() == 0)
            {
                propogateAssert(linx, engine, mem);
            }
        }
コード例 #3
0
 /// <summary> assertLeft takes an array of facts. Since the Current join may be
 /// joining against one or more objects, we need to pass all
 /// previously matched facts.
 /// </summary>
 /// <param name="">factInstance
 /// </param>
 /// <param name="">engine
 /// 
 /// </param>
 public override void assertLeft(Index linx, Rete engine, IWorkingMemory mem)
 {
     IGenericMap<Object, Object> leftmem = (IGenericMap<Object, Object>) mem.getBetaLeftMemory(this);
     IBetaMemory bmem = new BetaMemoryImpl(linx);
     leftmem.Put(linx, bmem);
     IGenericMap<Object, Object> rightmem = (IGenericMap<Object, Object>) mem.getBetaRightMemory(this);
     IEnumerator itr = rightmem.Keys.GetEnumerator();
     if (itr != null)
     {
         while (itr.MoveNext())
         {
             IFact vl = (IFact) itr.Current;
             // we have to evaluate the function
             if (vl != null && evaluate(linx.Facts, vl, engine))
             {
                 bmem.addMatch(vl);
             }
         }
     }
     if (bmem.matchCount() > 0)
     {
         propogateAssert(linx, engine, mem);
     }
 }
コード例 #4
0
 /// <summary>
 /// assertLeft takes an array of facts. Since the Current join may be
 /// joining against one or more objects, we need to pass all
 /// previously matched facts.
 /// </summary>
 /// <param name="linx">The linx.</param>
 /// <param name="engine">The engine.</param>
 /// <param name="mem">The mem.</param>
 public override void assertLeft(Index linx, Rete engine, IWorkingMemory mem)
 {
     IGenericMap<Object, Object> leftmem = (IGenericMap<Object, Object>) mem.getBetaLeftMemory(this);
     // we create a new list for storing the matches.
     // any fact that isn't in the list will be evaluated.
     IBetaMemory bmem = new BetaMemoryImpl(linx);
     leftmem.Put(bmem.Index, bmem);
     IGenericMap<IFact, IFact> rightmem = (IGenericMap<IFact, IFact>)mem.getBetaRightMemory(this);
     int prevCount = bmem.matchCount();
     IEnumerator itr = rightmem.Values.GetEnumerator();
     while (itr.MoveNext())
     {
         IFact rfcts = (IFact) itr.Current;
         if (evaluate(linx.Facts, rfcts, engine))
         {
             // it matched, so we Add it to the beta memory
             bmem.addMatch(rfcts);
         }
     }
     // since the Fact[] is entering the left for the first time,
     // if there are no matches, we merged the facts propogate.
     if (bmem.matchCount() == 0)
     {
         propogateAssert(linx, engine, mem);
     }
 }