public ITerminalNode <T> BuildTerminalNode <T>(AlphaBuilderContext <T> context) where T : class { using (_logger.BeginScope($"{nameof(BuildTerminalNode)}<{typeof(T).Name}>")) { BetaBuilderContext <T> betaContext = BuildJoinNode(context); var factIndexMap = betaContext.CreateIndexMap(betaContext.Declaration); _logger.LogDebug($"Creating terminal node: {typeof(T).Name}"); return(new TerminalNode <T>(betaContext.CurrentSource, factIndexMap)); } }
public BetaBuilderContext <TFact> Build(IRuntimeBuilder builder, BetaBuilderContext <TFact> context) { // var terminalContext = builder.BuildTerminalNode(context); // // // terminalContext = builder.BuildRuleNode(terminalContext, _actions); // // foreach (var action in _actions) // { // // context = builder.BuildSelectionNode(context, action.ConditionExpression); // } return(context); }
public ContextValue(AlphaBuilderContext <T> alphaContext, BetaBuilderContext <T> betaContext) { _alphaContext = alphaContext; _betaContext = betaContext; }
public void Add <T>(AlphaBuilderContext <T> alphaContext, BetaBuilderContext <T> betaContext) where T : class { _values.Add(alphaContext.Declaration, new ContextValue <T>(alphaContext, betaContext)); }
public BetaBuilderContext <TLeft, T> BuildJoinNode <T, TLeft>(AlphaBuilderContext <T> context, BetaBuilderContext <TLeft> betaContext) where T : class where TLeft : class { using (_logger.BeginScope($"{nameof(BuildJoinNode)}<{typeof(T).Name}>")) { var betaSource = betaContext.CurrentSource as ITupleSource <TLeft>; var alphaSource = context.CurrentSource as IFactSource <T>; _logger.LogDebug($"Creating join node: {typeof(T).Name}"); var node = new JoinNode <TLeft, T>(betaSource, alphaSource, new BetaCondition <TLeft, T>((x, y) => true)); return(new RuntimeBetaBuilderContext <TLeft, T>(context.Declaration, node)); } }