diff options
Diffstat (limited to 'CarpetDev/CarpetIOF5/src/attributes.cc')
-rw-r--r-- | CarpetDev/CarpetIOF5/src/attributes.cc | 247 |
1 files changed, 170 insertions, 77 deletions
diff --git a/CarpetDev/CarpetIOF5/src/attributes.cc b/CarpetDev/CarpetIOF5/src/attributes.cc index 9ca1f109c..ff237534a 100644 --- a/CarpetDev/CarpetIOF5/src/attributes.cc +++ b/CarpetDev/CarpetIOF5/src/attributes.cc @@ -20,19 +20,19 @@ namespace CarpetIOF5 { // Write an int attribute - bool WriteAttribute (hid_t const group, - char const *const name, - int const ivalue) + bool WriteAttribute(hid_t const group, + char const *const name, + int const ivalue) { bool error_flag = false; - hid_t const dataspace = FAILWARN (H5Screate (H5S_SCALAR)); + hid_t const dataspace = FAILWARN(H5Screate(H5S_SCALAR)); hid_t const attribute = - FAILWARN (H5Acreate (group, name, H5T_NATIVE_INT, dataspace, - H5P_DEFAULT, H5P_DEFAULT)); - FAILWARN (H5Awrite (attribute, H5T_NATIVE_INT, &ivalue)); - FAILWARN (H5Aclose (attribute)); - FAILWARN (H5Sclose (dataspace)); + FAILWARN(H5Acreate(group, name, H5T_NATIVE_INT, dataspace, + H5P_DEFAULT, H5P_DEFAULT)); + FAILWARN(H5Awrite(attribute, H5T_NATIVE_INT, &ivalue)); + FAILWARN(H5Aclose(attribute)); + FAILWARN(H5Sclose(dataspace)); return error_flag; } @@ -40,19 +40,19 @@ namespace CarpetIOF5 { // Write a double attribute - bool WriteAttribute (hid_t const group, - char const *const name, - double const dvalue) + bool WriteAttribute(hid_t const group, + char const *const name, + double const dvalue) { bool error_flag = false; - hid_t const dataspace = FAILWARN (H5Screate (H5S_SCALAR)); + hid_t const dataspace = FAILWARN(H5Screate(H5S_SCALAR)); hid_t const attribute = - FAILWARN (H5Acreate (group, name, H5T_NATIVE_INT, dataspace, - H5P_DEFAULT, H5P_DEFAULT)); - FAILWARN (H5Awrite (attribute, H5T_NATIVE_DOUBLE, &dvalue)); - FAILWARN (H5Aclose (attribute)); - FAILWARN (H5Sclose (dataspace)); + FAILWARN(H5Acreate(group, name, H5T_NATIVE_INT, dataspace, + H5P_DEFAULT, H5P_DEFAULT)); + FAILWARN(H5Awrite(attribute, H5T_NATIVE_DOUBLE, &dvalue)); + FAILWARN(H5Aclose(attribute)); + FAILWARN(H5Sclose(dataspace)); return error_flag; } @@ -60,44 +60,51 @@ namespace CarpetIOF5 { // Write a string attribute - bool WriteAttribute (hid_t const group, - char const *const name, - char const *const svalue) + bool WriteAttribute(hid_t const group, + char const *const name, + char const *const svalue) { bool error_flag = false; - hid_t const datatype = FAILWARN (H5Tcopy (H5T_C_S1)); - FAILWARN (H5Tset_size (datatype, strlen(svalue) + 1)); - hid_t const dataspace = FAILWARN (H5Screate (H5S_SCALAR)); + hid_t const datatype = FAILWARN(H5Tcopy(H5T_C_S1)); + FAILWARN(H5Tset_size(datatype, strlen(svalue) + 1)); + hid_t const dataspace = FAILWARN(H5Screate(H5S_SCALAR)); hid_t const attribute = - FAILWARN (H5Acreate (group, name, datatype, dataspace, - H5P_DEFAULT, H5P_DEFAULT)); - FAILWARN (H5Awrite (attribute, datatype, svalue)); - FAILWARN (H5Aclose (attribute)); - FAILWARN (H5Sclose (dataspace)); - FAILWARN (H5Tclose (datatype)); + FAILWARN(H5Acreate(group, name, datatype, dataspace, + H5P_DEFAULT, H5P_DEFAULT)); + FAILWARN(H5Awrite(attribute, datatype, svalue)); + FAILWARN(H5Aclose(attribute)); + FAILWARN(H5Sclose(dataspace)); + FAILWARN(H5Tclose(datatype)); return error_flag; } + bool WriteAttribute(hid_t const group, + char const *const name, + string const svalue) + { + return WriteAttribute(group, name, svalue.c_str()); + } + // Write an array of int attributes - bool WriteAttribute (hid_t const group, - char const *const name, - int const *const ivalues, - int const nvalues) + bool WriteAttribute(hid_t const group, + char const *const name, + int const *const ivalues, + int const nvalues) { bool error_flag = false; hsize_t const size = nvalues; - hid_t const dataspace = FAILWARN (H5Screate_simple (1, &size, NULL)); + hid_t const dataspace = FAILWARN(H5Screate_simple(1, &size, NULL)); hid_t const attribute = - FAILWARN (H5Acreate (group, name, H5T_NATIVE_INT, - dataspace, H5P_DEFAULT, H5P_DEFAULT)); - FAILWARN (H5Awrite (attribute, H5T_NATIVE_INT, ivalues)); - FAILWARN (H5Aclose (attribute)); - FAILWARN (H5Sclose (dataspace)); + FAILWARN(H5Acreate(group, name, H5T_NATIVE_INT, + dataspace, H5P_DEFAULT, H5P_DEFAULT)); + FAILWARN(H5Awrite(attribute, H5T_NATIVE_INT, ivalues)); + FAILWARN(H5Aclose(attribute)); + FAILWARN(H5Sclose(dataspace)); return error_flag; } @@ -105,21 +112,21 @@ namespace CarpetIOF5 { // Write an array of double attributes - bool WriteAttribute (hid_t const group, - char const *const name, - double const *const dvalues, - int const nvalues) + bool WriteAttribute(hid_t const group, + char const *const name, + double const *const dvalues, + int const nvalues) { bool error_flag = false; hsize_t const size = nvalues; - hid_t const dataspace = FAILWARN (H5Screate_simple (1, &size, NULL)); + hid_t const dataspace = FAILWARN(H5Screate_simple(1, &size, NULL)); hid_t const attribute = - FAILWARN (H5Acreate (group, name, H5T_NATIVE_DOUBLE, - dataspace, H5P_DEFAULT, H5P_DEFAULT)); - FAILWARN (H5Awrite (attribute, H5T_NATIVE_DOUBLE, dvalues)); - FAILWARN (H5Aclose (attribute)); - FAILWARN (H5Sclose (dataspace)); + FAILWARN(H5Acreate(group, name, H5T_NATIVE_DOUBLE, + dataspace, H5P_DEFAULT, H5P_DEFAULT)); + FAILWARN(H5Awrite(attribute, H5T_NATIVE_DOUBLE, dvalues)); + FAILWARN(H5Aclose(attribute)); + FAILWARN(H5Sclose(dataspace)); return error_flag; } @@ -127,33 +134,33 @@ namespace CarpetIOF5 { // Write an array of string attributes - bool WriteAttribute (hid_t const group, - char const *const name, - char const *const *const svalues, - int const nvalues) + bool WriteAttribute(hid_t const group, + char const *const name, + char const *const *const svalues, + int const nvalues) { bool error_flag = false; size_t maxstrlen = 0; for (int i=0; i<nvalues; ++i) { - maxstrlen = max (maxstrlen, strlen(svalues[i])); + maxstrlen = max(maxstrlen, strlen(svalues[i])); } - vector<char> svalue (nvalues * (maxstrlen+1)); + vector<char> svalue(nvalues * (maxstrlen+1)); for (int i=0; i<nvalues; ++i) { - strncpy (&svalue.at(i*maxstrlen), svalues[i], maxstrlen+1); + strncpy(&svalue.at(i*maxstrlen), svalues[i], maxstrlen+1); } - hid_t const datatype = FAILWARN (H5Tcopy (H5T_C_S1)); - FAILWARN (H5Tset_size (datatype, maxstrlen + 1)); + hid_t const datatype = FAILWARN(H5Tcopy(H5T_C_S1)); + FAILWARN(H5Tset_size(datatype, maxstrlen + 1)); hsize_t const size = nvalues; - hid_t const dataspace = FAILWARN (H5Screate_simple (1, & size, NULL)); + hid_t const dataspace = FAILWARN(H5Screate_simple(1, & size, NULL)); hid_t const attribute = - FAILWARN (H5Acreate (group, name, datatype, dataspace, - H5P_DEFAULT, H5P_DEFAULT)); - FAILWARN (H5Awrite (attribute, datatype, &svalue.front())); - FAILWARN (H5Aclose (attribute)); - FAILWARN (H5Sclose (dataspace)); - FAILWARN (H5Tclose (datatype)); + FAILWARN(H5Acreate(group, name, datatype, dataspace, + H5P_DEFAULT, H5P_DEFAULT)); + FAILWARN(H5Awrite(attribute, datatype, &svalue.front())); + FAILWARN(H5Aclose(attribute)); + FAILWARN(H5Sclose(dataspace)); + FAILWARN(H5Tclose(datatype)); return error_flag; } @@ -161,22 +168,108 @@ namespace CarpetIOF5 { // Write a large string attribute - bool WriteLargeAttribute (hid_t const group, - char const *const name, - char const *const svalue) + bool WriteLargeAttribute(hid_t const group, + char const *const name, + char const *const svalue) { bool error_flag = false; // Create a dataset, since the data may not fit into an attribute - hsize_t const size = strlen (svalue) + 1; - hid_t const dataspace = FAILWARN (H5Screate_simple (1, & size, NULL)); + hsize_t const size = strlen(svalue) + 1; + hid_t const dataspace = FAILWARN(H5Screate_simple(1, & size, NULL)); hid_t const dataset = - FAILWARN (H5Dcreate (group, name, H5T_NATIVE_CHAR, - dataspace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)); - FAILWARN (H5Dwrite (dataset, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL, - H5P_DEFAULT, svalue)); - FAILWARN (H5Dclose (dataset)); - FAILWARN (H5Sclose (dataspace)); + FAILWARN(H5Dcreate(group, name, H5T_NATIVE_CHAR, + dataspace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)); + FAILWARN(H5Dwrite(dataset, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL, + H5P_DEFAULT, svalue)); + FAILWARN(H5Dclose(dataset)); + FAILWARN(H5Sclose(dataspace)); + + return error_flag; + } + + + + // Read an int attribute + bool ReadAttribute(hid_t const group, + char const * const name, + int& ivalue) + { + bool error_flag = false; + + hid_t const attribute = FAILWARN(H5Aopen_name(group, name)); + FAILWARN(H5Aread(attribute, H5T_NATIVE_INT, &ivalue)); + FAILWARN(H5Aclose(attribute)); + + return error_flag; + } + + + + // Read a double attribute + bool ReadAttribute(hid_t const group, + char const * const name, + double& dvalue) + { + bool error_flag = false; + + hid_t const attribute = FAILWARN(H5Aopen_name(group, name)); + FAILWARN(H5Aread(attribute, H5T_NATIVE_DOUBLE, &dvalue)); + FAILWARN(H5Aclose(attribute)); + + return error_flag; + } + + + + // Read a string attribute + bool ReadAttribute(hid_t const group, + char const * const name, + string& svalue) + { + bool error_flag = false; + + hid_t const attribute = FAILWARN(H5Aopen_name(group, name)); + hid_t const datatype = FAILWARN(H5Aget_type(attribute)); + hsize_t const size = FAILWARN(H5Tget_size(datatype)); + char buf[size+1]; + hid_t const memdatatype = FAILWARN(H5Tcopy(H5T_C_S1)); + FAILWARN(H5Tset_size(memdatatype, size)); + FAILWARN(H5Aread(attribute, memdatatype, buf)); + buf[size] = '\0'; // just to be safe + svalue = string(buf); + FAILWARN(H5Tclose(memdatatype)); + FAILWARN(H5Tclose(datatype)); + FAILWARN(H5Aclose(attribute)); + + return error_flag; + } + + + + // Read a large string attribute + bool ReadLargeAttribute(hid_t const group, + char const *const name, + string& svalue) + { + bool error_flag = false; + + // Read a dataset + hid_t const dataset = FAILWARN(H5Dopen(group, name, H5P_DEFAULT)); + hid_t const dataspace = FAILWARN(H5Dget_space(dataset)); + int const rank = FAILWARN(H5Sget_simple_extent_ndims(dataspace)); + if (rank != 1) error_flag = true; + hsize_t dims[rank]; + FAILWARN(H5Sget_simple_extent_dims(dataspace, dims, NULL)); + hsize_t size = 1; + for (int d=0; d<rank; ++d) size *= dims[d]; + char buf[size+1]; + FAILWARN(H5Dread(dataset, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL, + H5P_DEFAULT, buf)); + buf[size] = '\0'; // just to be safe + svalue = string(buf); + FAILWARN(H5Sclose(dataspace)); + FAILWARN(H5Dclose(dataset)); return error_flag; } |