summaryrefslogtreecommitdiffstats
path: root/c++/src/H5DataType.cpp
diff options
context:
space:
mode:
authorBinh-Minh Ribler <bmribler@hdfgroup.org>2015-04-05 04:12:08 (GMT)
committerBinh-Minh Ribler <bmribler@hdfgroup.org>2015-04-05 04:12:08 (GMT)
commit743686ebe1b0d961b6ac5ac9aa035eac36e9b629 (patch)
tree171b935be8dce5005fb41a92030e89bd1c8c46df /c++/src/H5DataType.cpp
parent083ef61b05cd28cae00ee348b6222538534fb12f (diff)
downloadhdf5-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/H5DataType.cpp')
-rw-r--r--c++/src/H5DataType.cpp28
1 files changed, 27 insertions, 1 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);
}