/// <summary>
        /// The constractor of GOM_Point_Value
        /// </summary>
        /// <param name="point">The point referred to</param>
        /// <param name="type">The type of this node (x/y)</param>
        public GOM_Point_Value(GOM_Point point, ValueType type)
        {
            m_point = point;
            m_type	= type;
            m_values= new GOM_Values();

            if ((type != ValueType.X_Value) && (type != ValueType.Y_Value))
            {
                m_type = ValueType.Error_Value;
                throw new ArgumentException("Invalid type");
            }
        }
 /// <summary>
 /// The constructor of GOM_Num_Value
 /// </summary>
 public GOM_Num_Value()
 {
     m_value	= 0;
     m_values = new GOM_Values();
 }
        /// <summary>
        /// The constructor of GOM_Unary_Value
        /// </summary>
        /// <param name="val">The operand</param>
        /// <param name="type">The type of the operator</param>
        public GOM_Unary_Value(GOM_Interface_Value val, ValueType type)
        {
            m_values = new GOM_Values();
            m_values.Add(val);
            m_type	= type;

            if ((type != ValueType.Sin_Value) && (type != ValueType.Cos_Value) &&
                (type != ValueType.Tan_Value) && (type != ValueType.Sqrt_Value) &&
                (type != ValueType.Neg_Value))
            {
                m_type = ValueType.Error_Value;
                throw new ArgumentException("Invalid type");
            }
        }
 /// <summary>
 /// The constructor of GOM_Assignment_Constraint
 /// </summary>
 /// <param name="lvalue">The lvalue of the assignment</param>
 /// <param name="rvalue">The rvalue of the assignment</param>
 public GOM_Assignment_Constraint(GOM_Interface_Value lvalue, GOM_Interface_Value rvalue)
 {
     m_values = new GOM_Values();
     m_values.Add(lvalue);
     m_values.Add(rvalue);
 }
        /// <summary>
        /// The constructor of GOM_Binary_Value
        /// </summary>
        /// <param name="val1">The first operand of this node</param>
        /// <param name="val2">The second operand of this node</param>
        /// <param name="type">The type of the operator</param>
        public GOM_Binary_Value(GOM_Interface_Value val1, GOM_Interface_Value val2, ValueType type)
        {
            m_values = new GOM_Values();
            m_values.Add(val1);
            m_values.Add(val2);
            m_type	= type;

            if ((type != ValueType.Add_Value) && (type != ValueType.Minus_Value) &&
                (type != ValueType.Divide_Value) && (type != ValueType.Multiply_Value) &&
                (type != ValueType.Max_Value) && (type != ValueType.Min_Value))
            {
                m_type = ValueType.Error_Value;
                throw new ArgumentException("Invalid type");
            }
        }