예제 #1
0
        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);
        }
예제 #2
0
        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;
            }
        }