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); }
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); }
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); }