static bool read_sparse(int _iDatasetId, int _iItemPos, int *_piAddress, VarInfo* _pInfo) { int iRet = 0; int iRows = 0; int iCols = 0; int iNbItem = 0; int iComplex = 0; iRet = getSparseDimension(_iDatasetId, &iRows, &iCols, &iNbItem); if (iRet) { return false; } iComplex = isComplexData(_iDatasetId); _pInfo->iDims = 2; _pInfo->piDims[0] = iRows; _pInfo->piDims[1] = iCols; _pInfo->iSize = 20 + iRows * 4 + iNbItem * 4 + (iNbItem * (iComplex + 1) * 8); generateInfo(_pInfo, "sparse"); closeDataSet(_iDatasetId); return true; }
static bool import_boolean_sparse(int _iDatasetId, int _iItemPos, int *_piAddress, char *_pstVarname) { int iRet = 0; int iRows = 0; int iCols = 0; int iNbItem = 0; int *piNbItemRow = NULL; int *piColPos = NULL; SciErr sciErr; iRet = getSparseDimension(_iDatasetId, &iRows, &iCols, &iNbItem); if (iRet) { return false; } piNbItemRow = (int *)MALLOC(iRows * sizeof(int)); piColPos = (int *)MALLOC(iNbItem * sizeof(int)); iRet = readBooleanSparseMatrix(_iDatasetId, iRows, iCols, iNbItem, piNbItemRow, piColPos); if (iRet) { return false; } if (_piAddress == NULL) { sciErr = createNamedBooleanSparseMatrix(pvApiCtx, _pstVarname, iRows, iCols, iNbItem, piNbItemRow, piColPos); } else //if not null this variable is in a list { sciErr = createBooleanSparseMatrixInNamedList(pvApiCtx, _pstVarname, _piAddress, _iItemPos, iRows, iCols, iNbItem, piNbItemRow, piColPos); } if (sciErr.iErr) { printError(&sciErr, 0); return false; } FREE(piNbItemRow); if(piColPos) { FREE(piColPos); } if (iRet) { return false; } return true; }
static bool import_sparse(int* pvCtx, int _iDatasetId, int _iItemPos, int *_piAddress, char *_pstVarname) { int iRet = 0; int iRows = 0; int iCols = 0; int iComplex = 0; double *pdblReal = NULL; double *pdblImg = NULL; int iNbItem = 0; int *piNbItemRow = NULL; int *piColPos = NULL; SciErr sciErr; iRet = getSparseDimension(_iDatasetId, &iRows, &iCols, &iNbItem); if (iRet) { return false; } iComplex = isComplexData(_iDatasetId); if (iComplex) { piNbItemRow = (int *)MALLOC(iRows * sizeof(int)); piColPos = (int *)MALLOC(iNbItem * sizeof(int)); pdblReal = (double *)MALLOC(iNbItem * sizeof(double)); pdblImg = (double *)MALLOC(iNbItem * sizeof(double)); iRet = readSparseComplexMatrix(_iDatasetId, iRows, iCols, iNbItem, piNbItemRow, piColPos, pdblReal, pdblImg); } else { piNbItemRow = (int *)MALLOC(iRows * sizeof(int)); piColPos = (int *)MALLOC(iNbItem * sizeof(int)); pdblReal = (double *)MALLOC(iNbItem * sizeof(double)); iRet = readSparseMatrix(_iDatasetId, iRows, iCols, iNbItem, piNbItemRow, piColPos, pdblReal); } if (iRet) { FREE(piNbItemRow); FREE(piColPos); FREE(pdblReal); if (iComplex) { FREE(pdblImg); } return false; } if (_piAddress == NULL) { if (iComplex) { sciErr = createNamedComplexSparseMatrix(pvCtx, _pstVarname, iRows, iCols, iNbItem, piNbItemRow, piColPos, pdblReal, pdblImg); } else { sciErr = createNamedSparseMatrix(pvCtx, _pstVarname, iRows, iCols, iNbItem, piNbItemRow, piColPos, pdblReal); } } else //if not null this variable is in a list { if (iComplex) { sciErr = createComplexSparseMatrixInNamedList(pvCtx, _pstVarname, _piAddress, _iItemPos, iRows, iCols, iNbItem, piNbItemRow, piColPos, pdblReal, pdblImg); } else { sciErr = createSparseMatrixInNamedList(pvCtx, _pstVarname, _piAddress, _iItemPos, iRows, iCols, iNbItem, piNbItemRow, piColPos, pdblReal); } } FREE(piNbItemRow); FREE(piColPos); FREE(pdblReal); if (iComplex) { FREE(pdblImg); } if (sciErr.iErr) { printError(&sciErr, 0); return false; } return true; }