diff options
-rw-r--r-- | c++/src/H5CommonFG.cpp | 19 | ||||
-rw-r--r-- | c++/src/H5CommonFG.h | 3 | ||||
-rw-r--r-- | c++/test/trefer.cpp | 26 |
3 files changed, 42 insertions, 6 deletions
diff --git a/c++/src/H5CommonFG.cpp b/c++/src/H5CommonFG.cpp index 8c1237d..2772903 100644 --- a/c++/src/H5CommonFG.cpp +++ b/c++/src/H5CommonFG.cpp @@ -1058,10 +1058,27 @@ H5std_string CommonFG::getObjnameByIdx(hsize_t idx) const /// each time the group is opened. // Programmer Binh-Minh Ribler - January, 2003 //-------------------------------------------------------------------------- +ssize_t CommonFG::getObjnameByIdx(hsize_t idx, char* name, size_t size) const +{ + ssize_t name_len = H5Lget_name_by_idx(getLocId(), ".", H5_INDEX_NAME, H5_ITER_INC, idx, name, size, H5P_DEFAULT); + if(name_len < 0) + { + throwException("getObjnameByIdx", "H5Lget_name_by_idx failed"); + } + return (name_len); +} + +//-------------------------------------------------------------------------- +// Function: CommonFG::getObjnameByIdx +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c std::string for \a name. +// Programmer Binh-Minh Ribler - January, 2003 +//-------------------------------------------------------------------------- ssize_t CommonFG::getObjnameByIdx(hsize_t idx, H5std_string& name, size_t size) const { char* name_C = new char[size]; - ssize_t name_len = H5Lget_name_by_idx(getLocId(), ".", H5_INDEX_NAME, H5_ITER_INC, idx, name_C, size, H5P_DEFAULT); + ssize_t name_len = getObjnameByIdx(idx, name_C, size); if(name_len < 0) { throwException("getObjnameByIdx", "H5Lget_name_by_idx failed"); diff --git a/c++/src/H5CommonFG.h b/c++/src/H5CommonFG.h index d472d42..75c9259 100644 --- a/c++/src/H5CommonFG.h +++ b/c++/src/H5CommonFG.h @@ -70,8 +70,9 @@ class H5_DLLCPP CommonFG { // Retrieves the name of an object in this group, given the // object's index. - ssize_t getObjnameByIdx(hsize_t idx, H5std_string& name, size_t size) const; H5std_string getObjnameByIdx(hsize_t idx) const; + ssize_t getObjnameByIdx(hsize_t idx, char* name, size_t size) const; + ssize_t getObjnameByIdx(hsize_t idx, H5std_string& name, size_t size) const; #ifndef H5_NO_DEPRECATED_SYMBOLS // Returns the type of an object in this group, given the diff --git a/c++/test/trefer.cpp b/c++/test/trefer.cpp index 16f6628..41ee808 100644 --- a/c++/test/trefer.cpp +++ b/c++/test/trefer.cpp @@ -47,6 +47,10 @@ const H5std_string FILE2("trefer2.h5"); const H5std_string FILE3("trefer3.h5"); const H5std_string DSET_DEFAULT_NAME("default"); +// Dataset 1 +const H5std_string DSET1_NAME("Dataset1"); +const int DSET1_LEN = 8; + const H5std_string MEMBER1( "a_name" ); const H5std_string MEMBER2( "b_name" ); const H5std_string MEMBER3( "c_name" ); @@ -109,7 +113,7 @@ static void test_reference_obj(void) group.setComment(".", write_comment); // Create a dataset (inside /Group1) - DataSet dataset = group.createDataSet("Dataset1", PredType::NATIVE_UINT, sid1); + DataSet dataset = group.createDataSet(DSET1_NAME, PredType::NATIVE_UINT, sid1); unsigned *tu32; // Temporary pointer to uint32 data for (tu32=(unsigned *)wbuf, i=0; i<SPACE1_DIM1; i++) @@ -223,13 +227,27 @@ static void test_reference_obj(void) catch (Exception E) {} // We expect this to fail // Test reading the name of an item in the group + + // Test getObjnameByIdx(idx) H5std_string name; name = group.getObjnameByIdx(0); - verify_val(name, "Dataset1", "Group::getObjnameByIdx", __LINE__, __FILE__); + verify_val(name, DSET1_NAME, "Group::getObjnameByIdx", __LINE__, __FILE__); + // Test getObjnameByIdx(hsize_t idx, H5std_string& name, size_t size) name.clear(); ssize_t name_size = group.getObjnameByIdx(0, name, 5); - verify_val(name, "Data", "Group::getObjnameByIdx(index,buf,buf_len)", __LINE__, __FILE__); - verify_val(name_size, 8, "Group::getObjnameByIdx(index,buf,buf_len)", __LINE__, __FILE__); + verify_val(name, "Data", "Group::getObjnameByIdx(index,(std::string)buf,buf_len)", __LINE__, __FILE__); + verify_val(name_size, DSET1_LEN, "Group::getObjnameByIdx(index,(std::string)buf,buf_len)", __LINE__, __FILE__); + + name.clear(); + name_size = group.getObjnameByIdx(0, name, name_size+1); + verify_val(name, DSET1_NAME, "Group::getObjnameByIdx(index,(std::string)buf,buf_len)", __LINE__, __FILE__); + verify_val(name_size, DSET1_LEN, "Group::getObjnameByIdx(index,(std::string)buf,buf_len)", __LINE__, __FILE__); + + // Test getObjnameByIdx(hsize_t idx, char* name, size_t size) + char name_C[DSET1_LEN+1]; + group.getObjnameByIdx(0, name, name_size+1); + verify_val(name, DSET1_NAME, "Group::getObjnameByIdx(index,(char*)buf,buf_len)", __LINE__, __FILE__); + verify_val(name_size, DSET1_LEN, "Group::getObjnameByIdx(index,(char*)buf,buf_len)", __LINE__, __FILE__); // Close group group.close(); |