public static int[] Eval(E_INTRINSIC_FUNC_TYPE type, params Object[] args) { switch (type) { case E_INTRINSIC_FUNC_TYPE.IFT_HEAD: return(GetHead((int[])args[0])); case E_INTRINSIC_FUNC_TYPE.IFT_LAST: return(GetLast((int[])args[0])); case E_INTRINSIC_FUNC_TYPE.IFT_SUM: return(GetSumOfElements((int[])args[0])); case E_INTRINSIC_FUNC_TYPE.IFT_REVERSE: return(Reverse((int[])args[0])); case E_INTRINSIC_FUNC_TYPE.IFT_SORT: return(Sort((int[])args[0])); case E_INTRINSIC_FUNC_TYPE.IFT_MIN: return(GetMinElement((int[])args[0])); case E_INTRINSIC_FUNC_TYPE.IFT_MAX: return(GetMaxElement((int[])args[0])); case E_INTRINSIC_FUNC_TYPE.IFT_CONCAT: return(Concat((int[])args[0], (int[])args[1])); case E_INTRINSIC_FUNC_TYPE.IFT_SLICE: return(Slice((int[])args[0], (int[])args[1], (int[])args[2])); case E_INTRINSIC_FUNC_TYPE.IFT_INDEXOF: return(GetIndexOf((int[])args[0], (int[])args[1])); case E_INTRINSIC_FUNC_TYPE.IFT_GET: return(GetElement((int[])args[0], (int[])args[1])); case E_INTRINSIC_FUNC_TYPE.IFT_LEN: return(GetLength((int[])args[0])); case E_INTRINSIC_FUNC_TYPE.IFT_MAP: return(Map((int[])args[1], (Func <int, int>)args[0])); case E_INTRINSIC_FUNC_TYPE.IFT_FILTER: return(Filter((int[])args[1], (Func <int, bool>)args[0])); case E_INTRINSIC_FUNC_TYPE.IFT_VECOP: return(VecOp((int[])args[1], (int[])args[2], (Func <int, int, int>)args[0])); } return(mNullArray); }
public CCallASTNode(E_INTRINSIC_FUNC_TYPE type, IList <IASTNode> arguments) : base(E_NODE_TYPE.NT_CALL) { mIntrinsicType = type; mChildren = arguments; int argumentsCount = arguments.Count; IASTNode currArgument = null; for (int i = 0; i < argumentsCount; ++i) { currArgument = mChildren[i]; currArgument.NodeId = i; currArgument.Parent = this; } }