SciErr getComplexZMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, doublecomplex** _pdblZ) { SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0; double *pdblReal = NULL; double *pdblImg = NULL; sciErr = getCommonMatrixOfDouble(_pvCtx, _piAddress, isVarComplex(_pvCtx, _piAddress), _piRows, _piCols, &pdblReal, &pdblImg); if(sciErr.iErr) { addErrorMessage(&sciErr, API_ERROR_GET_ZDOUBLE, _("%s: Unable to get argument #%d"), "getComplexZMatrixOfDouble", getRhsFromAddress(_pvCtx, _piAddress)); return sciErr; } *_pdblZ = oGetDoubleComplexFromPointer(pdblReal, pdblImg, *_piRows * *_piCols); return sciErr; }
SciErr getComplexZMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, doublecomplex** _pdblZ) { int iSize = 0; double *pdblReal = NULL; SciErr sciErr = getCommonMatrixOfDouble(_pvCtx, _piAddress, 'z', 0, _piRows, _piCols, &pdblReal, NULL); if (sciErr.iErr) { addErrorMessage(&sciErr, API_ERROR_GET_ZDOUBLE, _("%s: Unable to get argument #%d"), "getComplexZMatrixOfDouble", getRhsFromAddress(_pvCtx, _piAddress)); return sciErr; } types::Double* pDbl = (types::Double*)_piAddress; pDbl->convertToZComplex(); *_pdblZ = (doublecomplex*)(pDbl->get()); return sciErr; }
SciErr getComplexMatrixOfDoubleAsInteger(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, int** _piReal, int** _piImg) { double* pdblReal = NULL; double* pdblImg = NULL; SciErr sciErr = getCommonMatrixOfDouble(_pvCtx, _piAddress, 'i', 1, _piRows, _piCols, &pdblReal, &pdblImg); if (sciErr.iErr) { return sciErr; } types::Double* pD = (types::Double*)_piAddress; //convert values and view of data to int and int* pD->convertToInteger(); *_piReal = (int*)pD->get(); *_piImg = (int*)pD->getImg(); return sciErr; }
SciErr getMatrixOfDoubleAsInteger(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, int** _piReal) { double* pdblReal = NULL; int iSize = 0; SciErr sciErr = getCommonMatrixOfDouble(_pvCtx, _piAddress, 'i', 0, _piRows, _piCols, &pdblReal, NULL); if (sciErr.iErr) { return sciErr; } iSize = *_piRows **_piCols; *_piReal = (int*)pdblReal; //Warning we overwrite double by int !!!! C2F(entier)(&iSize, pdblReal, *_piReal); types::Double* pD = (types::Double*)_piAddress; pD->setViewAsInteger(); return sciErr; }
/*--------------------------------------------------------------------------*/ static int getCommonScalarDouble(void* _pvCtx, int* _piAddress, int _iComplex, double* _pdblReal, double* _pdblImg) { int iRows = 0; int iCols = 0; double* pdblReal = NULL; double* pdblImg = NULL; SciErr sciErr = getCommonMatrixOfDouble(_pvCtx, _piAddress, '$', _iComplex, &iRows, &iCols, &pdblReal, &pdblImg); if (sciErr.iErr) { addErrorMessage(&sciErr, API_ERROR_GET_SCALAR_DOUBLE, _("%s: Unable to get argument #%d"), _iComplex ? "getScalarComplexDouble" : "getScalarDouble", getRhsFromAddress(_pvCtx, _piAddress)); printError(&sciErr, 0); return sciErr.iErr; } if (isScalar(_pvCtx, _piAddress) == 0) { addErrorMessage(&sciErr, API_ERROR_GET_SCALAR_DOUBLE, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), _iComplex ? "getScalarComplexDouble" : "getScalarDouble", getRhsFromAddress(_pvCtx, _piAddress)); printError(&sciErr, 0); return sciErr.iErr; } if (_pdblReal != NULL) { *_pdblReal = pdblReal[0]; } if (_iComplex == 1 && _pdblImg != NULL && pdblImg != NULL) { *_pdblImg = pdblImg[0]; } else if (_pdblImg != NULL) { *_pdblImg = 0; } return 0; }
SciErr readCommonNamedMatrixOfDouble(void* _pvCtx, const char* _pstName, int _iComplex, int* _piRows, int* _piCols, double* _pdblReal, double* _pdblImg) { SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0; int* piAddr = NULL; double* pdblReal = NULL; double* pdblImg = NULL; int iSize = 0; int iOne = 1; sciErr = getVarAddressFromName(_pvCtx, _pstName, &piAddr); if(sciErr.iErr) { addErrorMessage(&sciErr, API_ERROR_READ_NAMED_DOUBLE, _("%s: Unable to get variable \"%s\""), _iComplex ? "readNamedComplexMatrixOfDouble" : "readNamedMatrixOfDouble", _pstName); return sciErr; } sciErr = getCommonMatrixOfDouble(_pvCtx, piAddr, _iComplex, _piRows, _piCols, &pdblReal, &pdblImg); if(sciErr.iErr) { addErrorMessage(&sciErr, API_ERROR_READ_NAMED_DOUBLE, _("%s: Unable to get variable \"%s\""), _iComplex ? "readNamedComplexMatrixOfDouble" : "readNamedMatrixOfDouble", _pstName); return sciErr; } if(_pdblReal == NULL || (_iComplex && _pdblImg == NULL)) { return sciErr; } iSize = (*_piRows) * (*_piCols); /* dcopy source to dest */ C2F(dcopy)(&iSize, pdblReal, &iOne, _pdblReal, &iOne); if(_iComplex) { C2F(dcopy)(&iSize, pdblImg, &iOne, _pdblImg, &iOne); } return sciErr; }
SciErr getComplexMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, double** _pdblReal, double** _pdblImg) { return getCommonMatrixOfDouble(_pvCtx, _piAddress, '$', 1, _piRows, _piCols, _pdblReal, _pdblImg); }
SciErr getMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, double** _pdblReal) { return getCommonMatrixOfDouble(_pvCtx, _piAddress, '$', 0, _piRows, _piCols, _pdblReal, NULL); }