summaryrefslogtreecommitdiffstats
path: root/c++/src/H5Location.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'c++/src/H5Location.cpp')
-rw-r--r--c++/src/H5Location.cpp77
1 files changed, 64 insertions, 13 deletions
diff --git a/c++/src/H5Location.cpp b/c++/src/H5Location.cpp
index cd733c4..5100e12 100644
--- a/c++/src/H5Location.cpp
+++ b/c++/src/H5Location.cpp
@@ -70,17 +70,28 @@ H5Location::H5Location() : IdComponent() {}
// object.
// Parameters object_id - IN: Id of an existing HDF5 object
// Programmer Binh-Minh Ribler - 2000
+
+// *** Deprecation warning ***
+// This constructor is no longer appropriate because the data member "id" had
+// been moved to the sub-classes. It will be removed in 1.10 release. If its
+// removal does not raise any problems in 1.10, it will be removed from 1.8 in
+// subsequent releases.
//--------------------------------------------------------------------------
-H5Location::H5Location(const hid_t object_id) : IdComponent(object_id) {}
+H5Location::H5Location(const hid_t object_id) : IdComponent() {}
//--------------------------------------------------------------------------
// Function: H5Location copy constructor
-///\brief Copy constructor: makes a copy of the original H5Location
-/// instance.
+// Purpose: This noop copy constructor is removed as a result of the data
+// member "id" being moved down to sub-classes. (Mar 2015)
///\param original - IN: H5Location instance to copy
// Programmer Binh-Minh Ribler - 2000
+//
+// *** Deprecation warning ***
+// This constructor is no longer appropriate because the data member "id" had
+// been moved to the sub-classes. It is removed from 1.8.15 because it is
+// a noop and it can be generated by the compiler if needed.
//--------------------------------------------------------------------------
-H5Location::H5Location( const H5Location& original ) : IdComponent( original ) {}
+// H5Location::H5Location(const H5Location& original) : IdComponent() {}
#endif // DOXYGEN_SHOULD_SKIP_THIS
@@ -115,8 +126,9 @@ Attribute H5Location::createAttribute( const char* name, const DataType& data_ty
// If the attribute id is valid, create and return the Attribute object
if( attr_id > 0 )
{
- Attribute attr( attr_id );
- return( attr );
+ Attribute attr;
+ f_Attribute_setId(&attr, attr_id);
+ return( attr );
}
else
throw AttributeIException(inMemFunc("createAttribute"), "H5Acreate2 failed");
@@ -147,8 +159,9 @@ Attribute H5Location::openAttribute( const char* name ) const
hid_t attr_id = H5Aopen(getId(), name, H5P_DEFAULT);
if( attr_id > 0 )
{
- Attribute attr( attr_id );
- return( attr );
+ Attribute attr;
+ f_Attribute_setId(&attr, attr_id);
+ return( attr );
}
else
{
@@ -182,12 +195,13 @@ Attribute H5Location::openAttribute( const unsigned int idx ) const
H5_ITER_INC, (hsize_t)idx, H5P_DEFAULT, H5P_DEFAULT);
if( attr_id > 0 )
{
- Attribute attr( attr_id );
- return( attr );
+ Attribute attr;
+ f_Attribute_setId(&attr, attr_id);
+ return(attr);
}
else
{
- throw AttributeIException(inMemFunc("openAttribute"), "H5Aopen_by_idx failed");
+ throw AttributeIException(inMemFunc("openAttribute"), "H5Aopen_by_idx failed");
}
}
@@ -893,6 +907,12 @@ H5O_type_t H5Location::p_get_ref_obj_type(void *ref, H5R_type_t ref_type) const
///\return DataSpace object
///\exception H5::ReferenceException
// Programmer Binh-Minh Ribler - May, 2004
+// Modification
+// Mar 29, 2015
+// Used friend function to set id for DataSpace instead of the
+// existing id constructor or the setId method to avoid incrementing
+// ref count, as a work-around for a problem described in the JIRA
+// issue HDFFV-7947. -BMR
//--------------------------------------------------------------------------
DataSpace H5Location::getRegion(void *ref, H5R_type_t ref_type) const
{
@@ -902,8 +922,9 @@ DataSpace H5Location::getRegion(void *ref, H5R_type_t ref_type) const
throw ReferenceException(inMemFunc("getRegion"), "H5Rget_region failed");
}
try {
- DataSpace dataspace(space_id);
- return(dataspace);
+ DataSpace dataspace;
+ f_DataSpace_setId(&dataspace, space_id);
+ return(dataspace);
}
catch (DataSpaceIException E) {
throw ReferenceException(inMemFunc("getRegion"), E.getDetailMsg());
@@ -918,6 +939,36 @@ DataSpace H5Location::getRegion(void *ref, H5R_type_t ref_type) const
//--------------------------------------------------------------------------
H5Location::~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->id = new_id;
+}
+
+//--------------------------------------------------------------------------
+// Function: f_DataSpace_setId - friend
+// Purpose: This function is friend to class H5::DataSpace so that it can
+// can set DataSpace::id in order to work around a problem
+// described in the JIRA issue HDFFV-7947.
+// Applications shouldn't need to use it.
+// param dspace - IN/OUT: DataSpace object to be changed
+// param new_id - IN: New id to set
+// Programmer Binh-Minh Ribler - 2015
+//--------------------------------------------------------------------------
+void f_DataSpace_setId(DataSpace* dspace, hid_t new_id)
+{
+ dspace->id = new_id;
+}
+
#endif // DOXYGEN_SHOULD_SKIP_THIS
#ifndef H5_NO_NAMESPACE