/// <summary>Clears all function definitions in the context</summary> protected virtual void ClearFunctions() { ValFuncs.Clear(); ValFuncRef.Clear(); // derived classes: add definitions here }
/// <summary>Adds a parameterized function to the context</summary> /// <typeparam name="T1">The type of the first argument</typeparam> /// <typeparam name="T2">The type of the second argument</typeparam> /// <typeparam name="T3">The type of the third argument</typeparam> /// <typeparam name="T4">The type of the fourth argument</typeparam> /// <typeparam name="T5">The type of the fifth argument</typeparam> /// <typeparam name="T6">The type of the sixth argument</typeparam> /// <typeparam name="T7">The type of the seventh argument</typeparam> /// <typeparam name="T8">The type of the eighth argument</typeparam> /// <typeparam name="T9">The type of the ninth argument</typeparam> /// <typeparam name="T10">The type of the tenth argument</typeparam> /// <typeparam name="T11">The type of the eleventh argument</typeparam> /// <typeparam name="T12">The type of the twelfth argument</typeparam> /// <typeparam name="T13">The type of the thirteenth argument</typeparam> /// <typeparam name="T14">The type of the fourteenth argument</typeparam> /// <typeparam name="T15">The type of the fifteenth argument</typeparam> /// <param name="name">The function name</param> /// <param name="fn">The function delegate</param> protected void AddFunc <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(string name, FunctionDelegate <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> fn) { ValFuncs.Add(new Pair <string, int>(name, 15), new ValFunc <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(fn)); if (!ValFuncRef.Contains(name)) { ValFuncRef.Add(name); } }
/// <summary>Adds a parameterized function to the context</summary> /// <typeparam name="T1">The type of the first argument</typeparam> /// <typeparam name="T2">The type of the second argument</typeparam> /// <typeparam name="T3">The type of the third argument</typeparam> /// <typeparam name="T4">The type of the fourth argument</typeparam> /// <typeparam name="T5">The type of the fifth argument</typeparam> /// <typeparam name="T6">The type of the sixth argument</typeparam> /// <typeparam name="T7">The type of the seventh argument</typeparam> /// <param name="name">The function name</param> /// <param name="fn">The function delegate</param> protected void AddFunc <T1, T2, T3, T4, T5, T6, T7>(string name, FunctionDelegate <T1, T2, T3, T4, T5, T6, T7> fn) { ValFuncs.Add(new Pair <string, int>(name, 7), new ValFunc <T1, T2, T3, T4, T5, T6, T7>(fn)); if (!ValFuncRef.Contains(name)) { ValFuncRef.Add(name); } }
/// <summary>Adds a parameterized function to the context</summary> /// <typeparam name="T1">The type of the first argument</typeparam> /// <param name="name">The function name</param> /// <param name="fn">The function delegate</param> protected void AddFunc <T1>(string name, FunctionDelegate <T1> fn) { ValFuncs.Add(new Pair <string, int>(name, 1), new ValFunc <T1>(fn)); if (!ValFuncRef.Contains(name)) { ValFuncRef.Add(name); } }
/// <summary>Adds a function that accepts a dynamic number of parameters to the context</summary> /// <param name="name">The function name</param> /// <param name="fn">The function delegate</param> protected void AddDynamicFunc(string name, FunctionDelegateParam fn) { ValFuncs.Add(new Pair <string, int>(name, -1), new ValFunc_Dynamic(fn)); if (!ValFuncRef.Contains(name)) { ValFuncRef.Add(name); } }
/// <summary>Performs evaluation of a function</summary> /// <param name="caller">The tracking object calling the function</param> /// <param name="name">The function name</param> /// <param name="param">The function parameters</param> /// <returns></returns> public Val RunFunction(ITracker caller, string name, Val[] param) { IValFunc vfs = ValFuncs.Get(new Pair <string, int>(name, param.Length)); if (vfs == null) { if (ValFuncRef.Contains(name)) { vfs = ValFuncs.Get(new Pair <string, int>(name, -1)); // Val[] if (vfs == null) { throw new EvalException(caller, Resource.Strings.Error_EvalException_IncorrectParameters.F(name)); } } else { throw new EvalException(caller, Resource.Strings.Error_EvalException_FunctionNotFound.F(name)); } } return(vfs.Execute(caller, name, this, param)); }
/// <summary>Retrieves a function from the function list</summary> /// <param name="name">The function name</param> /// <param name="argnum">The number of arguments for the function</param> /// <returns></returns> public object GetFunction(string name, int argnum) { return(ValFuncs.Get(new Pair <string, int>(name, argnum))); }