示例#1
0
        private void BuildSelectionNode(ReteBuilderContext context, ExpressionElement element)
        {
            SelectionNode node = context.CurrentAlphaNode
                                 .ChildNodes.OfType <SelectionNode>()
                                 .FirstOrDefault(sn => ExpressionElementComparer.AreEqual(sn.ExpressionElement, element));

            if (node == null)
            {
                var compiledExpression = ExpressionCompiler.CompileLhsFactExpression <bool>(element);
                node = new SelectionNode(element, compiledExpression);
                context.CurrentAlphaNode.ChildNodes.Add(node);
            }
            node.NodeInfo.Add(context.Rule, element);
            context.CurrentAlphaNode = node;
        }
示例#2
0
        public BenchmarkLhsExpression()
        {
            _nodeInfo = new NodeDebugInfo();
            Expression <Func <string, int, decimal, bool> > betaExpression = (s, i, d) => s.Length == i;
            var betaElement = Element.Condition(betaExpression);

            _lhsExpression      = ExpressionCompiler.CompileLhsTupleFactExpression <bool>(betaElement, betaElement.Imports.ToList());
            _lhsTupleExpression = ExpressionCompiler.CompileLhsTupleExpression <bool>(betaElement, betaElement.Imports.ToList());
            _tuple = ToTuple("abcd", 4, 1.0m);

            Expression <Func <string, bool> > alphaExpression = s => s.Length == 1;
            var alphaElement = Element.Condition(alphaExpression);

            _lhsFactExpression = ExpressionCompiler.CompileLhsFactExpression <bool>(alphaElement);
            _fact = new Fact("abcd");
        }