/// <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; } }
/// <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)); }
/// <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 ] ); } }
/// <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); }
/// <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); }
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); } }
/// <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)); }
/// <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); }
/// <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; } }
/// <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; }
/// <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; }