Esempio n. 1
0
 public Variant CalcIt(ExecutionQueue eq)
 {
     ExecutionItem ei;
     if(eq.Count == 0) return new Variant("");
     while(eq.Count > 0)
     {
         ei = eq.Dequeue();
         switch(ei.itemType)
         {
             case ItemType.itBool:
                 if(String.Compare(ei.itemString,"True",true) == 0)
                     calcStack.Push(new Variant(true));
                 else
                     calcStack.Push(new Variant(false));
                 break;
             case ItemType.itString:
                 calcStack.Push(new Variant(ei.itemString));
             break;
             case ItemType.itDigit:
                 try
                 {
                     int i = int.Parse(ei.itemString);
                     calcStack.Push(new Variant(i));
                 }
                 catch
                 {
                     double d;
                     try {d = double.Parse(ei.itemString);}
                     catch{throw(new CalcException("Bad digital format"));}
                     calcStack.Push(new Variant(d));
                 }
             break;
             case ItemType.itDate:
                 DateTime dt;
                 try {dt = DateTime.Parse(ei.itemString);}
                 catch {throw(new CalcException("Bad date format"));}
                 calcStack.Push(new Variant(dt));
             break;
             case ItemType.itOperator:
                 DoOperator(ei.itemOperator,eq);
             break;
             case ItemType.itFunction:
                 DoFunction(ei);
                 break;
             case ItemType.itVariable:
                 if(!Variables.ContainsKey(ei.itemString)) throw(new CalcException("Bad variable name !"));
                 calcStack.Push(new Variant(Variables[ei.itemString]));
                 break;
             default:
                 throw(new CalcException("Bad item in execution queue"));
         }
     }
     return calcStack.Pop();
 }
Esempio n. 2
0
        public Variant CalcIt(ExecutionQueue eq)
        {
            ExecutionItem ei;

            if (eq.Count == 0)
            {
                return(new Variant(""));
            }
            while (eq.Count > 0)
            {
                ei = eq.Dequeue();
                switch (ei.itemType)
                {
                case ItemType.itBool:
                    if (String.Compare(ei.itemString, "True", true) == 0)
                    {
                        calcStack.Push(new Variant(true));
                    }
                    else
                    {
                        calcStack.Push(new Variant(false));
                    }
                    break;

                case ItemType.itString:
                    calcStack.Push(new Variant(ei.itemString));
                    break;

                case ItemType.itDigit:
                    try
                    {
                        int i = int.Parse(ei.itemString);
                        calcStack.Push(new Variant(i));
                    }
                    catch
                    {
                        double d;
                        try { d = double.Parse(ei.itemString); }
                        catch { throw(new CalcException("Bad digital format")); }
                        calcStack.Push(new Variant(d));
                    }
                    break;

                case ItemType.itDate:
                    DateTime dt;
                    try { dt = DateTime.Parse(ei.itemString); }
                    catch { throw(new CalcException("Bad date format")); }
                    calcStack.Push(new Variant(dt));
                    break;

                case ItemType.itOperator:
                    DoOperator(ei.itemOperator, eq);
                    break;

                case ItemType.itFunction:
                    DoFunction(ei);
                    break;

                case ItemType.itVariable:
                    if (!Variables.ContainsKey(ei.itemString))
                    {
                        throw(new CalcException("Bad variable name !"));
                    }
                    calcStack.Push(new Variant(Variables[ei.itemString]));
                    break;

                default:
                    throw(new CalcException("Bad item in execution queue"));
                }
            }
            return(calcStack.Pop());
        }