diff options
author | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2016-12-19 06:34:18 (GMT) |
---|---|---|
committer | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2016-12-19 06:34:18 (GMT) |
commit | 798cdad29a49e0883446f7dad3c7992d53ea6ee3 (patch) | |
tree | 1de6ed6b6115be9cecd3753b63d3c69b54d03a80 /c++/src/H5Object.cpp | |
parent | 700c6ae9851752d8ccf6fc18cdd5b44dcf9603a5 (diff) | |
download | hdf5-798cdad29a49e0883446f7dad3c7992d53ea6ee3.zip hdf5-798cdad29a49e0883446f7dad3c7992d53ea6ee3.tar.gz hdf5-798cdad29a49e0883446f7dad3c7992d53ea6ee3.tar.bz2 |
Purpose: Improvement for HDFFV-10004
Description:
When adding wrappers for H5Lexists, a new class, LinkAccPropList, was
added to the C++ API, triggered complicated circular dependencies. Thus,
some improvement was made to resolve the problems.
- Replaced existing functions openXxxType with individual type constructors
+ Added individual XxxType constructors to replace the existing functions
openXxxType because it's rather awkward to use these functions.
+ Moved openXxxType from H5Location back to CommonFG
+ Put back CommonFG as a baseclass of Group for openXxxType functions.
+ This replacement should improve usability and prevent the problem of
circular dependencies.
- Removed overloaded constructor that takes an Attribute when there is
already one that takes H5Location because Attribute inherits from
H5Location now.
Platforms tested:
Linux/32 2.6 (jam)
Darwin (osx1010test)
Linux/64 (platypus)
Diffstat (limited to 'c++/src/H5Object.cpp')
-rw-r--r-- | c++/src/H5Object.cpp | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/c++/src/H5Object.cpp b/c++/src/H5Object.cpp index ab79d9d..66699d4 100644 --- a/c++/src/H5Object.cpp +++ b/c++/src/H5Object.cpp @@ -15,6 +15,7 @@ #include <string> +#include "H5private.h" // for HDmemset #include "H5Include.h" #include "H5Exception.h" #include "H5IdComponent.h" @@ -29,11 +30,11 @@ #include "H5DataType.h" #include "H5DataSpace.h" #include "H5AbstractDs.h" +#include "H5CommonFG.h" #include "H5Group.h" #include "H5File.h" #include "H5DataSet.h" #include "H5Attribute.h" -#include "H5private.h" // for HDmemset namespace H5 { @@ -86,6 +87,21 @@ H5Object::H5Object() : H5Location() {} // H5Object::H5Object(const H5Object& original) : H5Location() {} //-------------------------------------------------------------------------- +// Function: f_Attribute_setId - friend +// Purpose: This function is friend to class H5::Attribute so that it +// can set Attribute::id in order to work around a problem +// described in the JIRA issue HDFFV-7947. +// Applications shouldn't need to use it. +// param attr - IN/OUT: Attribute object to be changed +// param new_id - IN: New id to set +// Programmer Binh-Minh Ribler - 2015 +//-------------------------------------------------------------------------- +void f_Attribute_setId(Attribute* attr, hid_t new_id) +{ + attr->p_setId(new_id); +} + +//-------------------------------------------------------------------------- // Function: H5Object::createAttribute ///\brief Creates an attribute for a group, dataset, or named datatype. ///\param name - IN: Name of the attribute @@ -241,6 +257,40 @@ int H5Object::iterateAttrs( attr_operator_t user_op, unsigned *_idx, void *op_da } //-------------------------------------------------------------------------- +// Function: H5Object::objVersion +///\brief Returns the header version of this HDF5 object. +///\return Object version, which can have the following values: +/// \li \c H5O_VERSION_1 +/// \li \c H5O_VERSION_2 +///\exception H5::ObjHeaderIException +/// Exception will be thrown when: +/// - an error returned by the C API +/// - version number is not one of the valid values above +// Programmer Binh-Minh Ribler - December, 2016 +//-------------------------------------------------------------------------- + /* unsigned H5Object::objVersion() const +{ + H5O_info_t objinfo; + unsigned version = 0; + + // Use C API to get information of the object + herr_t ret_value = H5Oget_info(getId(), &objinfo); + + // Throw exception if C API returns failure + if (ret_value < 0) + throw Exception(inMemFunc("objVersion"), "H5Oget_info failed"); + // Return a valid version or throw an exception for invalid value + else + { + version = objinfo.hdr.version; + if (version != H5O_VERSION_1 && version != H5O_VERSION_2) + throw ObjHeaderIException("objVersion", "Invalid version for object"); + } + return(version); +} + */ + +//-------------------------------------------------------------------------- // Function: H5Object::getNumAttrs ///\brief Returns the number of attributes attached to this HDF5 object. ///\return Number of attributes |