diff options
author | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2006-10-22 08:22:30 (GMT) |
---|---|---|
committer | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2006-10-22 08:22:30 (GMT) |
commit | daa61b598616713bd39d360aeb9dbbd7ec5803cb (patch) | |
tree | 6765b17006dcfab43126e37f205c940c4201fefc /c++/src/H5IdComponent.cpp | |
parent | 118b1d38fa0d00d0cff94d33e753b11bd732951f (diff) | |
download | hdf5-daa61b598616713bd39d360aeb9dbbd7ec5803cb.zip hdf5-daa61b598616713bd39d360aeb9dbbd7ec5803cb.tar.gz hdf5-daa61b598616713bd39d360aeb9dbbd7ec5803cb.tar.bz2 |
[svn-r12795] Purpose: Fixing bug
Description:
Wrappers of H5Rcreate had incorrect prototypes.
Solution:
Added these overloaded functions for H5Rcreate wrapper to IdComponent:
void reference(void* ref, const char* name, DataSpace& dataspace,
H5R_type_t ref_type = H5R_DATASET_REGION) const;
void reference(void* ref, const char* name) const;
void reference(void* ref, const H5std_string& name) const;
Added these overloaded functions for H5Rdereference:
void dereference(IdComponent& obj, void* ref);
DataSet(IdComponent& obj, void* ref);
Group(IdComponent& obj, void* ref);
DataType(IdComponent& obj, void* ref);
The incorrect wrappers will be removed after announcing.
Platform tested:
Linux 2.4 (heping)
AIX 5.1 (copper)
SunOS 5.8 64-bit (sol)
Diffstat (limited to 'c++/src/H5IdComponent.cpp')
-rw-r--r-- | c++/src/H5IdComponent.cpp | 122 |
1 files changed, 118 insertions, 4 deletions
diff --git a/c++/src/H5IdComponent.cpp b/c++/src/H5IdComponent.cpp index 03c7809..c487ee6 100644 --- a/c++/src/H5IdComponent.cpp +++ b/c++/src/H5IdComponent.cpp @@ -11,6 +11,7 @@ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have * * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + #ifdef H5_VMS #include <iostream> #endif /*H5_VMS*/ @@ -21,6 +22,7 @@ #include "H5Exception.h" #include "H5Library.h" #include "H5IdComponent.h" +#include "H5DataSpace.h" #ifndef H5_NO_NAMESPACE namespace H5 { @@ -316,19 +318,121 @@ H5std_string IdComponent::p_get_file_name() const // name - IN: Name of the object to be referenced // dataspace - IN: Dataspace with selection // ref_type - IN: Type of reference; default to \c H5R_DATASET_REGION +// Exception H5::IdComponentException +// Programmer Binh-Minh Ribler - May, 2004 +//-------------------------------------------------------------------------- +void IdComponent::p_reference(void* ref, const char* name, hid_t space_id, H5R_type_t ref_type) const +{ + herr_t ret_value = H5Rcreate(ref, id, name, ref_type, space_id); + if (ret_value < 0) + { + throw IdComponentException("", "H5Rcreate failed"); + } +} + +//-------------------------------------------------------------------------- +// Function: IdComponent::reference +///\brief Creates a reference to an HDF5 object or a dataset region. +///\param ref - IN: Reference pointer +///\param name - IN: Name of the object to be referenced +///\param dataspace - IN: Dataspace with selection +///\param ref_type - IN: Type of reference to query, valid values are: +/// \li \c H5R_OBJECT \tReference is an object reference. +/// \li \c H5R_DATASET_REGION \tReference is a dataset region +/// reference. - this is the default +///\exception H5::IdComponentException +// Programmer Binh-Minh Ribler - May, 2004 +//-------------------------------------------------------------------------- +void IdComponent::reference(void* ref, const char* name, const DataSpace& dataspace, H5R_type_t ref_type) const +{ + try { + p_reference(ref, name, dataspace.getId(), ref_type); + } + catch (IdComponentException E) { + throw IdComponentException("IdComponent::reference", E.getDetailMsg()); + } +} + +//-------------------------------------------------------------------------- +// Function: IdComponent::reference +///\brief This is an overloaded function, provided for your convenience. +/// It differs from the above function in that it only creates +/// a reference to an HDF5 object, not to a dataset region. +///\param ref - IN: Reference pointer +///\param name - IN: Name of the object to be referenced - \c char pointer +///\exception H5::IdComponentException +///\par Description +// This function passes H5R_OBJECT and -1 to the protected +// function for it to pass to the C API H5Rcreate +// to create a reference to the named object. +// Programmer Binh-Minh Ribler - May, 2004 +//-------------------------------------------------------------------------- +void IdComponent::reference(void* ref, const char* name) const +{ + try { + p_reference(ref, name, -1, H5R_OBJECT); + } + catch (IdComponentException E) { + throw IdComponentException("IdComponent::reference", E.getDetailMsg()); + } +} + +//-------------------------------------------------------------------------- +// Function: IdComponent::reference +///\brief This is an overloaded function, provided for your convenience. +/// It differs from the above function in that it takes an +/// \c std::string for the object's name. +///\param ref - IN: Reference pointer +///\param name - IN: Name of the object to be referenced - \c std::string +// Programmer Binh-Minh Ribler - May, 2004 +//-------------------------------------------------------------------------- +void IdComponent::reference(void* ref, const H5std_string& name) const +{ + reference(ref, name.c_str()); +} + +//-------------------------------------------------------------------------- +// Function: IdComponent::p_reference (protected) +// Purpose Creates a reference to an HDF5 object or a dataset region. +// Parameters +// name - IN: Name of the object to be referenced +// dataspace - IN: Dataspace with selection +// ref_type - IN: Type of reference; default to \c H5R_DATASET_REGION // Return A reference // Exception H5::IdComponentException +// Notes This function is incorrect, and will be removed in the near +// future after notifying users of the new APIs ::reference's. +// BMR - Oct 8, 2006 // Programmer Binh-Minh Ribler - May, 2004 //-------------------------------------------------------------------------- void* IdComponent::p_reference(const char* name, hid_t space_id, H5R_type_t ref_type) const { - void *ref=NULL; - herr_t ret_value = H5Rcreate(ref, id, name, ref_type, space_id); + hobj_ref_t ref; + herr_t ret_value = H5Rcreate(&ref, id, name, ref_type, space_id); if (ret_value < 0) { throw IdComponentException("", "H5Rcreate failed"); } - return(ref); + return (reinterpret_cast<void*>(ref)); +} + +//-------------------------------------------------------------------------- +// Function: IdComponent::dereference +// Purpose Opens the HDF5 object referenced. +// Parameters +// obj - IN: Dataset reference object is in or location of +// object that the dataset is located within. +// ref - IN: Reference pointer +// Exception H5::IdComponentException +// Programmer Binh-Minh Ribler - Oct, 2006 +//-------------------------------------------------------------------------- +void IdComponent::dereference(IdComponent& obj, void* ref) +{ + id = H5Rdereference(obj.getId(), H5R_OBJECT, ref); + if (id < 0) + { + throw IdComponentException("", "H5Rdereference failed"); + } } //-------------------------------------------------------------------------- @@ -347,10 +451,19 @@ void* IdComponent::p_reference(const char* name, hid_t space_id, H5R_type_t ref_ //-------------------------------------------------------------------------- H5G_obj_t IdComponent::p_get_obj_type(void *ref, H5R_type_t ref_type) const { +#ifdef H5_WANT_H5_V1_4_COMPAT + H5G_obj_t obj_type = H5Rget_object_type(id, ref); +#else H5G_obj_t obj_type = H5Rget_obj_type(id, ref_type, ref); +#endif + if (obj_type == H5G_UNKNOWN) { - throw IdComponentException("", "H5R_get_obj_type failed"); +#ifdef H5_WANT_H5_V1_4_COMPAT + throw IdComponentException("", "H5Rget_object_type failed"); +#else + throw IdComponentException("", "H5Rget_obj_type failed"); +#endif } return(obj_type); } @@ -395,6 +508,7 @@ bool IdComponent::p_valid_id(const hid_t obj_id) const else return true; } + #endif // DOXYGEN_SHOULD_SKIP_THIS #ifndef H5_NO_NAMESPACE |