public bool IsSatisfiedBy(IExecutionContext context, Tuple leftTuple, Fact rightFact) { var args = new object[_compiledExpression.ArrayArgumentCount]; int index = leftTuple.Count - 1; foreach (var fact in leftTuple.Facts) { IndexMap.SetElementAt(args, _factIndexMap[index], fact.Object); index--; } IndexMap.SetElementAt(args, _factIndexMap[leftTuple.Count], rightFact.Object); try { return(_compiledExpression.Delegate(args)); } catch (Exception e) { bool isHandled = false; context.EventAggregator.RaiseConditionFailed(context.Session, e, _expression, leftTuple, rightFact, ref isHandled); if (!isHandled) { throw new RuleConditionEvaluationException("Failed to evaluate condition", _expression.ToString(), e); } return(false); } }
public object Invoke(IExecutionContext context, NodeDebugInfo nodeInfo, Tuple tuple) { var args = new object[_compiledExpression.ArrayArgumentCount]; int index = tuple.Count - 1; foreach (var fact in tuple.Facts) { IndexMap.SetElementAt(args, _factMap[index], fact.Object); index--; } Exception exception = null; object result = null; try { result = _compiledExpression.Delegate(args); return(result); } catch (Exception e) { exception = e; bool isHandled = false; context.EventAggregator.RaiseLhsExpressionFailed(context.Session, e, Expression, args, tuple, null, nodeInfo, ref isHandled); throw new ExpressionEvaluationException(e, Expression, isHandled); } finally { context.EventAggregator.RaiseLhsExpressionEvaluated(context.Session, exception, Expression, args, result, tuple, null, nodeInfo); } }
public object Invoke(Tuple tuple) { var args = new object[_compiledExpression.ArrayArgumentCount]; int index = tuple.Count - 1; foreach (var fact in tuple.Facts) { IndexMap.SetElementAt(args, _factMap[index], fact.Object); index--; } return(_compiledExpression.Delegate(args)); }
public object Invoke(IExecutionContext context, Tuple tuple) { var args = new object[_compiledExpression.ArrayArgumentCount]; int index = tuple.Count - 1; foreach (var fact in tuple.Facts) { IndexMap.SetElementAt(args, _factIndexMap[index], fact.Object); index--; } try { return(_compiledExpression.Delegate(args)); } catch (Exception e) { throw new RuleExpressionEvaluationException("Failed to evaluate binding expression", Expression.ToString(), e); } }
public bool IsSatisfiedBy(IExecutionContext context, NodeDebugInfo nodeInfo, Tuple leftTuple, Fact rightFact) { var args = new object[_compiledExpression.ArrayArgumentCount]; int index = leftTuple.Count - 1; foreach (var fact in leftTuple.Facts) { IndexMap.SetElementAt(args, _factMap[index], fact.Object); index--; } IndexMap.SetElementAt(args, _factMap[leftTuple.Count], rightFact.Object); Exception exception = null; bool result = false; try { result = _compiledExpression.Delegate(args); return(result); } catch (Exception e) { exception = e; bool isHandled = false; context.EventAggregator.RaiseLhsExpressionFailed(context.Session, e, _expression, args, leftTuple, rightFact, nodeInfo, ref isHandled); if (!isHandled) { throw new RuleLhsExpressionEvaluationException("Failed to evaluate condition", _expression.ToString(), e); } return(false); } finally { context.EventAggregator.RaiseLhsExpressionEvaluated(context.Session, exception, _expression, args, result, leftTuple, rightFact, nodeInfo); } }