Exemplo n.º 1
0
 /// <summary>
 /// Creates a new evaluation value specifying the data type.
 /// </summary>
 /// <param name="value">The value to hold in the evaluation value.</param>
 /// <param name="dataType">The data type for the value.</param>
 public EvaluationValue(object value, inf.IDataType dataType)
 {
     if (dataType == null)
     {
         throw new ArgumentNullException("dataType");
     }
     if (value is EvaluationValue)
     {
         _value    = ((EvaluationValue)value)._value;
         _dataType = ((EvaluationValue)value)._dataType;
     }
     else if (value is BagValue)
     {
         _value    = value;
         _dataType = dataType;
     }
     else if (value is inf.IFunctionParameter)
     {
         _value    = ((inf.IFunctionParameter)value).GetTypedValue(dataType, 0);
         _dataType = dataType;
     }
     else
     {
         _value    = value;
         _dataType = dataType;
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// Evaluates the function.
        /// </summary>
        /// <param name="context">The evaluation context instance.</param>
        /// <param name="args">The function arguments.</param>
        /// <returns>The result value of the function evaluation.</returns>
        public override EvaluationValue Evaluate(EvaluationContext context, params inf.IFunctionParameter[] args)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }
            inf.IDataType type   = DataType;
            BagValue      retBag = new BagValue(type);

            inf.IFunction function    = type.EqualFunction;
            inf.IFunction functionDup = type.IsInFunction;
            foreach (object par1 in args[0].Elements)
            {
                foreach (object par2 in args[1].Elements)
                {
                    EvaluationValue retVal = function.Evaluate(
                        context,
                        new EvaluationValue(par1, args[0].GetType(context)),
                        new EvaluationValue(par2, args[1].GetType(context)));
                    if (retVal.BoolValue)
                    {
                        retVal = functionDup.Evaluate(context, new EvaluationValue(par2, args[1].GetType(context)), retBag);
                        if (!retVal.BoolValue)
                        {
                            retBag.Add(new EvaluationValue(par1, args[0].GetType(context)));
                        }
                    }
                }
            }
            return(new EvaluationValue(retBag, type));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Returns the typed value for this string value.
        /// </summary>
        /// <param name="dataType">The expected data type of the value.</param>
        /// <param name="parNo">The parameter number used only for error reporing.</param>
        /// <returns>The typed value as an object.</returns>
        public object GetTypedValue(inf.IDataType dataType, int parNo)
        {
            if (dataType == null)
            {
                throw new ArgumentNullException("dataType");
            }
            if (IsBag)
            {
                return(this);
            }
            else
            {
                if (DataTypeValue != dataType.DataTypeName)
                {
                    throw new EvaluationException("invalid data type");                       //TODO: make the error more clear.
                }

                if (DataTypeValue != null)
                {
                    if (DataTypeValue != dataType.DataTypeName)
                    {
                        throw new EvaluationException(Resource.ResourceManager[Resource.MessageKey.exc_invalid_datatype_in_stringvalue, parNo, DataTypeValue]);
                    }
                }

                return(dataType.Parse(Value, parNo));

                //TODO: this exception is possible?
                //throw new EvaluationException( cor.Resource.ResourceManager[ cor.Resource.MessageKey.exc_invalid_datatype_in_stringvalue, parNo, DataTypeValue ] );
            }
        }
Exemplo n.º 4
0
 /// <summary>
 /// Gets the value as a generic object.
 /// </summary>
 /// <param name="dataType">The expected data type of the value.</param>
 /// <param name="parNo">THe number of parameter used only for error notification.</param>
 /// <returns></returns>
 public object GetTypedValue(inf.IDataType dataType, int parNo)
 {
     if (dataType != _dataType)
     {
         throw new EvaluationException(Resource.ResourceManager[Resource.MessageKey.exc_type_mismatch, dataType, _dataType]);
     }
     return(_value);
 }
Exemplo n.º 5
0
 /// <summary>
 /// Gets the value as a generic object.
 /// </summary>
 /// <param name="dataType">The expected data type of the value.</param>
 /// <param name="parNo">THe number of parameter used only for error notification.</param>
 /// <returns></returns>
 public object GetTypedValue(inf.IDataType dataType, int parNo)
 {
     if (dataType != DataTypeDescriptor.Bag)
     {
         throw new EvaluationException("invalid datatype.");
     }
     return(this);
 }
Exemplo n.º 6
0
        public void Init(XmlNode configNode)
        {
            if (configNode == null)
            {
                throw new ArgumentNullException("configNode");
            }
            XmlNodeList dataTypes = configNode.SelectNodes("./dataType");

            foreach (XmlNode node in dataTypes)
            {
                inf.IDataType dataType = (inf.IDataType)Activator.CreateInstance(Type.GetType(node.Attributes["type"].Value));
                _dataTypes.Add(node.Attributes["id"].Value, dataType);
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Evaluates the function.
        /// </summary>
        /// <param name="context">The evaluation context instance.</param>
        /// <param name="args">The function arguments.</param>
        /// <returns>The result value of the function evaluation.</returns>
        public override EvaluationValue Evaluate(EvaluationContext context, params inf.IFunctionParameter[] args)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }
            inf.IDataType type = DataType;
            BagValue      bag  = new BagValue(type);

            for (int i = 0; i < args.Length; i++)
            {
                bag.Add(args[i].GetTypedValue(type, i));
            }
            return(new EvaluationValue(bag, type));
        }
Exemplo n.º 8
0
 /// <summary>
 /// Gets the value as a generic object.
 /// </summary>
 /// <param name="dataType">The expected data type of the value.</param>
 /// <param name="parNo">The number of parameter used only for error notification.</param>
 /// <returns></returns>
 public virtual object GetTypedValue(inf.IDataType dataType, int parNo)
 {
     return(this);
 }
Exemplo n.º 9
0
		/// <summary>
		/// Creates a new evaluation value specifying the data type.
		/// </summary>
		/// <param name="value">The value to hold in the evaluation value.</param>
		/// <param name="dataType">The data type for the value.</param>
		public EvaluationValue( object value, inf.IDataType dataType )
		{
            if (dataType == null) throw new ArgumentNullException("dataType");
			if( value is EvaluationValue )
			{
				_value = ((EvaluationValue)value)._value;
				_dataType = ((EvaluationValue)value)._dataType;
			}
			else if( value is BagValue )
			{
				_value = value;
				_dataType = dataType;
			}
			else if(value is inf.IFunctionParameter )
			{
				_value = ((inf.IFunctionParameter)value).GetTypedValue( dataType, 0 );
				_dataType = dataType;
			}
			else
			{
				_value = value;
				_dataType = dataType;
			}
		}
Exemplo n.º 10
0
		/// <summary>
		/// Creates a new empty bag for the given data type.
		/// </summary>
		/// <param name="dataType">The data type of the bag.</param>
		public BagValue( inf.IDataType dataType )
		{
			_dataType = dataType;
		}
Exemplo n.º 11
0
 /// <summary>
 /// Creates a new empty bag for the given data type.
 /// </summary>
 /// <param name="dataType">The data type of the bag.</param>
 public BagValue(inf.IDataType dataType)
 {
     _dataType = dataType;
 }