Can now write multidimensional arrays with an unlimited first dimension.
r1742 | ffr | 2007-03-30 17:19:18 +1000 (Fri, 30 Mar 2007) | 2 lines
This commit is contained in:
committed by
Douglas Clowes
parent
a10234185d
commit
d7303b0751
52
napi5.c
52
napi5.c
@@ -992,7 +992,7 @@ static void ignoreError(void *data, char *text){
|
||||
int rank;
|
||||
hssize_t myStart[H5S_MAX_RANK];
|
||||
hsize_t mySize[H5S_MAX_RANK];
|
||||
hsize_t size[1],maxdims[H5S_MAX_RANK];
|
||||
hsize_t size[H5S_MAX_RANK],maxdims[H5S_MAX_RANK];
|
||||
hid_t filespace,dataspace;
|
||||
|
||||
pFile = NXI5assert (fid);
|
||||
@@ -1008,27 +1008,37 @@ static void ignoreError(void *data, char *text){
|
||||
mySize[i] = iSize[i];
|
||||
}
|
||||
iRet = H5Sget_simple_extent_dims(pFile->iCurrentS, NULL, maxdims);
|
||||
dataspace = H5Screate_simple (rank, mySize, NULL);
|
||||
if (maxdims[0] == NX_UNLIMITED)
|
||||
//XXX This limits you to one unlimited dimension
|
||||
if (maxdims[0] == H5S_UNLIMITED)
|
||||
{
|
||||
size[0]=iStart[0] + iSize[0];
|
||||
iRet = H5Dextend(pFile->iCurrentD, size);
|
||||
filespace = H5Dget_space(pFile->iCurrentD);
|
||||
|
||||
/* define slab */
|
||||
iRet = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, myStart,
|
||||
NULL, mySize, NULL);
|
||||
/* deal with HDF errors */
|
||||
if (iRet < 0)
|
||||
{
|
||||
NXIReportError (NXpData, "ERROR: selecting slab failed");
|
||||
return NX_ERROR;
|
||||
}
|
||||
/* write slab */
|
||||
iRet = H5Dwrite(pFile->iCurrentD, pFile->iCurrentT, dataspace,
|
||||
filespace, H5P_DEFAULT,data);
|
||||
iRet = H5Sclose(filespace);
|
||||
} else {
|
||||
dataspace = H5Screate_simple (rank, mySize, maxdims);
|
||||
for(i = 0; i < rank; i++)
|
||||
{
|
||||
size[i]=iStart[i] + iSize[i];
|
||||
}
|
||||
iRet = H5Dextend(pFile->iCurrentD, size);
|
||||
filespace = H5Dget_space(pFile->iCurrentD);
|
||||
|
||||
/* define slab */
|
||||
iRet = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, myStart,
|
||||
NULL, mySize, NULL);
|
||||
/* deal with HDF errors */
|
||||
if (iRet < 0)
|
||||
{
|
||||
NXIReportError (NXpData, "ERROR: selecting slab failed");
|
||||
return NX_ERROR;
|
||||
}
|
||||
/* write slab */
|
||||
iRet = H5Dwrite(pFile->iCurrentD, pFile->iCurrentT, dataspace,
|
||||
filespace, H5P_DEFAULT,data);
|
||||
if (iRet < 0)
|
||||
{
|
||||
NXIReportError (NXpData, "ERROR: writing slab failed");
|
||||
return NX_ERROR;
|
||||
}
|
||||
iRet = H5Sclose(filespace);
|
||||
} else {
|
||||
dataspace = H5Screate_simple (rank, mySize, NULL);
|
||||
/* define slab */
|
||||
iRet = H5Sselect_hyperslab(pFile->iCurrentS, H5S_SELECT_SET, myStart,
|
||||
NULL, mySize, NULL);
|
||||
|
||||
Reference in New Issue
Block a user