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); }
/// <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(); } } }