private void BuildBindingNode(ReteBuilderContext context, BindingElement element) { var node = context.BetaSource .Sinks.OfType <BindingNode>() .FirstOrDefault(x => ExpressionElementComparer.AreEqual(x.ExpressionElement, element)); if (node == null) { var compiledExpression = ExpressionCompiler.CompileLhsTupleExpression <object>(element, context.Declarations); node = new BindingNode(element, compiledExpression, element.ResultType, context.BetaSource); } node.NodeInfo.Add(context.Rule, element); BuildBetaMemoryNode(context, node); context.ResetAlphaSource(); }
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"); }