#include "hdf5_utils.h" namespace nc2pro { std::string hdf5_get_string_attr_FILE_fixed(hid_t &file, std::string attr) { std::string val; if (file < 0) return ""; hid_t att = H5Aopen(file, attr.c_str(), H5P_DEFAULT); hid_t att_type = H5Aget_type(att); char str[10000] = {0}; H5Aread(att, att_type, &str); val = std::string(str); H5Tclose(att_type); H5Aclose(att); return val; } int hdf5_get_int(hid_t &file, std::string path) { int32_t val = 0; hid_t dataset = H5Dopen1(file, path.c_str()); if (dataset < 0) return -1e6; H5Dread(dataset, H5T_NATIVE_INT32, H5S_ALL, H5S_ALL, H5P_DEFAULT, &val); H5Dclose(dataset); return val; } float hdf5_get_float(hid_t &file, std::string path) { float val = 0.0; hid_t dataset = H5Dopen1(file, path.c_str()); if (dataset < 0) return -1e6; H5Dread(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &val); H5Dclose(dataset); return val; } float hdf5_get_float_attr(hid_t &file, std::string path, std::string attr) { float val = -1e6; hid_t dataset = H5Dopen1(file, path.c_str()); if (dataset < 0) return -1e6; hid_t att = H5Aopen(dataset, attr.c_str(), H5P_DEFAULT); if (att < 0) return -1e6; H5Aread(att, H5T_NATIVE_FLOAT, &val); H5Aclose(att); H5Dclose(dataset); return val; } double hdf5_get_double_attr_FILE(hid_t &file, std::string attr) { double val = 0.0; if (file < 0) return -1e6; hid_t att = H5Aopen(file, attr.c_str(), H5P_DEFAULT); hid_t att_type = H5Aget_type(att); H5Aread(att, att_type, &val); H5Tclose(att_type); H5Aclose(att); return val; } std::string hdf5_get_string_attr_FILE(hid_t &file, std::string attr) { std::string val; if (file < 0) return ""; hid_t att = H5Aopen(file, attr.c_str(), H5P_DEFAULT); hid_t att_type = H5Aget_type(att); char *str; H5Aread(att, att_type, &str); val = std::string(str); H5free_memory(str); H5Tclose(att_type); H5Aclose(att); return val; } } // namespace nc2pro