diff options
-rw-r--r-- | c++/src/H5Group.cpp | 53 | ||||
-rw-r--r-- | c++/src/H5Group.h | 15 |
2 files changed, 68 insertions, 0 deletions
diff --git a/c++/src/H5Group.cpp b/c++/src/H5Group.cpp index a7d72f8..b8cc4a4 100644 --- a/c++/src/H5Group.cpp +++ b/c++/src/H5Group.cpp @@ -53,6 +53,59 @@ hid_t Group::getLocId() const // Creates a copy of an existing Group using its id Group::Group( const hid_t group_id ) : H5Object( group_id ) {} +// Returns the number of objects in the group. +hsize_t Group::getNumObjs() const +{ + hsize_t num_objs; + herr_t ret_value = H5Gget_num_objs(id, &num_objs); + if(ret_value < 0) + { + throwException("getNumObjs", "H5Gget_num_objs failed"); + } + return (num_objs); +} + +// Retrieves the name of an object in a given group by giving index +ssize_t Group::getObjnameByIdx(hsize_t idx, string& name, size_t size) const +{ + char* name_C = new char[size]; + ssize_t name_len = H5Gget_objname_by_idx(id, idx, name_C, size); + if(name_len < 0) + { + throwException("getObjnameByIdx", "H5Gget_objname_by_idx failed"); + } + name = string( name_C ); + delete [] name_C; + return (name_len); +} + +// Returns the type of an object in a given group by giving index +int Group::getObjTypeByIdx(hsize_t idx) const +{ + int obj_type = H5Gget_objtype_by_idx(id, idx); + if (obj_type == H5G_UNKNOWN) + { + throwException("getObjTypeByIdx", "H5Gget_objtype_by_idx failed"); + } + return (obj_type); +} +int Group::getObjTypeByIdx(hsize_t idx, string& type_name) const +{ + int obj_type = H5Gget_objtype_by_idx(id, idx); + switch (obj_type) + { + case H5G_GROUP: type_name = string("group"); break; + case H5G_DATASET: type_name = string("dataset"); break; + case H5G_TYPE: type_name = string("datatype"); break; + case H5G_UNKNOWN: + default: + { + throwException("getObjTypeByIdx", "H5Gget_objtype_by_idx failed"); + } + } + return (obj_type); +} + // Iterates a user's function over the entries of a group. //int Group::iterateElems( const string& name, int *idx, H5G_iterate_t op , void *op_data ) //{ diff --git a/c++/src/H5Group.h b/c++/src/H5Group.h index c65a335..25c1b9e 100644 --- a/c++/src/H5Group.h +++ b/c++/src/H5Group.h @@ -28,6 +28,21 @@ class H5_DLLCPP Group : public H5Object, public CommonFG { // Copy constructor: makes a copy of the original object Group( const Group& original ); + // Returns the number of objects in the group. + hsize_t getNumObjs() const; + + // Retrieves the name of an object in a given group by giving index + //ssize_t getObjnameByIdx(hsize_t idx, char *name, size_t size) const; + ssize_t getObjnameByIdx(hsize_t idx, string& name, size_t size) const; + + // Returns the type of an object in a given group by giving index; + // the overloaded function also provided the object type in text as + // "group" for H5G_GROUP + // "dataset" for H5G_DATASET + // "datatype" for H5G_TYPE + int getObjTypeByIdx(hsize_t idx) const; + int getObjTypeByIdx(hsize_t idx, string& type_name) const; + // for CommonFG to get the file id virtual hid_t getLocId() const; |