Example #1
0
        private IRuleFilter CompileFilters(IRuleDefinition ruleDefinition, List <Declaration> ruleDeclarations, IndexMap tupleFactMap)
        {
            var conditions   = new List <IActivationExpression <bool> >();
            var keySelectors = new List <IActivationExpression <object> >();

            foreach (var filter in ruleDefinition.FilterGroup.Filters)
            {
                switch (filter.FilterType)
                {
                case FilterType.Predicate:
                    var condition = ExpressionCompiler.CompileActivationExpression <bool>(filter, ruleDeclarations, tupleFactMap);
                    conditions.Add(condition);
                    break;

                case FilterType.KeyChange:
                    var keySelector = ExpressionCompiler.CompileActivationExpression <object>(filter, ruleDeclarations, tupleFactMap);
                    keySelectors.Add(keySelector);
                    break;

                default:
                    throw new ArgumentOutOfRangeException($"Unrecognized filter type. FilterType={filter.FilterType}");
                }
            }
            var compiledFilter = new RuleFilter(conditions, keySelectors);

            return(compiledFilter);
        }