コード例 #1
0
        public void AddCondition <T>(FactDeclaration <T> factDeclaration, IRuleCondition <T> condition)
            where T : class
        {
            var declaration = GetDeclaration(factDeclaration.Name);

            declaration.AddCondition(condition);
        }
コード例 #2
0
        public AlphaBuilderContext <T> CreateContext <T>(FactDeclaration <T> declaration) where T : class
        {
            using (_logger.BeginScope($"{nameof(CreateContext)}<{typeof(T).Name}>"))
            {
                TypeNode <T> typeNode = _network.GetTypeNode <T, TypeNode <T> >();

                return(new RuntimeAlphaBuilderContext <T>(declaration, typeNode));
            }
        }
コード例 #3
0
        public RuleCondition <T> GetRuleCondition <T>(FactDeclaration <T> factDeclaration, Expression <Func <T, bool> > conditionExpression)
            where T : class
        {
            if (conditionExpression == null)
            {
                throw new ArgumentNullException(nameof(conditionExpression));
            }

            if (conditionExpression.Parameters.Count != 1)
            {
                throw new ArgumentException($"Expected 1 parameter, found {conditionExpression.Parameters.Count}", nameof(conditionExpression));
            }

            var condition = new RuleCondition <T>(factDeclaration, conditionExpression);

            return(condition);
        }
コード例 #4
0
        public ITerminalNode <T> BuildTerminalNode <T>(BuilderContext context, FactDeclaration <T> factDeclaration)
            where T : class
        {
            using (_logger.BeginScope($"{nameof(BuildTerminalNode)}<{typeof(T).Name}>"))
            {
                if (context.AlphaSource != null)
                {
                    BuildJoinNode <T>(context);
                }

                var factIndexMap = context.CreateIndexMap(factDeclaration);

                var betaSource = context.BetaSource as ITupleSource <T>;

                _logger.LogDebug($"Creating terminal node: {typeof(T).Name}");

                return(new TerminalNode <T>(betaSource, factIndexMap));
            }
        }
コード例 #5
0
 public RuntimeAlphaBuilderContext(FactDeclaration <T> declaration, IAlphaNode <T> currentNode)
 {
     Declaration   = declaration;
     CurrentNode   = currentNode;
     CurrentSource = currentNode.MemoryNode;
 }
コード例 #6
0
 public RuntimeBetaBuilderContext(FactDeclaration <TRight> declaration, IBetaNode <TLeft, TRight> currentNode)
 {
     Declaration   = declaration;
     CurrentNode   = currentNode;
     CurrentSource = currentNode.MemoryNode;
 }
コード例 #7
0
 public RuleAction(FactDeclaration <T> declaration, Func <FactContext <T>, Task> action)
 {
     _declaration = declaration;
     _action      = action;
 }
コード例 #8
0
 public IndexMap CreateIndexMap(FactDeclaration factDeclaration)
 {
     return(IndexMap.CreateMap(_parameters, _parameters));
 }
コード例 #9
0
 public void Add <T>(string name, FactDeclaration <T> factDeclaration)
     where T : class
 {
     _declarations.Add(name, new Declaration <T>(factDeclaration));
 }
コード例 #10
0
 public RuleCondition(FactDeclaration <T> factDeclaration, Expression <Func <T, bool> > conditionExpression)
 {
     FactDeclaration     = factDeclaration;
     ConditionExpression = conditionExpression;
 }