using System.Collections; using IwbZero.ToolCommon.StringModel; namespace IwbZero.Expr { public class ExprObject { // Fields // Methods public ExprObject(string pcExpr) { Expr = ""; Value = ""; ChildNodes = new ArrayList(); Expr = pcExpr; ElementType = ExprElements.Expression; } public ExprObject(string pcExpr, ExprElements poElementType) { Expr = ""; Value = ""; ChildNodes = new ArrayList(); Expr = pcExpr; ElementType = poElementType; } public void AddChild(ExprObject poNode) { ChildNodes.Add(poNode); } public ExprObject Clone() { ExprObject exprObject = new ExprObject(Expr, ElementType); foreach (ExprObject expr2 in ChildNodes) { exprObject.ChildNodes.Add(expr2.Clone()); } return exprObject; } public bool ContainOp(string pcOpId) { for (int i = 0; i < ChildCount; i++) { ExprOperator @operator = GetChild(i).GetOperator(); if ((@operator != null) && (@operator.Id.UAndT() == pcOpId.UAndT())) { return true; } } return false; } public ExprObject GetChild(int piIndex) { ExprObject exprObject = null; if ((piIndex >= 0) && (piIndex < ChildNodes.Count)) { exprObject = (ExprObject)ChildNodes[piIndex]; } return exprObject; } public ExprOperator GetOperator() { ExprOperator @operator = null; if (ElementType == ExprElements.Operator) { @operator = (ExprOperator)EvalExpr.Operators[Expr]; } return @operator; } public void InsertChildAt(ExprObject poNode, int piIndex) { ChildNodes.Insert(piIndex, poNode); } public void RemoveChildAt(int piIndex) { ChildNodes.RemoveAt(piIndex); } public override string ToString() { return (ElementType.ToString() + "---" + Expr); } public int ChildCount => ChildNodes.Count; public ArrayList ChildNodes { get; } public ExprElements ElementType { get; set; } public string Expr { get; set; } public bool IsOperator => (GetOperator() != null); public string Value { get; set; } } }