/// <summary>
        /// Access to value
        /// </summary>
        public object this[object s]
        {
            set
            {
                if (!table.ContainsKey(s))
                {
                    return;
                    //throw new Exception("Variable does not exist");
                }
                List <object> l = table[s] as List <object>;
                foreach (object x in l)
                {
                    if (x is ElementaryObjectVariable)
                    {
                        ElementaryObjectVariable o = x as ElementaryObjectVariable;
                        o.Value = value;
                        if (value.IsDBNull())
                        {
                            o.Value = null;
                        }
                        continue;
                    }

                    /*                 if (x is ElementaryRealVariable &
                     *                   !value.GetType().FullName.Equals("System.Double"))
                     *               {
                     *                   goto replace;
                     *               }
                     *               {
                     *                   ElementaryRealVariable r = x as ElementaryRealVariable;
                     *                   if (value == null | value is DBNull)
                     *                   {
                     *                       r.Value = null;
                     *                       continue;
                     *                   }
                     *                   r.Value = (double)value;
                     *                   continue;
                     *               }
                     *               return;
                     *           replace:
                     *               char c = (char)s;
                     *               for (int i = 0; i < c; i++)
                     *               {
                     *                   ElementaryObjectVariable v = new ElementaryObjectVariable(c);
                     *                   v.Value = value;
                     *                   l[i] = v;
                     *               }*/
                }
            }
        }
 /// <summary>
 /// Adds tree
 /// </summary>
 /// <param name="tree">Tree to add</param>
 public void Add(ObjectFormulaTree tree)
 {
     /*   if (tree.Operation is ElementaryRealVariable)
      * {
      *     ElementaryRealVariable v = tree.Operation as ElementaryRealVariable;
      *     ArrayList l = null;
      *     object s = v.Symbol;
      *     if (table.ContainsKey(s))
      *     {
      *         l = table[s] as ArrayList;
      *     }
      *     else
      *     {
      *         l = new ArrayList();
      *         table[s] = l;
      *     }
      *     l.Add(v);
      * }*/
     if (tree.Operation is ElementaryObjectVariable)
     {
         ElementaryObjectVariable v = tree.Operation as ElementaryObjectVariable;
         List <object>            l = null;
         object s = v.Symbol;
         if (table.ContainsKey(s))
         {
             l = table[s];
         }
         else
         {
             l        = new List <object>();
             table[s] = l;
         }
         l.Add(v);
     }
     for (int i = 0; i < tree.Count; i++)
     {
         Add(tree[i]);
     }
 }