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:
Ferdi Franceschini
2007-03-30 17:19:18 +10:00
committed by Douglas Clowes
parent a10234185d
commit d7303b0751

52
napi5.c
View File

@@ -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);