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

18
napi5.c
View File

@@ -992,7 +992,7 @@ static void ignoreError(void *data, char *text){
int rank; int rank;
hssize_t myStart[H5S_MAX_RANK]; hssize_t myStart[H5S_MAX_RANK];
hsize_t mySize[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; hid_t filespace,dataspace;
pFile = NXI5assert (fid); pFile = NXI5assert (fid);
@@ -1008,10 +1008,14 @@ static void ignoreError(void *data, char *text){
mySize[i] = iSize[i]; mySize[i] = iSize[i];
} }
iRet = H5Sget_simple_extent_dims(pFile->iCurrentS, NULL, maxdims); iRet = H5Sget_simple_extent_dims(pFile->iCurrentS, NULL, maxdims);
dataspace = H5Screate_simple (rank, mySize, NULL); //XXX This limits you to one unlimited dimension
if (maxdims[0] == NX_UNLIMITED) if (maxdims[0] == H5S_UNLIMITED)
{ {
size[0]=iStart[0] + iSize[0]; dataspace = H5Screate_simple (rank, mySize, maxdims);
for(i = 0; i < rank; i++)
{
size[i]=iStart[i] + iSize[i];
}
iRet = H5Dextend(pFile->iCurrentD, size); iRet = H5Dextend(pFile->iCurrentD, size);
filespace = H5Dget_space(pFile->iCurrentD); filespace = H5Dget_space(pFile->iCurrentD);
@@ -1027,8 +1031,14 @@ static void ignoreError(void *data, char *text){
/* write slab */ /* write slab */
iRet = H5Dwrite(pFile->iCurrentD, pFile->iCurrentT, dataspace, iRet = H5Dwrite(pFile->iCurrentD, pFile->iCurrentT, dataspace,
filespace, H5P_DEFAULT,data); filespace, H5P_DEFAULT,data);
if (iRet < 0)
{
NXIReportError (NXpData, "ERROR: writing slab failed");
return NX_ERROR;
}
iRet = H5Sclose(filespace); iRet = H5Sclose(filespace);
} else { } else {
dataspace = H5Screate_simple (rank, mySize, NULL);
/* define slab */ /* define slab */
iRet = H5Sselect_hyperslab(pFile->iCurrentS, H5S_SELECT_SET, myStart, iRet = H5Sselect_hyperslab(pFile->iCurrentS, H5S_SELECT_SET, myStart,
NULL, mySize, NULL); NULL, mySize, NULL);