aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortradke <tradke@21a6bef8-4479-4f54-8f8d-0db94a2919ef>2001-06-11 12:17:05 +0000
committertradke <tradke@21a6bef8-4479-4f54-8f8d-0db94a2919ef>2001-06-11 12:17:05 +0000
commit92bc87240784d78894c4ec1ba5be639f41c72628 (patch)
tree3fa0d9b920ec6bb7b5471a73cd34c69172bd7519
parentea73a72cafabd1f2d89b5a2ebbcbf3c2b173efde (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.cc32
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-----------------------