public static bool EvaluteCompute(Agent pAgent, Property opl, Property opr1, CMethodBase opr1_m, EComputeOperator opr, Property opr2, CMethodBase opr2_m) { bool bValid = false; object value1 = null; if (opl != null) { if (opr1_m != null) { bValid = true; value1 = opr1_m.Invoke(pAgent); } else if (opr1 != null) { bValid = true; Agent pParentR = opr1.GetParentAgent(pAgent); value1 = opr1.GetValue(pParentR); } if (opr2_m != null) { bValid = true; object value2 = opr2_m.Invoke(pAgent); Agent pParentOpl = opl.GetParentAgent(pAgent); object returnValue = Details.ComputeValue(value1, value2, opr); opl.SetValue(pParentOpl, returnValue); } else if (opr2 != null) { bValid = true; Agent pParentL = opl.GetParentAgent(pAgent); Agent pParentR = opr2.GetParentAgent(pAgent); object value2 = opr2.GetValue(pParentR); object returnValue = Details.ComputeValue(value1, value2, opr); opl.SetValue(pParentL, returnValue); } } return(bValid); }
public static VariableComparator Create(string comparionOperator, Property lhs, CMethodBase lhs_m, Property rhs, CMethodBase rhs_m) { E_VariableComparisonType comparisonType = VariableComparator.ParseComparisonType(comparionOperator); VariableComparator pComparator = VariableComparator.Create(lhs, lhs_m, rhs, rhs_m); pComparator.SetComparisonType(comparisonType); return(pComparator); }
public virtual bool load(List <property_t> properties) { string opr2TypeName = null; string comparatorName = null; foreach (property_t p in properties) { if (p.name == "Mode") { switch (p.value) { case "Condition": this.m_mode = TransitionMode.Condition; break; case "Success": this.m_mode = TransitionMode.Success; break; case "Failure": this.m_mode = TransitionMode.Failure; break; case "End": this.m_mode = TransitionMode.End; break; } } else if (p.name == "Opl") { if (StringUtils.IsValidString(p.value)) { int pParenthesis = p.value.IndexOf('('); if (pParenthesis == -1) { string typeName = null; this.m_opl = Condition.LoadRight(p.value, ref typeName); } else { //method this.m_opl_m = Action.LoadMethod(p.value); } } } else if (p.name == "Opr1") { if (StringUtils.IsValidString(p.value)) { int pParenthesis = p.value.IndexOf('('); if (pParenthesis == -1) { string typeName = null; this.m_opr1 = Condition.LoadRight(p.value, ref typeName); } else { //method this.m_opr1_m = Action.LoadMethod(p.value); } } } else if (p.name == "Operator") { comparatorName = p.value; switch (p.value) { case "Invalid": this.m_operator = EOperatorType.E_INVALID; break; case "Assign": this.m_operator = EOperatorType.E_ASSIGN; break; case "Add": this.m_operator = EOperatorType.E_ADD; break; case "Sub": this.m_operator = EOperatorType.E_SUB; break; case "Mul": this.m_operator = EOperatorType.E_MUL; break; case "Div": this.m_operator = EOperatorType.E_DIV; break; case "Equal": this.m_operator = EOperatorType.E_EQUAL; break; case "NotEqual": this.m_operator = EOperatorType.E_NOTEQUAL; break; case "Greater": this.m_operator = EOperatorType.E_GREATER; break; case "Less": this.m_operator = EOperatorType.E_LESS; break; case "GreaterEqual": this.m_operator = EOperatorType.E_GREATEREQUAL; break; case "LessEqual": this.m_operator = EOperatorType.E_LESSEQUAL; break; } } else if (p.name == "Opr2") { if (StringUtils.IsValidString(p.value)) { int pParenthesis = p.value.IndexOf('('); if (pParenthesis == -1) { this.m_opr2 = Condition.LoadRight(p.value, ref opr2TypeName); } else { //method this.m_opr2_m = Action.LoadMethod(p.value); } } } else { //Debug.Check(0, "unrecognised property %s", p.name); } } // compare if (this.m_operator >= EOperatorType.E_EQUAL && this.m_operator <= EOperatorType.E_LESSEQUAL) { if (!string.IsNullOrEmpty(comparatorName) && (this.m_opl != null || this.m_opl_m != null) && (this.m_opr2 != null || this.m_opr2_m != null)) { this.m_comparator = Condition.Create(comparatorName, this.m_opl, this.m_opl_m, this.m_opr2, this.m_opr2_m); } } return(this.m_opl != null); }