コード例 #1
0
        private static EvalFactoryNode RecursiveAddAuditNode(
            PatternNodeFactory patternNodeFactory,
            EvalFactoryNode parentNode,
            bool auditPattern,
            bool auditPatternInstance,
            EvalFactoryNode evalNode,
            EvalAuditInstanceCount instanceCount)
        {
            var writer = new StringWriter();

            evalNode.ToEPL(writer, PatternExpressionPrecedenceEnum.MINIMUM);
            var             expressionText         = writer.ToString();
            var             filterChildNonQuitting = parentNode != null && parentNode.IsFilterChildNonQuitting;
            EvalFactoryNode audit = patternNodeFactory.MakeAuditNode(
                auditPattern, auditPatternInstance, expressionText, instanceCount, filterChildNonQuitting);

            audit.AddChildNode(evalNode);

            IList <EvalFactoryNode> newChildNodes = new List <EvalFactoryNode>();

            foreach (var child in evalNode.ChildNodes)
            {
                newChildNodes.Add(
                    RecursiveAddAuditNode(
                        patternNodeFactory, evalNode, auditPattern, auditPatternInstance, child, instanceCount));
            }

            evalNode.ChildNodes.Clear();
            evalNode.AddChildNodes(newChildNodes);

            return(audit);
        }
コード例 #2
0
ファイル: ASTExprHelper.cs プロジェクト: ikvm/nesper
 public static void PatternCollectAddSubnodesAddParentNode(EvalFactoryNode evalNode, ITree node, IDictionary <ITree, EvalFactoryNode> astPatternNodeMap)
 {
     if (evalNode == null)
     {
         throw ASTWalkException.From("Invalid null expression node for '" + ASTUtil.PrintNode(node) + "'");
     }
     for (var i = 0; i < node.ChildCount; i++)
     {
         var childNode     = node.GetChild(i);
         var childEvalNode = PatternGetRemoveTopNode(childNode, astPatternNodeMap);
         if (childEvalNode != null)
         {
             evalNode.AddChildNode(childEvalNode);
         }
     }
     astPatternNodeMap.Put(node, evalNode);
 }