Пример #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> Assert will first pass the facts to the parameters. Once the
        /// parameters are set, it should call execute to Get the result.
        /// </summary>
        public override void assertLeft(Index linx, Rete engine, IWorkingMemory mem)
        {
            IGenericMap <Object, Object> leftmem = (IGenericMap <Object, Object>)mem.getBetaLeftMemory(this);

            if (!leftmem.ContainsKey(linx))
            {
                Parameters = linx.Facts;
                IReturnVector rv = func.executeFunction(engine, params_Renamed);
                if (rv.firstReturnValue().BooleanValue)
                {
                    IBetaMemory bmem = new BetaMemoryImpl(linx);
                    leftmem.Put(bmem.Index, bmem);
                    propogateAssert(linx, engine, mem);
                }
            }
        }
Пример #4
0
        /// <summary> Assert will first pass the facts to the parameters. Once the
        /// parameters are set, it should call execute to get the result.
        /// </summary>
        public override void assertLeft(Index linx, Rete engine, WorkingMemory mem)
        {
            Map leftmem = (Map)mem.getBetaLeftMemory(this);

            if (!leftmem.containsKey(linx))
            {
                Parameters = linx.Facts;
                ReturnVector rv = func.executeFunction(engine, params_Renamed);
                if (!rv.firstReturnValue().BooleanValue)
                {
                    BetaMemory bmem = new BetaMemoryImpl(linx);
                    leftmem.put(bmem.Index, bmem);
                }
                // only propogate if left memories count is zero
                if (leftmem.size() == 0)
                {
                    propogateAssert(linx, engine, mem);
                }
            }
        }
Пример #5
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);
                 propogateAssert(linx.add(vl), engine, mem);
             }
         }
     }
 }
Пример #6
0
 /// <summary> Assert will first pass the facts to the parameters. Once the
 /// parameters are set, it should call execute to Get the result.
 /// </summary>
 public override void assertLeft(Index linx, Rete engine, IWorkingMemory mem)
 {
     IGenericMap<Object, Object> leftmem = (IGenericMap<Object, Object>) mem.getBetaLeftMemory(this);
     if (!leftmem.ContainsKey(linx))
     {
         Parameters = linx.Facts;
         IReturnVector rv = func.executeFunction(engine, params_Renamed);
         if (!rv.firstReturnValue().BooleanValue)
         {
             IBetaMemory bmem = new BetaMemoryImpl(linx);
             leftmem.Put(bmem.Index, bmem);
         }
         // only propogate if left memories count is zero
         if (leftmem.Count == 0)
         {
             propogateAssert(linx, engine, mem);
         }
     }
 }
Пример #7
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);
     }
 }