Esempio n. 1
0
        /// <summary>
        /// Accepts operation
        /// </summary>
        /// <param name="type">Argument type</param>
        /// <returns>The operation</returns>
        public IObjectOperation Accept(object type)
        {
            IObjectOperation ownOp = acceptor.Accept(type);

            if (ownOp != null)
            {
                return(ownOp);
            }
            if (type is ArrayReturnType)
            {
                ArrayReturnType a = type as ArrayReturnType;
                if (a.IsObjectType)
                {
                    op = acceptor.Accept(a) as IMultiVariableOperation;
                    if (op == null)
                    {
                        return(null);
                    }
                    types = new object[] { type };
                    ArrayOperation.CreateAllArrays(op, types, out y, out yy, out rank, out ranks);
                    returnType = new ArrayReturnType(op.ReturnType, rank, true);
                    return(this);
                }
            }
            return(null);
        }
Esempio n. 2
0
        /// <summary>
        /// Accept operation
        /// </summary>
        /// <param name="types">Types of operands</param>
        /// <returns>Operation</returns>
        public IObjectOperation Accept(object[] types)
        {
            this.types = types;
            if (acceptor is IMultiVariableOperation)
            {
                IMultiVariableOperation ma    = acceptor as IMultiVariableOperation;
                IObjectOperation        ownOp = ma.Accept(types);
                if (ownOp != null)
                {
                    return(ownOp);
                }
            }
            if (types == null)
            {
                return(acceptor.Accept(null));
            }
            object[] t       = new object[types.Length];
            bool     isArray = false;

            for (int i = 0; i < t.Length; i++)
            {
                t[i] = ArrayReturnType.GetBaseType(types[i]);
                if (types[i] is ArrayReturnType)
                {
                    isArray = true;
                }
            }
            IObjectOperation opr = operation.Accept(t);

            if (opr == null)
            {
                return(null);
            }
            if (!isArray)
            {
                return(opr);
            }
            ArrayOperation.CreateAllArrays(opr, types, out y, out yy, out rank, out ranks);
            returnType  = new ArrayReturnType(opr.ReturnType, rank, true);
            returnValue = y;
            if (types != null)
            {
                if (types.Length > 0)
                {
                    yt = new object[types.Length];
                }
            }
            return(this);
        }