Exemple #1
0
 public override Matrix GetArray()
 {
     try
     {
         return(m_pVal.GetArray());
     }
     catch (ParserError exc)
     {
         exc.GetContext().Ident = GetIdent();
         throw;
     }
 }
        public override void Eval(ref IValue ret, IValue[] a_pArg)
        {
            Global.MUP_VERIFY(a_pArg.Length == 2);

            IValue arg1 = a_pArg[0];
            IValue arg2 = a_pArg[1];

            if (arg1.IsNonComplexScalar() || arg2.IsNonComplexScalar())
            {
                if (!arg1.IsNonComplexScalar())
                {
                    throw new ParserError(new ErrorContext(EErrorCodes.ecTYPE_CONFLICT_FUN, -1, GetIdent(), arg1.GetValueType(), 'f', 1));
                }

                if (!arg2.IsNonComplexScalar())
                {
                    throw new ParserError(new ErrorContext(EErrorCodes.ecTYPE_CONFLICT_FUN, -1, GetIdent(), arg2.GetValueType(), 'f', 2));
                }

                if (arg1.IsInteger() && arg2.IsInteger())
                {
                    ret = arg1.GetInteger() + arg2.GetInteger();
                }
                else
                {
                    ret = arg1.GetFloat() + arg2.GetFloat();
                }
            }
            else
            {
                // Vector + Vector
                Matrix a1 = arg1.GetArray(), a2 = arg2.GetArray();
                if (a1.GetRows() != a2.GetRows())
                {
                    throw new ParserError(new ErrorContext(EErrorCodes.ecARRAY_SIZE_MISMATCH, -1, GetIdent(), 'm', 'm', 2));
                }
                ret = a1 + a2;
                return;

                var rv = new Matrix(a1.GetRows());
                for (int i = 0; i < a1.GetRows(); ++i)
                {
                    if (!a1.At(i).IsNonComplexScalar())
                    {
                        throw new ParserError(new ErrorContext(EErrorCodes.ecTYPE_CONFLICT_FUN, -1, GetIdent(), a1.At(i).GetValueType(), 'f', 1));
                    }

                    if (!a2.At(i).IsNonComplexScalar())
                    {
                        throw new ParserError(new ErrorContext(EErrorCodes.ecTYPE_CONFLICT_FUN, -1, GetIdent(), a2.At(i).GetValueType(), 'f', 1));
                    }

                    if (a1.At(i).IsInteger() && a2.At(i).IsInteger())
                    {
                        rv.At(i) = a1.At(i).GetInteger() + a2.At(i).GetInteger();
                    }
                    else
                    {
                        rv.At(i) = a1.At(i).GetFloat() + a2.At(i).GetFloat();
                    }
                }

                ret = rv;
            }
        }