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;
|
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,27 +1008,37 @@ 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);
|
||||||
iRet = H5Dextend(pFile->iCurrentD, size);
|
for(i = 0; i < rank; i++)
|
||||||
filespace = H5Dget_space(pFile->iCurrentD);
|
{
|
||||||
|
size[i]=iStart[i] + iSize[i];
|
||||||
/* define slab */
|
}
|
||||||
iRet = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, myStart,
|
iRet = H5Dextend(pFile->iCurrentD, size);
|
||||||
NULL, mySize, NULL);
|
filespace = H5Dget_space(pFile->iCurrentD);
|
||||||
/* deal with HDF errors */
|
|
||||||
if (iRet < 0)
|
/* define slab */
|
||||||
{
|
iRet = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, myStart,
|
||||||
NXIReportError (NXpData, "ERROR: selecting slab failed");
|
NULL, mySize, NULL);
|
||||||
return NX_ERROR;
|
/* deal with HDF errors */
|
||||||
}
|
if (iRet < 0)
|
||||||
/* write slab */
|
{
|
||||||
iRet = H5Dwrite(pFile->iCurrentD, pFile->iCurrentT, dataspace,
|
NXIReportError (NXpData, "ERROR: selecting slab failed");
|
||||||
filespace, H5P_DEFAULT,data);
|
return NX_ERROR;
|
||||||
iRet = H5Sclose(filespace);
|
}
|
||||||
} else {
|
/* 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 */
|
/* 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);
|
||||||
|
|||||||
Reference in New Issue
Block a user