コード例 #1
0
ファイル: sci_hdf5_listvar_v2.cpp プロジェクト: scitao/scilab
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;
}
コード例 #2
0
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;
}
コード例 #3
0
int getDatasetInfo(int _iDatasetId, int* _iComplex, int* _iDims, int* _piDims)
{
    int iSize = 1;
    hid_t data_type;
    H5T_class_t data_class;
    hid_t space = H5Dget_space(_iDatasetId);
    if (space < 0)
    {
        return -1;
    }

    data_type = H5Dget_type(_iDatasetId);
    data_class = H5Tget_class(data_type);
    if (data_class == H5T_COMPOUND)
    {
        *_iComplex = 1;
    }
    else if (data_class == H5T_REFERENCE)
    {
        *_iComplex = isComplexData(_iDatasetId);
    }
    else
    {
        *_iComplex = 0;
    }

    *_iDims = H5Sget_simple_extent_ndims(space);
    if (*_iDims < 0)
    {
        H5Sclose(space);
        return -1;
    }

    if (_piDims != 0 && *_iDims != 0)
    {
        int i = 0;
        hsize_t* dims = (hsize_t*)MALLOC(sizeof(hsize_t) **_iDims);
        if (H5Sget_simple_extent_dims(space, dims, NULL) < 0)
        {
            FREE(dims);
            return -1;
        }

        //reverse dimensions
        for (i = 0 ; i < *_iDims ; i++)
        {
            //reverse dimensions to improve rendering in external tools
            _piDims[i] = (int)dims[*_iDims - 1 - i];
            iSize *= _piDims[i];
        }

        FREE(dims);
    }
    else
    {
        iSize = 0;
    }

    H5Sclose(space);
    return iSize;
}