Ejemplo n.º 1
0
 internal void DeclareVariable(string name, BaseComputable value = null)
 {
     if (!VariableMapping.TryGetValue(name, out var idx))
     {
         idx = VariableMapping.Count;
         VariableMapping[name] = idx;
     }
     Variables[idx] = value;
 }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
 public ReturnException(BaseComputable value)
 {
     Value = value;
 }
Ejemplo n.º 6
0
 public virtual BaseComputable ExecuteOperation(string opr, BaseComputable rigth)
 {
     throw new System.Exception("Variable doesn't support operator " + opr);
 }