diff options
author | tradke <tradke@21a6bef8-4479-4f54-8f8d-0db94a2919ef> | 2001-06-11 12:17:05 +0000 |
---|---|---|
committer | tradke <tradke@21a6bef8-4479-4f54-8f8d-0db94a2919ef> | 2001-06-11 12:17:05 +0000 |
commit | 92bc87240784d78894c4ec1ba5be639f41c72628 (patch) | |
tree | 3fa0d9b920ec6bb7b5471a73cd34c69172bd7519 | |
parent | ea73a72cafabd1f2d89b5a2ebbcbf3c2b173efde (diff) |
Bugfix for opening/closing files: only try to get the number of datasets
from a successfully opened file; only close successfully opened files.
Fixed some more gcc warnings.
Also putting in Werner's recent changes to the development repository version
for passing const pointers.
git-svn-id: http://svn.cactuscode.org/arrangements/CactusExternal/FlexIO/trunk@20 21a6bef8-4479-4f54-8f8d-0db94a2919ef
-rw-r--r-- | src/H5IO.cc | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/src/H5IO.cc b/src/H5IO.cc index 91c460c..276f2c2 100644 --- a/src/H5IO.cc +++ b/src/H5IO.cc @@ -31,9 +31,10 @@ hid_t H5IO::DataType2H5(IObase::DataType nt){ return H5T_NATIVE_ULLONG; case Char16: // unicode character type return H5T_NATIVE_USHORT; - } + default: printf("H5IO::H52DataType(): Don't recognize type %d\n",(int)nt); return -1; + } } IObase::DataType H5IO::H5DataType2DataType(hid_t nt){ @@ -135,10 +136,10 @@ IObase::DataType H5IO::H52DataType(hid_t &nt){ } #endif int H5IO::createdataspace(int rank,CONST int *dims){ - if(dataspacevalid && rankf==rank){ + if(dataspacevalid && rankf==(hsize_t) rank){ // lets compare dims int val=1; - for(int i=0;i<rank;i++) if(dims[i]!=dimsf[i]) val=0; + for(int i=0;i<rank;i++) if((hsize_t) dims[i]!=dimsf[i]) val=0; if(val){ // current dataspace is sufficient nitems++; index=nitems-1; // error in returnval here! @@ -252,7 +253,7 @@ void H5IO::getdatasetname(int _index, // in void H5IO::enddataspace(){ if(!dataspacevalid) return; dataspacevalid=0; - for(int i=0;i<rankf;i++) dimsf[i]=0; + for(int i=0;(hsize_t) i<rankf;i++) dimsf[i]=0; rankf=0; H5Sclose(dataspace); } @@ -314,26 +315,26 @@ void H5IO::enddataset(){ datasetvalid=0; } -H5IO::H5IO(CONST char *fname,AccessMode access):IObase(fname,access),filevalid(0),datasetvalid(0),dataspacevalid(0),datatypevalid(0),hasread(0){ - filevalid=1; +H5IO::H5IO(CONST char *fname,AccessMode access):IObase(fname,access),filevalid(0),datasetvalid(0),datatypevalid(0),dataspacevalid(0),hasread(0){ + nitems = 0; switch(accessmode){ case Read: file=H5Fopen(fname, H5F_ACC_RDONLY, H5P_DEFAULT); - nitems = getndatasets(); + if (file >= 0) nitems = getndatasets(); break; case Write: file=H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); - nitems = 0; break; case Append: file=H5Fopen(fname, H5F_ACC_RDWR, H5P_DEFAULT); - nitems = getndatasets(); + if (file >= 0) nitems = getndatasets(); break; default: - filevalid=0; // set filevalid flag to failure value + file = -1; puts("H5IO: constructor... invalid accessmode"); break; } + filevalid = file >= 0; } H5IO::~H5IO(){ @@ -341,7 +342,7 @@ H5IO::~H5IO(){ enddataset(); // close all dataset and datatype IDs which are open enddatatype(); enddataspace(); - if(filevalid>=0) H5Fclose(file); + if(file>=0) H5Fclose(file); filevalid=0; } @@ -431,6 +432,7 @@ int H5IO::writeAnnotation(CONST char *annotation){ int32 ref=SDidtoref(sid); return (int)DFANputlabel(filename,DFTAG_NDG,ref,(char*)annotation); #endif + return 1; } int H5IO::readAnnotationInfo(int number,int &length){ @@ -475,7 +477,7 @@ int H5IO::writeAttribute(CONST char *name,IObase::DataType typeID,Long length,co dimsa[0]=length; hid_t shape = H5Screate_simple(1, dimsa, NULL); hid_t attrib = H5Acreate(dataset,name,DataType2H5(typeID),shape,H5P_DEFAULT); - H5Awrite(attrib, DataType2H5(typeID), data); + H5Awrite(attrib, DataType2H5(typeID), const_cast<void*>(data) ); H5Aclose(attrib); H5Sclose(shape); return 1; @@ -487,7 +489,7 @@ int H5IO::readAttributeInfo(int number,char *name,IObase::DataType &typeID,Long hid_t atype = H5Aget_type(attrib); hid_t ashape = H5Aget_space(attrib); H5Aget_name(attrib,maxnamelen,name); - hsize_t ranka = H5Sget_simple_extent_ndims(ashape); + /* hsize_t ranka = */ H5Sget_simple_extent_ndims(ashape); // rank should always be 1; hsize_t dimsa[5]; H5Sget_simple_extent_dims(ashape,dimsa,NULL); @@ -537,7 +539,7 @@ int H5IO::readAttributeInfo(CONST char *name,IObase::DataType &typeID,Long &nele hid_t attrib = H5Aopen_name(dataset,name); hid_t atype = H5Aget_type(attrib); hid_t ashape = H5Aget_space(attrib); - hsize_t ranka = H5Sget_simple_extent_ndims(ashape); + /* hsize_t ranka = */ H5Sget_simple_extent_ndims(ashape); // rank should always be 1; hsize_t dimsa[5]; H5Sget_simple_extent_dims(ashape,dimsa,NULL); @@ -565,7 +567,7 @@ int H5IO::nAttributes(){ selectdataset(index); unsigned idx=0; int count=0; - int aindex = H5Aiterate(dataset,&idx,H5IOattr_count,&count); + H5Aiterate(dataset,&idx,H5IOattr_count,&count); return count; } //================Chunking Interface----------------------- |