summaryrefslogtreecommitdiffstats
path: root/c++/src/H5PropList.cpp
diff options
context:
space:
mode:
authorDana Robinson <derobins@hdfgroup.org>2015-10-04 07:33:40 (GMT)
committerDana Robinson <derobins@hdfgroup.org>2015-10-04 07:33:40 (GMT)
commit914643490ab581c4b0bb78ca30a8e1fa520b4d6d (patch)
tree53436d1611395e02c652c7ac5c075898fc2ae261 /c++/src/H5PropList.cpp
parent0ee053bb95a620b6f8109d22a372f6acc1cee300 (diff)
parent888a002cddaa4e1d9a165ea01dfe62f399df9eb9 (diff)
downloadhdf5-914643490ab581c4b0bb78ca30a8e1fa520b4d6d.zip
hdf5-914643490ab581c4b0bb78ca30a8e1fa520b4d6d.tar.gz
hdf5-914643490ab581c4b0bb78ca30a8e1fa520b4d6d.tar.bz2
[svn-r27946] Brought VDS branch in sync with trunk (up to r27945).
Tested on Ubuntu 15.04 (Linux 3.19 x86_64), gcc 4.9.2, MPICH 3.1.4 and CMake 3.3.2. - Autotools serial w/ Fortran, C++ - Autotools parallel w/ Fortran - CMake serial w/ Fortran, C++
Diffstat (limited to 'c++/src/H5PropList.cpp')
-rw-r--r--c++/src/H5PropList.cpp54
1 files changed, 52 insertions, 2 deletions
diff --git a/c++/src/H5PropList.cpp b/c++/src/H5PropList.cpp
index 70ec629..807aa0a 100644
--- a/c++/src/H5PropList.cpp
+++ b/c++/src/H5PropList.cpp
@@ -36,10 +36,60 @@ namespace H5 {
#endif // H5_NO_STD
#endif
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+// This DOXYGEN_SHOULD_SKIP_THIS block is a work-around approach to control
+// the order of creation and deletion of the global constants. See Design Notes
+// in "H5PredType.cpp" for information.
+
+// Initialize a pointer for the constant
+PropList* PropList::DEFAULT_ = 0;
+
//--------------------------------------------------------------------------
-///\brief Constant for default property.
+// Function: PropList::getConstant
+// Purpose: Creates a PropList object representing the HDF5 constant
+// H5P_DEFAULT, pointed to by PropList::DEFAULT_.
+// Exception H5::PropListIException
+// Description
+// If PropList::DEFAULT_ already points to an allocated object,
+// throw a PropListIException. This scenario should not happen.
+// Programmer Binh-Minh Ribler - 2015
//--------------------------------------------------------------------------
-const PropList PropList::DEFAULT;
+PropList* PropList::getConstant()
+{
+ // Tell the C library not to clean up, H5Library::termH5cpp will call
+ // H5close - more dependency if use H5Library::dontAtExit()
+ if (!IdComponent::H5dontAtexit_called)
+ {
+ (void) H5dont_atexit();
+ IdComponent::H5dontAtexit_called = true;
+ }
+
+ // If the constant pointer is not allocated, allocate it. Otherwise,
+ // throw because it shouldn't be.
+ if (DEFAULT_ == 0)
+ DEFAULT_ = new PropList(H5P_DEFAULT);
+ else
+ throw PropListIException("PropList::getConstant", "PropList::getConstant is being invoked on an allocated DEFAULT_");
+ return(DEFAULT_);
+}
+
+//--------------------------------------------------------------------------
+// Function: PropList::deleteConstants
+// Purpose: Deletes the constant object that PropList::DEFAULT_ points to.
+// Programmer Binh-Minh Ribler - 2015
+//--------------------------------------------------------------------------
+void PropList::deleteConstants()
+{
+ if (DEFAULT_ != 0)
+ delete DEFAULT_;
+}
+
+//--------------------------------------------------------------------------
+// Purpose Constant for default property.
+//--------------------------------------------------------------------------
+const PropList& PropList::DEFAULT = *getConstant();
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
//--------------------------------------------------------------------------
// Function Default constructor