static bool read_poly(int _iDatasetId, int _iItemPos, int *_piAddress, VarInfo* _pInfo) { int iRet = 0; int iComplex = 0; char pstVarName[64] = { 0 }; double **pdblReal = NULL; double **pdblImg = NULL; int *piNbCoef = NULL; int iSize = 0; iSize = getDatasetInfo(_iDatasetId, &iComplex, &_pInfo->iDims, _pInfo->piDims); _pInfo->iSize = 8 * 4 + (iSize + 1) * 4; if (iComplex) { piNbCoef = (int *)MALLOC(iSize * sizeof(int)); pdblReal = (double **)MALLOC(iSize * sizeof(double *)); pdblImg = (double **)MALLOC(iSize * sizeof(double *)); iRet = readPolyComplexMatrix(_iDatasetId, pstVarName, 2, _pInfo->piDims, piNbCoef, pdblReal, pdblImg); } else { piNbCoef = (int *)MALLOC(iSize * sizeof(int)); pdblReal = (double **)MALLOC(iSize * sizeof(double *)); iRet = readPolyMatrix(_iDatasetId, pstVarName, 2, _pInfo->piDims, piNbCoef, pdblReal); } for (int i = 0 ; i < iSize ; i++) { _pInfo->iSize += piNbCoef[i] * 8 * (iComplex + 1); FREE(pdblReal[i]); if (iComplex) { FREE(pdblImg[i]); } } FREE(piNbCoef); FREE(pdblReal); if (iComplex) { FREE(pdblImg); } generateInfo(_pInfo, "polynomial"); return true; }
static bool import_poly(int* pvCtx, int _iDatasetId, int _iItemPos, int *_piAddress, char *_pstVarname) { int iRet = 0; int iComplex = 0; char pstVarName[64] = { 0 }; double **pdblReal = NULL; double **pdblImg = NULL; int *piNbCoef = NULL; int iDims = 0; int* piDims = NULL; int iSize = 0; SciErr sciErr; iRet = getDatasetInfo(_iDatasetId, &iComplex, &iDims, NULL); if (iRet < 0) { return false; } piDims = (int*)MALLOC(sizeof(int) * iDims); iSize = getDatasetInfo(_iDatasetId, &iComplex, &iDims, piDims); if (iComplex) { piNbCoef = (int *)MALLOC(iSize * sizeof(int)); pdblReal = (double **)MALLOC(iSize * sizeof(double *)); pdblImg = (double **)MALLOC(iSize * sizeof(double *)); iRet = readPolyComplexMatrix(_iDatasetId, pstVarName, iDims, piDims, piNbCoef, pdblReal, pdblImg); } else { piNbCoef = (int *)MALLOC(iSize * sizeof(int)); pdblReal = (double **)MALLOC(iSize * sizeof(double *)); iRet = readPolyMatrix(_iDatasetId, pstVarName, iDims, piDims, piNbCoef, pdblReal); } if (iRet) { FREE(piDims); FREE(piNbCoef); for (int i = 0; i < iSize; i++) { FREE(pdblReal[i]); } FREE(pdblReal); if (iComplex) { for (int i = 0; i < iSize; i++) { FREE(pdblImg[i]); } FREE(pdblImg); } return false; } if (_piAddress == NULL) { if (iComplex) { sciErr = createNamedComplexMatrixOfPoly(pvCtx, _pstVarname, pstVarName, piDims[0], piDims[1], piNbCoef, pdblReal, pdblImg); } else { sciErr = createNamedMatrixOfPoly(pvCtx, _pstVarname, pstVarName, piDims[0], piDims[1], piNbCoef, pdblReal); } } else //if not null this variable is in a list { if (iComplex) { sciErr = createComplexMatrixOfPolyInNamedList(pvCtx, _pstVarname, _piAddress, _iItemPos, pstVarName, piDims[0], piDims[1], piNbCoef, pdblReal, pdblImg); } else { sciErr = createMatrixOfPolyInNamedList(pvCtx, _pstVarname, _piAddress, _iItemPos, pstVarName, piDims[0], piDims[1], piNbCoef, pdblReal); } } FREE(piDims); FREE(piNbCoef); for (int i = 0; i < iSize; i++) { FREE(pdblReal[i]); } FREE(pdblReal); if (iComplex) { for (int i = 0; i < iSize; i++) { FREE(pdblImg[i]); } FREE(pdblImg); } if (sciErr.iErr) { printError(&sciErr, 0); return false; } return true; }