예제 #1
0
        public virtual void printWorkingMemory(bool detailed, bool inputNodes)
        {
            engine.writeMessage("AlphaNode count " + alphaMemories.Count + Constants.LINEBREAK);
            IEnumerator itr      = alphaMemories.Keys.GetEnumerator();
            int         memTotal = 0;

            while (itr.MoveNext())
            {
                BaseNode key = (BaseNode)itr.Current;
                if (!(key is ObjectTypeNode) && !(key is LIANode))
                {
                    IAlphaMemory am = (IAlphaMemory)alphaMemories.Get(key);
                    if (detailed)
                    {
                        engine.writeMessage(key.toPPString() + " count=" + am.size() + Constants.LINEBREAK);
                    }
                    memTotal += am.size();
                }
                else
                {
                    if (inputNodes)
                    {
                        IAlphaMemory am = (IAlphaMemory)alphaMemories.Get(key);
                        engine.writeMessage(key.toPPString() + " count=" + am.size() + Constants.LINEBREAK);
                    }
                }
            }
            engine.writeMessage("total AlphaMemories = " + memTotal + Constants.LINEBREAK);

            // now write out the left beta memory
            engine.writeMessage("BetaNode Count " + betaLeftMemories.Count + Constants.LINEBREAK);
            int betaTotal = 0;

            itr = betaLeftMemories.Keys.GetEnumerator();
            while (itr.MoveNext())
            {
                BaseNode key = (BaseNode)itr.Current;
                if (key is BaseJoin)
                {
                    printBetaNodes((BaseJoin)key, detailed, betaTotal);
                }
            }
            engine.writeMessage("total BetaMemories = " + betaTotal + Constants.LINEBREAK);
        }
예제 #2
0
        /// <summary>
        /// Printout the memory for the given rule.
        /// </summary>
        /// <param name="rule">The rule.</param>
        public virtual void printWorkingMemory(Rule.IRule rule)
        {
            engine.writeMessage("Memories for " + rule.Name);
            ICondition[] conds    = rule.Conditions;
            int          memTotal = 0;

            for (int idx = 0; idx < conds.Length; idx++)
            {
                ICondition  c   = conds[idx];
                IList       l   = c.Nodes;
                IEnumerator itr = l.GetEnumerator();
                while (itr.MoveNext())
                {
                    BaseNode     key = (BaseNode)itr.Current;
                    IAlphaMemory am  = (IAlphaMemory)alphaMemories.Get(key);
                    engine.writeMessage(key.toPPString() + " count=" + am.size() + Constants.LINEBREAK);
                    memTotal += am.size();
                }
            }
        }