inline void group::open(group const& other, std::string const& name) { if (hid_ >= 0) { throw error("h5xx::group object is already in use"); } if (exists_group(other, name)) { hid_ = H5Gopen(other.hid(), name.c_str(), H5P_DEFAULT); } else { hid_t lcpl_id = H5Pcreate(H5P_LINK_CREATE); // create group creation property list H5Pset_create_intermediate_group(lcpl_id, 1); // set intermediate link creation hid_ = H5Gcreate(other.hid(), name.c_str(), lcpl_id, H5P_DEFAULT, H5P_DEFAULT); } if (hid_ < 0){ throw error("creating or opening group \"" + name + "\""); } }
/** * return true if group "name" exists in group "grp" */ inline bool exists_group(group const& grp, std::string const& name) { hid_t hid = grp.hid(); H5E_BEGIN_TRY { hid = H5Gopen(hid, name.c_str(), H5P_DEFAULT); if (hid > 0) { H5Gclose(hid); } } H5E_END_TRY return (hid > 0); }