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; } }