diff options
author | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2015-04-05 04:12:08 (GMT) |
---|---|---|
committer | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2015-04-05 04:12:08 (GMT) |
commit | 743686ebe1b0d961b6ac5ac9aa035eac36e9b629 (patch) | |
tree | 171b935be8dce5005fb41a92030e89bd1c8c46df /c++/src | |
parent | 083ef61b05cd28cae00ee348b6222538534fb12f (diff) | |
download | hdf5-743686ebe1b0d961b6ac5ac9aa035eac36e9b629.zip hdf5-743686ebe1b0d961b6ac5ac9aa035eac36e9b629.tar.gz hdf5-743686ebe1b0d961b6ac5ac9aa035eac36e9b629.tar.bz2 |
[svn-r26729] Purpose: Fix bugs
Description:
- Changed DataType::operator= to simply copy the id of rhs instead of
calling H5Tcopy because, when the operator= is invoked, a different
datatype id is created and it won't have the same characteristics as
rhs', specifically, if the rhs represents a named datatype, "this"
would still be a transient datatype.
- Added a DataType constructor that takes a PredType object, and this
constructor will cause H5Tcopy to generate another datatype id, from a
predefined datatype.
- Fixed various mistakes in tests.
- Fixed typo that caused failure on Windows.
Merged from trunk r26640 and r26462
Platforms tested:
Linux/64 (platypus)
Linux/32 2.6 (jam/gnu and jam/icc 15)
SunOS 5.11 (emu)
Diffstat (limited to 'c++/src')
-rw-r--r-- | c++/src/H5DataType.cpp | 28 | ||||
-rw-r--r-- | c++/src/H5DataType.h | 3 | ||||
-rw-r--r-- | c++/src/H5IntType.h | 2 | ||||
-rw-r--r-- | c++/src/H5Location.h | 2 |
4 files changed, 32 insertions, 3 deletions
diff --git a/c++/src/H5DataType.cpp b/c++/src/H5DataType.cpp index a6cd6b7..72e3bc2 100644 --- a/c++/src/H5DataType.cpp +++ b/c++/src/H5DataType.cpp @@ -139,6 +139,22 @@ DataType::DataType(const DataType& original) : H5Object() } //-------------------------------------------------------------------------- +// Function: DataType overloaded constructor +///\brief Creates a integer type using a predefined type +///\param pred_type - IN: Predefined datatype +///\exception H5::DataTypeIException +// Programmer Binh-Minh Ribler - 2000 +// Description +// This is so that when a predefined type is passed in, a +// copy of it is made, not just a duplicate of the HDF5 id. +//-------------------------------------------------------------------------- +DataType::DataType(const PredType& pred_type) : H5Object() +{ + // use DataType::copy to make a copy of this predefined type + copy(pred_type); +} + +//-------------------------------------------------------------------------- // Function: DataType::copy ///\brief Copies an existing datatype to this datatype object ///\param like_type - IN: Datatype to be copied @@ -201,11 +217,21 @@ void DataType::copy(const DataSet& dset) // Makes a copy of the type on the right hand side and stores // the new id in the left hand side object. // Programmer Binh-Minh Ribler - 2000 +// Modification +// Changed operator= to simply copy the id of rhs instead of +// calling H5Tcopy because, when the operator= is invoked, a +// different datatype id is created and it won't have the same +// characteristics as the original one, specifically, if the +// rhs represents a named datatype, "this" would still be a +// transient datatype. //-------------------------------------------------------------------------- DataType& DataType::operator=( const DataType& rhs ) { if (this != &rhs) - copy(rhs); + { + id = rhs.id; + incRefCount(); // increment number of references to this id + } return(*this); } diff --git a/c++/src/H5DataType.h b/c++/src/H5DataType.h index dca0c87..a120736 100644 --- a/c++/src/H5DataType.h +++ b/c++/src/H5DataType.h @@ -39,6 +39,9 @@ class H5_DLLCPP DataType : public H5Object { // Copy constructor: makes a copy of the original object DataType( const DataType& original ); + // Creates a copy of a predefined type + DataType(const PredType& pred_type); + // Creates a datatype by way of dereference. DataType(const H5Location& loc, const void* ref, H5R_type_t ref_type = H5R_OBJECT); DataType(const Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT); diff --git a/c++/src/H5IntType.h b/c++/src/H5IntType.h index 95fa642..e28f5c2 100644 --- a/c++/src/H5IntType.h +++ b/c++/src/H5IntType.h @@ -24,7 +24,7 @@ namespace H5 { //! Class IntType operates on HDF5 integer datatype. class H5_DLLCPP IntType : public AtomType { public: - // Creates a integer type using a predefined type + // Creates an integer type using a predefined type IntType(const PredType& pred_type); // Gets the integer datatype of the specified dataset diff --git a/c++/src/H5Location.h b/c++/src/H5Location.h index 20df435..9c9ecec 100644 --- a/c++/src/H5Location.h +++ b/c++/src/H5Location.h @@ -149,7 +149,7 @@ class H5_DLLCPP H5Location : public IdComponent { H5Location(const hid_t loc_id); // Copy constructor. - H5Location(const H5Location& original); + // H5Location(const H5Location& original); // Creates a reference to an HDF5 object or a dataset region. void p_reference(void* ref, const char* name, hid_t space_id, H5R_type_t ref_type) const; |