protected IPrimitiveToken EvaluateOperation(IPrimitiveToken x, IPrimitiveToken y, Tokens o) { switch(o) { case Tokens.EQ: return new BooleanToken(x.CompareTo(y) == 0); case Tokens.NEQ: return new BooleanToken(x.CompareTo(y) != 0); case Tokens.GT: return new BooleanToken(x.CompareTo(y) > 0); case Tokens.GEQ: return new BooleanToken(x.CompareTo(y) >= 0); case Tokens.LT: return new BooleanToken(x.CompareTo(y) < 0); case Tokens.LEQ: return new BooleanToken(x.CompareTo(y) <= 0); case Tokens.PLUS: return new NumberToken(x.ToDouble() + y.ToDouble()); case Tokens.MINUS: return new NumberToken(x.ToDouble() - y.ToDouble()); case Tokens.MULT: return new NumberToken(x.ToDouble() * y.ToDouble()); case Tokens.DIV: return new NumberToken(x.ToDouble() / y.ToDouble()); case Tokens.EXP: return new NumberToken(Math.Pow(x.ToDouble(), y.ToDouble())); case Tokens.CONCAT: return new StringToken(x.ToString() + y.ToString()); default: throw new ArgumentException("Unknown Operator"); } }
protected IPrimitiveToken EvaluateOperation(IPrimitiveToken x, Tokens o) { switch(o) { case Tokens.PERCENT: return new NumberToken(x.ToDouble() * 0.01); case Tokens.UMINUS: return new NumberToken(x.ToDouble() * -1); default: throw new ArgumentException("Unknown Operator"); } }
EvaluateOperation(IPrimitiveToken x, Tokens o) { switch (o) { case Tokens.PERCENT: return(new NumberToken(x.ToDouble() * 0.01)); case Tokens.UMINUS: return(new NumberToken(x.ToDouble() * -1)); default: throw new ArgumentException("Unknown Operator"); } }
EvaluateOperation(IPrimitiveToken x, IPrimitiveToken y, Tokens o) { switch (o) { case Tokens.EQ: return(new BooleanToken(x.CompareTo(y) == 0)); case Tokens.NEQ: return(new BooleanToken(x.CompareTo(y) != 0)); case Tokens.GT: return(new BooleanToken(x.CompareTo(y) > 0)); case Tokens.GEQ: return(new BooleanToken(x.CompareTo(y) >= 0)); case Tokens.LT: return(new BooleanToken(x.CompareTo(y) < 0)); case Tokens.LEQ: return(new BooleanToken(x.CompareTo(y) <= 0)); case Tokens.PLUS: return(new NumberToken(x.ToDouble() + y.ToDouble())); case Tokens.MINUS: return(new NumberToken(x.ToDouble() - y.ToDouble())); case Tokens.MULT: return(new NumberToken(x.ToDouble() * y.ToDouble())); case Tokens.DIV: return(new NumberToken(x.ToDouble() / y.ToDouble())); case Tokens.EXP: return(new NumberToken(Math.Pow(x.ToDouble(), y.ToDouble()))); case Tokens.CONCAT: return(new StringToken(x.ToString() + y.ToString())); default: throw new ArgumentException("Unknown Operator"); } }
CompareTo(object obj) { if (obj is IPrimitiveToken) { IPrimitiveToken pToken = (IPrimitiveToken)obj; switch (pToken.Type) { case PrimitiveType.Null: case PrimitiveType.Number: return(_value.CompareTo(pToken.ToDouble())); case PrimitiveType.Boolean: case PrimitiveType.String: return(-1); } } throw new ArgumentException(); }