double IVariableReferenceNumericalOut <double> .EvaluateNumerical(IVariableStoreContainer context) { if (Evaluate(context, out float value)) { return(value); } throw new VariableEntryNotFoundException(); }
public bool Evaluate(IVariableStoreContainer context, bool onFailedValue = false) { if (left.Evaluate(context, out var leftValue) && right.Evaluate(context, out var rightValue)) { if (leftValue is IComparable leftComparable && rightValue is IComparable rightComparable) { int comparison = leftComparable.CompareTo(rightComparable); switch (conditionOperator) { case ConditionOperatorType.Equal: return(comparison == 0); case ConditionOperatorType.NotEqual: return(comparison != 0); case ConditionOperatorType.LessThan: return(comparison < 0); case ConditionOperatorType.MoreThan: return(comparison > 0); case ConditionOperatorType.LessThanEqual: return(comparison <= 0); case ConditionOperatorType.MoreThanEqual: return(comparison >= 0); default: throw new ArgumentOutOfRangeException(); } } else { switch (conditionOperator) { case ConditionOperatorType.Equal: return(leftValue == rightValue); case ConditionOperatorType.NotEqual: return(leftValue != rightValue); default: throw new InvalidOperationException("この変数に対してこの比較演算子は適用できません。"); } } }
public bool Evaluate(IVariableStoreContainer context) { bool result = conditionOperator == CompositeVariableConditionOperator.And; for (int i = 0; i < conditionCount; i++) { var con = GetCondition(i); var res = con.Evaluate(context); if (result && !res) { result = false; break; } else if (!result && res) { result = true; break; } } return result; }
public void SetValue(IVariableStoreContainer context, char value) { base.SetValue(context, value); }
public abstract void SetValue(IVariableStoreContainer context, object value);
public abstract bool Evaluate(IVariableStoreContainer context, out object value);