internal void AddEvaluator(string evaluatorName, string question, NativeEvaluator evaluator)
        {
            var evaluatorId = NativeEvaluatorPrefix + $"{evaluatorName}-" + question.ToLower().Replace(' ', '_').Replace("?", "");

            Add(_currentPattern, question, evaluatorId);

            AddEvaluator(evaluatorId, evaluator);
        }
        public DataContainer IsTrue(string evaluatorName, NativeEvaluator evaluator)
        {
            var evaluatorId = NativeEvaluatorPrefix + $"{evaluatorName}-is_true";

            IsTrue(evaluatorId);

            AddEvaluator(evaluatorId, evaluator);

            return(this);
        }
        public DataContainer HowToEvaluate(string evaluatorName, NativeEvaluator evaluator)
        {
            var evaluatorId = NativeEvaluatorPrefix + $"{evaluatorName}-how_to_evaluate";

            HowToEvaluate(evaluatorId);

            AddEvaluator(evaluatorId, evaluator);

            return(this);
        }
Exemple #4
0
        private void processAnswerPattern()
        {
            var parametersCopy   = _parameters.ToArray();
            var methodCopy       = _method;
            var preconditionCopy = _currentPrecondition;
            var methodName       = _method.Name;

            NativeEvaluator evaluator = c =>
            {
                var semanticArguments = new List <SemanticItem>();
                var context           = new ModuleContext(c);
                foreach (var parameterPair in parametersCopy)
                {
                    var parameter = parameterPair.Item1;
                    var source    = parameterPair.Item2;

                    var value = context.Evaluate(parameter, source);
                    semanticArguments.Add(value);
                }

                var prerequisitiesSatisfied = semanticArguments.All(a => a != null);
                if (!prerequisitiesSatisfied)
                {
                    return(null);
                }

                if (preconditionCopy != null)
                {
                    var preconditionResult = preconditionCopy(context);
                    if (!preconditionResult)
                    {
                        return(null);
                    }
                }

                var convertedParameters = getArguments(parametersCopy.Select(t => t.Item1).ToArray(), semanticArguments.ToArray());
                var evaluatorResult     = methodCopy.Invoke(this, convertedParameters) as SemanticItem;

                return(evaluatorResult);
            };

            Container.Pattern(_currentPattern)
            .AddEvaluator(methodName, _currentQuestion, evaluator);
        }
Exemple #5
0
        private void processAbilityPattern()
        {
            var parametersCopy = _parameters.ToArray();
            var methodCopy     = _method;
            var methodName     = _method.Name;
            var nativeActionId = DataContainer.NativeActionPrefix + _method.Name;

            NativeEvaluator evaluator = c =>
            {
                var evaluatedValues = new List <Tuple <string, SemanticItem> >();
                var context         = new ModuleContext(c);
                foreach (var parameterPair in parametersCopy)
                {
                    var parameter = parameterPair.Item1;
                    var source    = parameterPair.Item2;

                    var value = context.Evaluate(parameter, source);
                    evaluatedValues.Add(Tuple.Create(parameter.Name, value));
                }

                var prerequisitiesSatisfied = evaluatedValues.All(t => t.Item2 != null);
                if (!prerequisitiesSatisfied)
                {
                    return(null);
                }

                var call = encodeCall(nativeActionId, evaluatedValues);
                return(call);
            };

            NativeAction action = c =>
            {
                var arguments = decodeArguments(parametersCopy.Select(t => t.Item1), c);
                methodCopy.Invoke(this, arguments);
                return(true);
            };

            Container.Pattern(_currentPattern)
            .HowToDo(methodName, evaluator)
            .AddNativeAction(nativeActionId, action);
        }
 internal void AddEvaluator(string evaluatorId, NativeEvaluator evaluator)
 {
     _evaluators.Add(evaluatorId, evaluator);
     AddSpanElement(evaluatorId);
 }