Пример #1
0
        public override void retractRight(IFact rfact, Rete engine, IWorkingMemory mem)
        {
            long                   time     = LeftTime;
            EqHashIndex            inx      = new EqHashIndex(NodeUtils.getRightValues(binds, rfact));
            TemporalHashedAlphaMem rightmem = (TemporalHashedAlphaMem)mem.getBetaRightMemory(this);

            // first we Remove the fact from the right
            rightmem.removePartialMatch(inx, rfact);
            // now we see the left memory matched and Remove it also
            IGenericMap <Object, Object> leftmem = (IGenericMap <Object, Object>)mem.getBetaLeftMemory(this);
            IEnumerator itr = leftmem.Values.GetEnumerator();

            while (itr.MoveNext())
            {
                Index linx = (Index)itr.Current;
                if (evaluate(linx.Facts, rfact, time))
                {
                    propogateRetract(linx.add(rfact), engine, mem);
                }
            }
        }
Пример #2
0
        public override void assertLeft(Index linx, Rete engine, IWorkingMemory mem)
        {
            long time = RightTime;
            IGenericMap <Object, Object> leftmem = (IGenericMap <Object, Object>)mem.getBetaLeftMemory(this);

            leftmem.Put(linx, linx);
            EqHashIndex            inx      = new EqHashIndex(NodeUtils.getLeftValues(binds, linx.Facts));
            TemporalHashedAlphaMem rightmem = (TemporalHashedAlphaMem)mem.getBetaRightMemory(this);
            IEnumerator            itr      = rightmem.iterator(inx);

            if (itr != null)
            {
                try
                {
                    while (itr.MoveNext())
                    {
                        IFact vl = (IFact)itr.Current;
                        if (vl != null)
                        {
                            if (vl.timeStamp() > time)
                            {
                                propogateAssert(linx.add(vl), engine, mem);
                            }
                            else
                            {
                                rightmem.removePartialMatch(inx, vl);
                                propogateRetract(linx.add(vl), engine, mem);
                            }
                        }
                    }
                }
                catch (RetractException e)
                {
                    // there shouldn't be any retract exceptions
                }
            }
        }