internal void DeclareVariable(string name, BaseComputable value = null) { if (!VariableMapping.TryGetValue(name, out var idx)) { idx = VariableMapping.Count; VariableMapping[name] = idx; } Variables[idx] = value; }
internal void DeclareGlobalVariable(string name, BaseComputable value = null) { int idx = GlobalVariableMapping.Count; if (!GlobalVariableMapping.TryAdd(name, idx)) { throw new System.Exception($"{name} is already defined"); } GlobalVariables[idx] = value; }
public override BaseComputable ExecuteOperation(string opr, BaseComputable rigth) { if (rigth is SimpleValue r) { switch (opr) { case "+": return(new SimpleValue(_value + r._value)); case "-": return(new SimpleValue(_value - r._value)); case "*": return(new SimpleValue(_value * r._value)); case "/": return(new SimpleValue(_value / r._value)); case "==": return(new SimpleValue(_value == r._value ? 1 : 0)); case "<>": return(new SimpleValue(_value != r._value ? 1 : 0)); case "<": return(new SimpleValue(_value < r._value ? 1 : 0)); case ">": return(new SimpleValue(_value > r._value ? 1 : 0)); case ">=": return(new SimpleValue(_value >= r._value ? 1 : 0)); case "<=": return(new SimpleValue(_value <= r._value ? 1 : 0)); case "&&": return(new SimpleValue(_value & r._value)); case "||": return(new SimpleValue(_value | r._value)); default: throw new Exception($"operator {opr} is unknown"); } } return(base.ExecuteOperation(opr, rigth)); }
public override BaseComputable ExecuteOperation(string opr, BaseComputable rigth) { if (rigth is Str s) { switch (opr) { case "+": var tmp = new SimpleValue[_value.Length + s._value.Length]; _value.CopyTo(tmp, 0); s._value.CopyTo(tmp, _value.Length); return(new Str(tmp)); case "==": return(new SimpleValue(Enumerable.SequenceEqual(_value, s._value) ? 1 : 0)); case "<>": return(new SimpleValue(Enumerable.SequenceEqual(_value, s._value) ? 0 : 1)); default: throw new Exception($"operator {opr} is unknown"); } } return(base.ExecuteOperation(opr, rigth)); }
public ReturnException(BaseComputable value) { Value = value; }
public virtual BaseComputable ExecuteOperation(string opr, BaseComputable rigth) { throw new System.Exception("Variable doesn't support operator " + opr); }