diff options
Diffstat (limited to 'c++/src/H5PropList.cpp')
-rw-r--r-- | c++/src/H5PropList.cpp | 54 |
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 |