diff options
author | Frank Willmore <Frank.Willmore@hdfgroup.org> | 2016-12-19 18:09:38 (GMT) |
---|---|---|
committer | Frank Willmore <Frank.Willmore@hdfgroup.org> | 2016-12-19 18:09:38 (GMT) |
commit | d0a7400a344394f2a17157d2c8250adfbd57e93a (patch) | |
tree | 29d1e3be8400846f432656b09d360556d789ed8e /c++/src | |
parent | a2e93075f2ec86dad367a8aafadc20f6386f9b0e (diff) | |
parent | ab3963b28e59419f8e857ec224dd4efa3ea6dd8e (diff) | |
download | hdf5-d0a7400a344394f2a17157d2c8250adfbd57e93a.zip hdf5-d0a7400a344394f2a17157d2c8250adfbd57e93a.tar.gz hdf5-d0a7400a344394f2a17157d2c8250adfbd57e93a.tar.bz2 |
Merging in latest from upstream (HDFFV/hdf5:refs/heads/develop)
* commit 'ab3963b28e59419f8e857ec224dd4efa3ea6dd8e': (214 commits)
Merge SWMR-related testing to existing tests.
Bring over tweak for missing environment variable.
Update CMake configuration files with SWMR accumulator changes.
Add missing accumulator test.
Merge SWMR-oriented accumulator tests from revise_chunks to develop.
Bring Java SWMR changes from revise_chunks to develop branch
Snapshot version 1.9 release 235
Change dlopen from RTLD_NOW to RTLD_LAZY
Fix bad implementation of Windows nanosleep equivalent.
Removed NDEBUG guards from H5AC test functions.
Bring SWMR-related tools changes from revise_chunks to develop.
Bring over changes from revise_chunks that cleanup recent SWMR changes from code review feedback.
Updated the H5FS cache code to grab the correct tag and modified the freespace test to use dxpls that have been tagged with the H5AC__FREESPACE_TAG global tag instead of H5AC_ind_read_dxpl_id. The library code now expects the owner of the free space manager to tag it so the owner-less free space managers in the freespace tag had to be tagged with *something* to avoid cache errors.
Updated the comment for the valgrind fix.
Fixed a valgrind problem in file shutdown exposed by the swmr.c test.
Reduce timeout as normal run time on windows is less then 10 min
Updated the icc flags (C flags only).
Another Java oversight (sorry, don't have Java configured on my Mac)
Correct oversight in Java test and remove direct VFD from SWMR supported drivers.
Bring SWMR support in to the main development branch. (Finally!) More tests and the tool and API wrappers will be coming in over the weekend.
...
Diffstat (limited to 'c++/src')
60 files changed, 1625 insertions, 1798 deletions
diff --git a/c++/src/CMakeLists.txt b/c++/src/CMakeLists.txt index 526b223..2db0a9f 100644 --- a/c++/src/CMakeLists.txt +++ b/c++/src/CMakeLists.txt @@ -133,5 +133,6 @@ if (HDF5_EXPORTED_TARGETS) ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT cpplibraries RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT cpplibraries FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT cpplibraries + INCLUDES DESTINATION include ) endif (HDF5_EXPORTED_TARGETS) diff --git a/c++/src/H5AbstractDs.cpp b/c++/src/H5AbstractDs.cpp index f0579fc..49de4bb 100644 --- a/c++/src/H5AbstractDs.cpp +++ b/c++/src/H5AbstractDs.cpp @@ -19,17 +19,18 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" +#include "H5FaccProp.h" +#include "H5FcreatProp.h" +#include "H5OcreatProp.h" +#include "H5DcreatProp.h" +#include "H5DxferProp.h" #include "H5Location.h" #include "H5Object.h" -#include "H5AbstractDs.h" #include "H5DataSpace.h" -#include "H5OcreatProp.h" -#include "H5DcreatProp.h" +#include "H5AbstractDs.h" #include "H5Alltypes.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif //-------------------------------------------------------------------------- // Function: AbstractDs default constructor @@ -324,6 +325,4 @@ VarLenType AbstractDs::getVarLenType() const //-------------------------------------------------------------------------- AbstractDs::~AbstractDs() {} -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5AbstractDs.h b/c++/src/H5AbstractDs.h index 6975d6f..1b4775c 100644 --- a/c++/src/H5AbstractDs.h +++ b/c++/src/H5AbstractDs.h @@ -17,9 +17,7 @@ #ifndef __AbstractDs_H #define __AbstractDs_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif class ArrayType; class CompType; @@ -94,7 +92,5 @@ class H5_DLLCPP AbstractDs { // This member function is implemented by DataSet and Attribute - pure virtual. virtual hid_t p_get_type() const = 0; }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __AbstractDs_H diff --git a/c++/src/H5ArrayType.cpp b/c++/src/H5ArrayType.cpp index d7d1a35..0bdd09c 100644 --- a/c++/src/H5ArrayType.cpp +++ b/c++/src/H5ArrayType.cpp @@ -19,16 +19,14 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5Location.h" -#include "H5Object.h" #include "H5OcreatProp.h" #include "H5DcreatProp.h" +#include "H5Location.h" +#include "H5Object.h" #include "H5DataType.h" #include "H5ArrayType.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif //-------------------------------------------------------------------------- // Function: ArrayType default constructor @@ -154,6 +152,4 @@ int ArrayType::getArrayDims(hsize_t* dims) const //-------------------------------------------------------------------------- ArrayType::~ArrayType() {} -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5ArrayType.h b/c++/src/H5ArrayType.h index fb6c711..0e9ef46 100644 --- a/c++/src/H5ArrayType.h +++ b/c++/src/H5ArrayType.h @@ -17,13 +17,13 @@ #ifndef __H5ArrayType_H #define __H5ArrayType_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif /*! \class ArrayType \brief Class ArrayType inherits from DataType and provides wrappers for the HDF5's Array Datatypes. + + Inheritance: DataType -> H5Object -> H5Location -> IdComponent */ class H5_DLLCPP ArrayType : public DataType { public: @@ -57,7 +57,5 @@ class H5_DLLCPP ArrayType : public DataType { // Default constructor ArrayType(); }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5ArrayType_H diff --git a/c++/src/H5AtomType.cpp b/c++/src/H5AtomType.cpp index 6308821..fa47e0c 100644 --- a/c++/src/H5AtomType.cpp +++ b/c++/src/H5AtomType.cpp @@ -19,16 +19,14 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5Location.h" -#include "H5Object.h" #include "H5OcreatProp.h" #include "H5DcreatProp.h" +#include "H5Location.h" +#include "H5Object.h" #include "H5DataType.h" #include "H5AtomType.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif #ifndef DOXYGEN_SHOULD_SKIP_THIS //-------------------------------------------------------------------------- @@ -295,6 +293,4 @@ void AtomType::setPad( H5T_pad_t lsb, H5T_pad_t msb ) const AtomType::~AtomType() {} #endif // DOXYGEN_SHOULD_SKIP_THIS -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5AtomType.h b/c++/src/H5AtomType.h index 792312a..d84b53f 100644 --- a/c++/src/H5AtomType.h +++ b/c++/src/H5AtomType.h @@ -17,9 +17,7 @@ #ifndef __H5AtomType_H #define __H5AtomType_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif /*! \class AtomType \brief AtomType is a base class, inherited by IntType, FloatType, @@ -27,6 +25,8 @@ namespace H5 { AtomType provides operations on HDF5 atomic datatypes. It also inherits from DataType. + + Inheritance: DataType -> H5Object -> H5Location -> IdComponent */ class H5_DLLCPP AtomType : public DataType { public: @@ -79,7 +79,5 @@ class H5_DLLCPP AtomType : public DataType { AtomType( const hid_t existing_id ); #endif // DOXYGEN_SHOULD_SKIP_THIS }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5AtomType_H diff --git a/c++/src/H5Attribute.cpp b/c++/src/H5Attribute.cpp index 5454583..4daf174 100644 --- a/c++/src/H5Attribute.cpp +++ b/c++/src/H5Attribute.cpp @@ -24,13 +24,13 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5Location.h" -#include "H5Object.h" -#include "H5AbstractDs.h" #include "H5FaccProp.h" #include "H5FcreatProp.h" #include "H5OcreatProp.h" #include "H5DcreatProp.h" +#include "H5Location.h" +#include "H5Object.h" +#include "H5AbstractDs.h" #include "H5DataType.h" #include "H5DataSpace.h" #include "H5Group.h" @@ -38,13 +38,9 @@ #include "H5Attribute.h" #include "H5private.h" // for HDfree -#ifndef H5_NO_NAMESPACE namespace H5 { -#ifndef H5_NO_STD - using std::cerr; - using std::endl; -#endif // H5_NO_STD -#endif +using std::cerr; +using std::endl; class H5_DLLCPP H5Object; // forward declaration for UserData4Aiterate @@ -644,6 +640,4 @@ Attribute::~Attribute() } } -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5Attribute.h b/c++/src/H5Attribute.h index 6590c23..c27bbdf 100644 --- a/c++/src/H5Attribute.h +++ b/c++/src/H5Attribute.h @@ -17,9 +17,7 @@ #ifndef __H5Attribute_H #define __H5Attribute_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif /*! \class Attribute \brief Class Attribute operates on HDF5 attributes. @@ -28,6 +26,8 @@ namespace H5 { Attribute and DataSet are derivatives of AbstractDs. Attribute also inherits from H5Location because an attribute can be used to specify a location. + + Inheritance: multiple H5Location/AbstractDs -> IdComponent */ class H5_DLLCPP Attribute : public AbstractDs, public H5Location { public: @@ -102,7 +102,5 @@ class H5_DLLCPP Attribute : public AbstractDs, public H5Location { friend void f_Attribute_setId(Attribute* attr, hid_t new_id); }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5Attribute_H diff --git a/c++/src/H5Classes.h b/c++/src/H5Classes.h index de7cf4a..bed0cae 100644 --- a/c++/src/H5Classes.h +++ b/c++/src/H5Classes.h @@ -17,9 +17,7 @@ #ifndef __H5Classes_H #define __H5Classes_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif class Exception; class IdComponent; class H5Location; @@ -39,14 +37,11 @@ namespace H5 { class FloatType; class StrType; class CompType; - //class RefType; class AbstractDs; class DataSet; class Group; class H5File; class Attribute; class H5Library; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5Classes_H diff --git a/c++/src/H5CommonFG.cpp b/c++/src/H5CommonFG.cpp index 0c18293..a1e0c3f 100644 --- a/c++/src/H5CommonFG.cpp +++ b/c++/src/H5CommonFG.cpp @@ -19,13 +19,13 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5Location.h" -#include "H5Object.h" #include "H5FaccProp.h" #include "H5FcreatProp.h" #include "H5OcreatProp.h" #include "H5DxferProp.h" #include "H5DcreatProp.h" +#include "H5Location.h" +#include "H5Object.h" #include "H5CommonFG.h" #include "H5Group.h" #include "H5AbstractDs.h" @@ -48,10 +48,7 @@ // GroupIException. // December 2000 -#ifndef H5_NO_NAMESPACE namespace H5 { -using namespace std; -#endif #ifndef DOXYGEN_SHOULD_SKIP_THIS //-------------------------------------------------------------------------- @@ -70,7 +67,4 @@ CommonFG::~CommonFG() {} #endif // DOXYGEN_SHOULD_SKIP_THIS -#ifndef H5_NO_NAMESPACE } -#endif - diff --git a/c++/src/H5CommonFG.h b/c++/src/H5CommonFG.h index 956be21..a68d586 100644 --- a/c++/src/H5CommonFG.h +++ b/c++/src/H5CommonFG.h @@ -17,9 +17,7 @@ #ifndef __CommonFG_H #define __CommonFG_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif /*! \class CommonFG \brief \a CommonFG was an abstract base class of H5File and H5Group. @@ -43,9 +41,6 @@ class H5_DLLCPP CommonFG { #endif // DOXYGEN_SHOULD_SKIP_THIS }; // end of CommonFG declaration - -#ifndef H5_NO_NAMESPACE } -#endif #endif // __CommonFG_H diff --git a/c++/src/H5CompType.cpp b/c++/src/H5CompType.cpp index 6105273..784d171 100644 --- a/c++/src/H5CompType.cpp +++ b/c++/src/H5CompType.cpp @@ -19,20 +19,18 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5Location.h" -#include "H5Object.h" #include "H5OcreatProp.h" #include "H5DcreatProp.h" +#include "H5DxferProp.h" +#include "H5Location.h" +#include "H5Object.h" #include "H5Alltypes.h" #include "H5AbstractDs.h" -#include "H5DxferProp.h" #include "H5DataSpace.h" #include "H5DataSet.h" #include "H5private.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif //-------------------------------------------------------------------------- // Function: CompType default constructor @@ -485,6 +483,4 @@ void CompType::setSize(size_t size) const //-------------------------------------------------------------------------- CompType::~CompType() {} -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5CompType.h b/c++/src/H5CompType.h index bd6d76c..6552f9e 100644 --- a/c++/src/H5CompType.h +++ b/c++/src/H5CompType.h @@ -17,13 +17,13 @@ #ifndef __H5CompType_H #define __H5CompType_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif /*! \class CompType \brief CompType is a derivative of a DataType and operates on HDF5 compound datatypes. + + Inheritance: DataType -> H5Object -> H5Location -> IdComponent */ class H5_DLLCPP CompType : public DataType { public: @@ -112,7 +112,5 @@ class H5_DLLCPP CompType : public DataType { // getMemberXxxType hid_t p_get_member_type(unsigned member_num) const; }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5CompType_H diff --git a/c++/src/H5Cpp.h b/c++/src/H5Cpp.h index 4e82ee3..800eb90 100644 --- a/c++/src/H5Cpp.h +++ b/c++/src/H5Cpp.h @@ -22,17 +22,16 @@ #include "H5IdComponent.h" #include "H5DataSpace.h" #include "H5PropList.h" +#include "H5FaccProp.h" +#include "H5FcreatProp.h" +#include "H5OcreatProp.h" +#include "H5DcreatProp.h" +#include "H5DxferProp.h" #include "H5Location.h" #include "H5Object.h" #include "H5AbstractDs.h" #include "H5Attribute.h" -#include "H5OcreatProp.h" -#include "H5DcreatProp.h" -#include "H5CommonFG.h" #include "H5DataType.h" -#include "H5DxferProp.h" -#include "H5FaccProp.h" -#include "H5FcreatProp.h" #include "H5AtomType.h" #include "H5PredType.h" #include "H5EnumType.h" diff --git a/c++/src/H5DataSet.cpp b/c++/src/H5DataSet.cpp index 4b5d0b7..749a933 100644 --- a/c++/src/H5DataSet.cpp +++ b/c++/src/H5DataSet.cpp @@ -24,14 +24,13 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5Location.h" -#include "H5Object.h" -#include "H5PropList.h" +#include "H5FaccProp.h" +#include "H5FcreatProp.h" #include "H5OcreatProp.h" #include "H5DxferProp.h" #include "H5DcreatProp.h" -#include "H5FaccProp.h" -#include "H5FcreatProp.h" +#include "H5Location.h" +#include "H5Object.h" #include "H5DataType.h" #include "H5DataSpace.h" #include "H5AbstractDs.h" @@ -41,13 +40,9 @@ #include "H5DataSet.h" #include "H5private.h" // for HDfree -#ifndef H5_NO_NAMESPACE namespace H5 { -#ifndef H5_NO_STD - using std::cerr; - using std::endl; -#endif // H5_NO_STD -#endif +using std::cerr; +using std::endl; //-------------------------------------------------------------------------- // Function: DataSet default constructor @@ -851,6 +846,4 @@ DataSet::~DataSet() } } -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5DataSet.h b/c++/src/H5DataSet.h index c97e5b0..ee9ef28 100644 --- a/c++/src/H5DataSet.h +++ b/c++/src/H5DataSet.h @@ -17,9 +17,7 @@ #ifndef __H5DataSet_H #define __H5DataSet_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif /*! \class DataSet \brief Class DataSet operates on HDF5 datasets. @@ -27,6 +25,8 @@ namespace H5 { An datasets has many characteristics similar to an attribute, thus both Attribute and DataSet are derivatives of AbstractDs. DataSet also inherits from H5Object because a dataset is an HDF5 object. + + Inheritance: multiple H5Object/AbstractDs -> H5Location -> IdComponent */ class H5_DLLCPP DataSet : public H5Object, public AbstractDs { public: @@ -131,7 +131,5 @@ class H5_DLLCPP DataSet : public H5Object, public AbstractDs { friend void f_DataSet_setId(DataSet* dset, hid_t new_id); }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5DataSet_H diff --git a/c++/src/H5DataSpace.cpp b/c++/src/H5DataSpace.cpp index b24e94f..cb479e1 100644 --- a/c++/src/H5DataSpace.cpp +++ b/c++/src/H5DataSpace.cpp @@ -25,13 +25,9 @@ #include "H5IdComponent.h" #include "H5DataSpace.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#ifndef H5_NO_STD - using std::cerr; - using std::endl; -#endif // H5_NO_STD -#endif +using std::cerr; +using std::endl; #ifndef DOXYGEN_SHOULD_SKIP_THIS // This DOXYGEN_SHOULD_SKIP_THIS block is a work-around approach to control @@ -706,6 +702,4 @@ DataSpace::~DataSpace() } } -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5DataSpace.h b/c++/src/H5DataSpace.h index 384f1a3..e76bc72 100644 --- a/c++/src/H5DataSpace.h +++ b/c++/src/H5DataSpace.h @@ -17,11 +17,14 @@ #ifndef __H5DataSpace_H #define __H5DataSpace_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif -//! Class DataSpace operates on HDF5 dataspaces. +/*! \class DataSpace + \brief Class DataSpace inherits from IdComponent and provides wrappers for + the HDF5's dataspaces. + + Inheritance: IdComponent +*/ class H5_DLLCPP DataSpace : public IdComponent { public: ///\brief Default DataSpace objects @@ -147,7 +150,5 @@ class H5_DLLCPP DataSpace : public IdComponent { #endif // DOXYGEN_SHOULD_SKIP_THIS }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5DataSpace_H diff --git a/c++/src/H5DataType.cpp b/c++/src/H5DataType.cpp index b784dd4..7dcd343 100644 --- a/c++/src/H5DataType.cpp +++ b/c++/src/H5DataType.cpp @@ -24,14 +24,14 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5DataSpace.h" -#include "H5Location.h" -#include "H5Object.h" #include "H5FaccProp.h" #include "H5FcreatProp.h" #include "H5OcreatProp.h" #include "H5DcreatProp.h" #include "H5DxferProp.h" +#include "H5DataSpace.h" +#include "H5Location.h" +#include "H5Object.h" #include "H5DataType.h" #include "H5AtomType.h" #include "H5PredType.h" @@ -42,13 +42,9 @@ #include "H5File.h" #include "H5Attribute.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#ifndef H5_NO_STD - using std::cerr; - using std::endl; -#endif // H5_NO_STD -#endif +using std::cerr; +using std::endl; //-------------------------------------------------------------------------- // Function: DataType default constructor @@ -133,7 +129,7 @@ DataType::DataType(const Attribute& attr, const void* ref, H5R_type_t ref_type, //-------------------------------------------------------------------------- // Function: DataType copy constructor -///\brief Copy constructor: makes a copy of the original DataType object. +///\brief Copy constructor: makes a copy of the original DataType object // Programmer Binh-Minh Ribler - 2000 //-------------------------------------------------------------------------- DataType::DataType(const DataType& original) : H5Object(), id(original.id) @@ -783,6 +779,4 @@ DataType::~DataType() cerr << inMemFunc("~DataType - ") << close_error.getDetailMsg() << endl; } } -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5DataType.h b/c++/src/H5DataType.h index 7584cff..9ac6ecf 100644 --- a/c++/src/H5DataType.h +++ b/c++/src/H5DataType.h @@ -20,9 +20,7 @@ #ifndef __H5DataType_H #define __H5DataType_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif /*! \class DataType \brief Class DataType provides generic operations on HDF5 datatypes. @@ -30,6 +28,8 @@ namespace H5 { DataType inherits from H5Object because a named datatype is an HDF5 object and is a base class of ArrayType, AtomType, CompType, EnumType, and VarLenType. + + Inheritance: DataType -> H5Object -> H5Location -> IdComponent */ class H5_DLLCPP DataType : public H5Object { public: @@ -144,7 +144,5 @@ class H5_DLLCPP DataType : public H5Object { void p_commit(hid_t loc_id, const char* name); }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5DataType_H diff --git a/c++/src/H5DcreatProp.cpp b/c++/src/H5DcreatProp.cpp index 06b5024..b307bde 100644 --- a/c++/src/H5DcreatProp.cpp +++ b/c++/src/H5DcreatProp.cpp @@ -20,14 +20,12 @@ #include "H5IdComponent.h" #include "H5PropList.h" #include "H5OcreatProp.h" +#include "H5DcreatProp.h" #include "H5Location.h" #include "H5Object.h" -#include "H5DcreatProp.h" #include "H5DataType.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif #ifndef DOXYGEN_SHOULD_SKIP_THIS // This DOXYGEN_SHOULD_SKIP_THIS block is a work-around approach to control @@ -747,6 +745,4 @@ void DSetCreatPropList::getExternal( unsigned idx, size_t name_size, char* name, //-------------------------------------------------------------------------- DSetCreatPropList::~DSetCreatPropList () {} -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5DcreatProp.h b/c++/src/H5DcreatProp.h index fed41b4..787d3ec 100644 --- a/c++/src/H5DcreatProp.h +++ b/c++/src/H5DcreatProp.h @@ -20,13 +20,15 @@ #ifndef __H5DSCreatPropList_H #define __H5DSCreatPropList_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif + +class DataType; /*! \class DSetCreatPropList - \brief Class DSetCreatPropList represents the dataset creation property - list. + \brief Class DSetCreatPropList inherits from ObjCreatPropList and provides + wrappers for the HDF5 dataset creation property functions. + + Inheritance: ObjCreatPropList -> PropList -> IdComponent */ class H5_DLLCPP DSetCreatPropList : public ObjCreatPropList { public: @@ -143,7 +145,5 @@ class H5_DLLCPP DSetCreatPropList : public ObjCreatPropList { #endif // DOXYGEN_SHOULD_SKIP_THIS }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5DSCreatPropList_H diff --git a/c++/src/H5DxferProp.cpp b/c++/src/H5DxferProp.cpp index c228b44..7d9b943 100644 --- a/c++/src/H5DxferProp.cpp +++ b/c++/src/H5DxferProp.cpp @@ -22,9 +22,7 @@ #include "H5DxferProp.h" #include "H5private.h" // for HDmemset -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif #ifndef DOXYGEN_SHOULD_SKIP_THIS // This DOXYGEN_SHOULD_SKIP_THIS block is a work-around approach to control @@ -565,7 +563,5 @@ H5Z_EDC_t DSetMemXferPropList::getEDCCheck() const //-------------------------------------------------------------------------- DSetMemXferPropList::~DSetMemXferPropList() {} -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5DxferProp.h b/c++/src/H5DxferProp.h index 31fc372..81361cf 100644 --- a/c++/src/H5DxferProp.h +++ b/c++/src/H5DxferProp.h @@ -20,13 +20,13 @@ #ifndef __H5DSetMemXferPropList_H #define __H5DSetMemXferPropList_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif /*! \class DSetMemXferPropList - \brief Class DSetMemXferPropList represents the dataset memory and - transfer property list. + \brief Class DSetCreatPropList inherits from PropList and provides + wrappers for the HDF5 dataset memory and transfer property list. + + Inheritance: ObjCreatPropList -> PropList -> IdComponent */ class H5_DLLCPP DSetMemXferPropList : public PropList { public: @@ -131,7 +131,5 @@ class H5_DLLCPP DSetMemXferPropList : public PropList { #endif // DOXYGEN_SHOULD_SKIP_THIS }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5DSetMemXferPropList_H diff --git a/c++/src/H5EnumType.cpp b/c++/src/H5EnumType.cpp index f0a2138..2b614a9 100644 --- a/c++/src/H5EnumType.cpp +++ b/c++/src/H5EnumType.cpp @@ -19,13 +19,13 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" +#include "H5OcreatProp.h" +#include "H5DcreatProp.h" +#include "H5DxferProp.h" +#include "H5DataSpace.h" #include "H5Location.h" #include "H5Object.h" #include "H5AbstractDs.h" -#include "H5DxferProp.h" -#include "H5DataSpace.h" -#include "H5OcreatProp.h" -#include "H5DcreatProp.h" #include "H5DataType.h" #include "H5DataSet.h" #include "H5AtomType.h" @@ -33,9 +33,7 @@ #include "H5EnumType.h" #include "H5private.h" // for HDmemset -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif //-------------------------------------------------------------------------- // Function: EnumType default constructor @@ -277,6 +275,4 @@ void EnumType::getMemberValue( unsigned memb_no, void *value ) const //-------------------------------------------------------------------------- EnumType::~EnumType() {} -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5EnumType.h b/c++/src/H5EnumType.h index fe36e8b..1f96552 100644 --- a/c++/src/H5EnumType.h +++ b/c++/src/H5EnumType.h @@ -17,11 +17,14 @@ #ifndef __H5EnumType_H #define __H5EnumType_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif -//! Class EnumType operates on HDF5 enum datatypes. +/*! \class EnumType + \brief EnumType is a derivative of a DataType and operates on HDF5 + enum datatypes. + + Inheritance: DataType -> H5Object -> H5Location -> IdComponent +*/ class H5_DLLCPP EnumType : public DataType { public: @@ -72,7 +75,5 @@ class H5_DLLCPP EnumType : public DataType { virtual ~EnumType(); }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5EnumType_H diff --git a/c++/src/H5Exception.cpp b/c++/src/H5Exception.cpp index 7b81066..2e23587 100644 --- a/c++/src/H5Exception.cpp +++ b/c++/src/H5Exception.cpp @@ -18,9 +18,7 @@ #include "H5Include.h" #include "H5Exception.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif const char Exception::DEFAULT_MSG[] = "No detailed information provided"; @@ -586,6 +584,5 @@ IdComponentException::IdComponentException(const H5std_string& func, const H5std ///\brief Noop destructor. //-------------------------------------------------------------------------- IdComponentException::~IdComponentException() throw() {} -#ifndef H5_NO_NAMESPACE + } // end namespace -#endif diff --git a/c++/src/H5Exception.h b/c++/src/H5Exception.h index d49c19a..da9066a 100644 --- a/c++/src/H5Exception.h +++ b/c++/src/H5Exception.h @@ -19,14 +19,12 @@ #include <string> -#ifndef H5_NO_NAMESPACE namespace H5 { #ifdef H5_NO_STD #define H5std_string ::string #else #define H5std_string std::string #endif -#endif /*! \class Exception \brief Exception provides wrappers of HDF5 error handling functions. @@ -171,8 +169,6 @@ class H5_DLLCPP IdComponentException : public Exception { virtual ~IdComponentException() throw(); }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5Exception_H diff --git a/c++/src/H5FaccProp.cpp b/c++/src/H5FaccProp.cpp index 972f915..c3919da 100644 --- a/c++/src/H5FaccProp.cpp +++ b/c++/src/H5FaccProp.cpp @@ -21,9 +21,7 @@ #include "H5PropList.h" #include "H5FaccProp.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif #ifndef DOXYGEN_SHOULD_SKIP_THIS // This DOXYGEN_SHOULD_SKIP_THIS block is a work-around approach to control @@ -748,6 +746,4 @@ void FileAccPropList::getLibverBounds(H5F_libver_t& libver_low, H5F_libver_t& li //-------------------------------------------------------------------------- FileAccPropList::~FileAccPropList() {} -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5FaccProp.h b/c++/src/H5FaccProp.h index 831488c..a0605e0 100644 --- a/c++/src/H5FaccProp.h +++ b/c++/src/H5FaccProp.h @@ -20,11 +20,14 @@ #ifndef __H5FileAccPropList_H #define __H5FileAccPropList_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif -//! Class FileAccPropList represents the HDF5 file access property list. +/*! \class FileAccPropList + \brief Class FileAccPropList inherits from PropList and provides + wrappers for the HDF5 file access property list. + + Inheritance: PropList -> IdComponent +*/ class H5_DLLCPP FileAccPropList : public PropList { public: ///\brief Default file access property list. @@ -157,7 +160,5 @@ class H5_DLLCPP FileAccPropList : public PropList { #endif // DOXYGEN_SHOULD_SKIP_THIS }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5FileAccPropList_H diff --git a/c++/src/H5FcreatProp.cpp b/c++/src/H5FcreatProp.cpp index af51677..5a99dba 100644 --- a/c++/src/H5FcreatProp.cpp +++ b/c++/src/H5FcreatProp.cpp @@ -21,9 +21,7 @@ #include "H5PropList.h" #include "H5FcreatProp.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif #ifndef DOXYGEN_SHOULD_SKIP_THIS // This DOXYGEN_SHOULD_SKIP_THIS block is a work-around approach to control @@ -303,6 +301,4 @@ unsigned FileCreatPropList::getIstorek() const //-------------------------------------------------------------------------- FileCreatPropList::~FileCreatPropList() {} -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5FcreatProp.h b/c++/src/H5FcreatProp.h index 5d81078..1ac925e 100644 --- a/c++/src/H5FcreatProp.h +++ b/c++/src/H5FcreatProp.h @@ -17,11 +17,14 @@ #ifndef __H5FileCreatPropList_H #define __H5FileCreatPropList_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif -//! Class FileCreatPropList represents the HDF5 file create property list. +/*! \class FileCreatPropList + \brief Class FileCreatPropList inherits from PropList and provides + wrappers for the HDF5 file create property list. + + Inheritance: PropList -> IdComponent +*/ class H5_DLLCPP FileCreatPropList : public PropList { public: ///\brief Default file creation property list. @@ -89,7 +92,5 @@ class H5_DLLCPP FileCreatPropList : public PropList { #endif // DOXYGEN_SHOULD_SKIP_THIS }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5FileCreatPropList_H diff --git a/c++/src/H5File.cpp b/c++/src/H5File.cpp index a81efd8..ff897d7 100644 --- a/c++/src/H5File.cpp +++ b/c++/src/H5File.cpp @@ -24,13 +24,13 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5Location.h" -#include "H5Object.h" #include "H5FaccProp.h" #include "H5FcreatProp.h" #include "H5OcreatProp.h" #include "H5DxferProp.h" #include "H5DcreatProp.h" +#include "H5Location.h" +#include "H5Object.h" #include "H5Group.h" #include "H5AbstractDs.h" #include "H5DataSpace.h" @@ -38,13 +38,9 @@ #include "H5File.h" #include "H5Alltypes.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#ifndef H5_NO_STD using std::cerr; using std::endl; -#endif // H5_NO_STD -#endif //-------------------------------------------------------------------------- // Function H5File default constructor @@ -563,6 +559,9 @@ void H5File::reopen() // This function is a redefinition of CommonFG::getLocId. It // is used by CommonFG member functions to get the file id. // Programmer Binh-Minh Ribler - 2000 +// Deprecated: +// After HDFFV-9920, the Group's methods can use getId() and getLocId() +// is kept for backward compatibility. Aug 18, 2016 -BMR //-------------------------------------------------------------------------- hid_t H5File::getLocId() const { @@ -623,11 +622,10 @@ void H5File::close() ///\param msg - Message describing the failure ///\exception H5::FileIException // Description -// This function is used in CommonFG implementation so that +// This function is also used in H5Location implementation so that // proper exception can be thrown for file or group. The -// argument func_name is a member of CommonFG and "H5File::" -// will be inserted to indicate the function called is an -// implementation of H5File. +// "H5File::" will be inserted to indicate the function called is +// an implementation of H5File. // Programmer Binh-Minh Ribler - 2000 //-------------------------------------------------------------------------- void H5File::throwException(const H5std_string& func_name, const H5std_string& msg) const @@ -656,6 +654,4 @@ H5File::~H5File() } } -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5File.h b/c++/src/H5File.h index 7ec92fe..dca6c67 100644 --- a/c++/src/H5File.h +++ b/c++/src/H5File.h @@ -18,14 +18,13 @@ #define __H5File_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif /*! \class H5File - \brief Class H5File represents an HDF5 file. + \brief Class H5File represents an HDF5 file and inherits from class Group + as file is a root group. - It inherits from H5Location and CommonFG. + Inheritance: Group -> H5Object -> H5Location -> IdComponent */ class H5_DLLCPP H5File : public Group { public: @@ -122,8 +121,6 @@ class H5_DLLCPP H5File : public Group { void p_get_file( const char* name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist ); }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5File_H diff --git a/c++/src/H5FloatType.cpp b/c++/src/H5FloatType.cpp index ed17aeb..9ce06f7 100644 --- a/c++/src/H5FloatType.cpp +++ b/c++/src/H5FloatType.cpp @@ -19,22 +19,20 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5Location.h" -#include "H5Object.h" #include "H5OcreatProp.h" #include "H5DcreatProp.h" +#include "H5DxferProp.h" +#include "H5Location.h" +#include "H5Object.h" #include "H5DataType.h" #include "H5AbstractDs.h" -#include "H5DxferProp.h" #include "H5DataSpace.h" #include "H5AtomType.h" #include "H5FloatType.h" #include "H5DataSet.h" #include "H5PredType.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif //-------------------------------------------------------------------------- // Function: FloatType default constructor @@ -285,6 +283,4 @@ void FloatType::setInpad( H5T_pad_t inpad ) const //-------------------------------------------------------------------------- FloatType::~FloatType() {} -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5FloatType.h b/c++/src/H5FloatType.h index e88093e..c0119eb 100644 --- a/c++/src/H5FloatType.h +++ b/c++/src/H5FloatType.h @@ -17,11 +17,14 @@ #ifndef __H5FloatType_H #define __H5FloatType_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif -//! Class FloatType operates on HDF5 floating point datatype. +/*! \class FloatType + \brief FloatType is a derivative of a DataType and operates on HDF5 + floating point datatype. + + Inheritance: AtomType -> DataType -> H5Object -> H5Location -> IdComponent +*/ class H5_DLLCPP FloatType : public AtomType { public: // Creates a floating-point type using a predefined type. @@ -69,7 +72,5 @@ class H5_DLLCPP FloatType : public AtomType { // Noop destructor. virtual ~FloatType(); }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5FloatType_H diff --git a/c++/src/H5Group.cpp b/c++/src/H5Group.cpp index d93d3a1..20f14a3 100644 --- a/c++/src/H5Group.cpp +++ b/c++/src/H5Group.cpp @@ -24,14 +24,14 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5Location.h" -#include "H5Object.h" -#include "H5AbstractDs.h" #include "H5FaccProp.h" #include "H5FcreatProp.h" #include "H5OcreatProp.h" #include "H5DcreatProp.h" #include "H5DxferProp.h" +#include "H5Location.h" +#include "H5Object.h" +#include "H5AbstractDs.h" #include "H5DataSpace.h" #include "H5DataSet.h" #include "H5Attribute.h" @@ -40,13 +40,9 @@ #include "H5Alltypes.h" #include "H5private.h" // for HDstrcpy -#ifndef H5_NO_NAMESPACE namespace H5 { -#ifndef H5_NO_STD using std::cerr; using std::endl; -#endif // H5_NO_STD -#endif //-------------------------------------------------------------------------- // Function: Group default constructor @@ -68,9 +64,11 @@ Group::Group(const Group& original) : H5Object(), id(original.id) //-------------------------------------------------------------------------- // Function: Group::getLocId -///\brief Returns the id of this group. -///\return Id of this group +// Purpose: Get the id of this group // Programmer Binh-Minh Ribler - 2000 +// Description +// This function is a redefinition of CommonFG::getLocId. It +// is used by CommonFG member functions to get the file id. // Deprecated: // After HDFFV-9920, the Group's methods can use getId() and getLocId() // is kept for backward compatibility. Aug 18, 2016 -BMR @@ -196,11 +194,10 @@ void Group::close() ///\param msg - Message describing the failure ///\exception H5::GroupIException // Description -// This function is used in CommonFG implementation so that +// This function is also used in H5Location's methods so that // proper exception can be thrown for file or group. The -// argument func_name is a member of CommonFG and "Group::" -// will be inserted to indicate the function called is an -// implementation of Group. +// "Group::" will be inserted to indicate the function called is +// an implementation of Group. // Programmer Binh-Minh Ribler - 2000 //-------------------------------------------------------------------------- void Group::throwException(const H5std_string& func_name, const H5std_string& msg) const @@ -230,1269 +227,4 @@ Group::~Group() } } - -// From H5CommonFG.cpp -// Notes with "***Updated" are new and for Group.cpp -// Original notes are from December 2000 -// -// There are a few comments that are common to most of the functions -// defined in this file so they are listed here. -// - getLocId is called by all functions, that call a C API, to get -// the location id, which can be either a file id or a group id. -// This function is pure virtual and it's up to H5File and Group -// to call the right getId() - although, as the structure of the -// library at this time, getId() is basically the IdComponent::getId() -// ***Updated: after the classes are rearranged (HDFFV-9920), functions -// in CommonFG are moved to Group, and they can call getId() -// instead of getLocId(). getLocId() is kept for backward -// compatibility on user applications. Aug 18, 2016 -BMR -// - when a failure returned by the C API, the functions will call -// throwException, which is a pure virtual function and is implemented -// by H5File to throw a FileIException and by Group to throw a -// GroupIException. -// ***Updated: after HDFFV-9920, methods in class Group use throwException -// to distinguish the FileIException and GroupIException. CommonFG is no -// longer used in the library. Aug 18, 2016 -BMR - -//-------------------------------------------------------------------------- -// Function: Group::createGroup -///\brief Creates a new group at this location which can be a file -/// or another group. -///\param name - IN: Name of the group to create -///\param size_hint - IN: Indicates the number of bytes to reserve for -/// the names that will appear in the group -///\return Group instance -///\exception H5::FileIException or H5::GroupIException -///\par Description -/// The optional \a size_hint specifies how much file space to -/// reserve for storing the names that will appear in this new -/// group. If a non-positive value is provided for the \a size_hint -/// then a default size is chosen. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -Group Group::createGroup( const char* name, size_t size_hint ) const -{ - // Group creation property list for size hint - hid_t gcpl_id = 0; - - // Set the local heap size hint - if (size_hint > 0) - { - // If the creation of the property list failed, throw an exception - if ((gcpl_id = H5Pcreate(H5P_GROUP_CREATE)) < 0) - throwException("createGroup", "H5Pcreate failed"); - - if (H5Pset_local_heap_size_hint(gcpl_id, size_hint) < 0) { - H5Pclose(gcpl_id); - throwException("createGroup", "H5Pset_local_heap_size_hint failed"); - } - } - - // Call C routine H5Gcreate2 to create the named group, giving the - // location id which can be a file id or a group id - hid_t group_id = H5Gcreate2(getId(), name, H5P_DEFAULT, gcpl_id, H5P_DEFAULT ); - - // Close the group creation property list, if necessary - if(gcpl_id > 0) - H5Pclose(gcpl_id); - - // If the creation of the group failed, throw an exception - if( group_id < 0 ) - throwException("createGroup", "H5Gcreate2 failed"); - - // No failure, create and return the Group object - Group group; - group.p_setId(group_id); - // CommonFG *ptr = &group; - // ptr->p_setId(group_id); - return( group ); -} - -//-------------------------------------------------------------------------- -// Function: Group::createGroup -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -Group Group::createGroup( const H5std_string& name, size_t size_hint ) const -{ - return( createGroup( name.c_str(), size_hint )); -} - -//-------------------------------------------------------------------------- -// Function: Group::openGroup -///\brief Opens an existing group in a location which can be a file -/// or another group. -///\param name - IN: Name of the group to open -///\return Group instance -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -Group Group::openGroup( const char* name ) const -{ - // Call C routine H5Gopen2 to open the named group, giving the - // location id which can be a file id or a group id - hid_t group_id = H5Gopen2(getId(), name, H5P_DEFAULT ); - - // If the opening of the group failed, throw an exception - if( group_id < 0 ) - throwException("openGroup", "H5Gopen2 failed"); - - // No failure, create and return the Group object - Group group; - group.p_setId(group_id); - // CommonFG *ptr = &group; - // ptr->p_setId(group_id); - return( group ); -} - -//-------------------------------------------------------------------------- -// Function: Group::openGroup -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -Group Group::openGroup( const H5std_string& name ) const -{ - return( openGroup( name.c_str() )); -} - -//-------------------------------------------------------------------------- -// Function: Group::createDataSet -///\brief Creates a new dataset at this location. -///\param name - IN: Name of the dataset to create -///\param data_type - IN: Datatype of the dataset -///\param data_space - IN: Dataspace for the dataset -///\param create_plist - IN: Creation properly list for the dataset -///\return DataSet instance -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -DataSet Group::createDataSet( const char* name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist ) const -{ - //cerr << "createDataSet( const char* name" << endl; - // Obtain identifiers for C API - hid_t type_id = data_type.getId(); - hid_t space_id = data_space.getId(); - hid_t create_plist_id = create_plist.getId(); - - // Call C routine H5Dcreate2 to create the named dataset - hid_t dataset_id = H5Dcreate2(getId(), name, type_id, space_id, H5P_DEFAULT, create_plist_id, H5P_DEFAULT ); - //cerr << " H5Dcreate2 returns dataset_id " << dataset_id << endl; - - // If the creation of the dataset failed, throw an exception - if( dataset_id < 0 ) - throwException("createDataSet", "H5Dcreate2 failed"); - - // No failure, create and return the DataSet object - DataSet dataset; - f_DataSet_setId(&dataset, dataset_id); - return( dataset ); -} - -//-------------------------------------------------------------------------- -// Function: Group::createDataSet -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -DataSet Group::createDataSet( const H5std_string& name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist ) const -{ - //cerr << "createDataSet( const H5std_string& name" << endl; - return( createDataSet( name.c_str(), data_type, data_space, create_plist )); -} - -//-------------------------------------------------------------------------- -// Function: Group::openDataSet -///\brief Opens an existing dataset at this location. -///\param name - IN: Name of the dataset to open -///\return DataSet instance -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -DataSet Group::openDataSet( const char* name ) const -{ - // Call C function H5Dopen2 to open the specified dataset, giving - // the location id and the dataset's name - hid_t dataset_id = H5Dopen2(getId(), name, H5P_DEFAULT ); - - // If the dataset's opening failed, throw an exception - if(dataset_id < 0) - throwException("openDataSet", "H5Dopen2 failed"); - - // No failure, create and return the DataSet object - DataSet dataset; - f_DataSet_setId(&dataset, dataset_id); - return( dataset ); -} - -//-------------------------------------------------------------------------- -// Function: Group::openDataSet -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -DataSet Group::openDataSet( const H5std_string& name ) const -{ - return( openDataSet( name.c_str() )); -} - -//-------------------------------------------------------------------------- -// Function: Group::link -///\brief Creates a link of the specified type from \a new_name to -/// \a curr_name. -///\param link_type - IN: Link type; possible values are -/// \li \c H5G_LINK_HARD -/// \li \c H5G_LINK_SOFT -///\param curr_name - IN: Name of the existing object if link is a hard -/// link; can be anything for the soft link -///\param new_name - IN: New name for the object -///\exception H5::FileIException or H5::GroupIException -///\par Description -/// Note that both names are interpreted relative to the -/// specified location. -/// For information on creating hard link and soft link, please -/// refer to the C layer Reference Manual at: -/// http://hdfgroup.org/HDF5/doc/RM/RM_H5L.html#Link-CreateHard and -/// http://hdfgroup.org/HDF5/doc/RM/RM_H5L.html#Link-CreateSoft -// Programmer Binh-Minh Ribler - 2000 -// Modification -// 2007: QAK modified to use H5L APIs - BMR -//-------------------------------------------------------------------------- -void Group::link( H5L_type_t link_type, const char* curr_name, const char* new_name ) const -{ - herr_t ret_value = -1; - - switch(link_type) { - case H5L_TYPE_HARD: - ret_value = H5Lcreate_hard(getId(), curr_name, H5L_SAME_LOC, new_name, H5P_DEFAULT, H5P_DEFAULT ); - break; - - case H5L_TYPE_SOFT: - ret_value = H5Lcreate_soft( curr_name,getId(), new_name, H5P_DEFAULT, H5P_DEFAULT ); - break; - - case H5L_TYPE_ERROR: - case H5L_TYPE_EXTERNAL: - case H5L_TYPE_MAX: - default: - throwException("link", "unknown link type"); - break; - } /* end switch */ - - if( ret_value < 0 ) - throwException("link", "creating link failed"); -} - -//-------------------------------------------------------------------------- -// Function: Group::link -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a curr_name and \a new_name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -void Group::link( H5L_type_t link_type, const H5std_string& curr_name, const H5std_string& new_name ) const -{ - link( link_type, curr_name.c_str(), new_name.c_str() ); -} - -//-------------------------------------------------------------------------- -// Function: Group::unlink -///\brief Removes the specified name at this location. -///\param name - IN: Name of the object to be removed -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2000 -// Modification -// 2007: QAK modified to use H5L APIs - BMR -//-------------------------------------------------------------------------- -void Group::unlink( const char* name ) const -{ - herr_t ret_value = H5Ldelete(getId(), name, H5P_DEFAULT ); - if( ret_value < 0 ) - throwException("unlink", "H5Ldelete failed"); -} - -//-------------------------------------------------------------------------- -// Function: Group::unlink -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -void Group::unlink( const H5std_string& name ) const -{ - unlink( name.c_str() ); -} - -//-------------------------------------------------------------------------- -// Function: Group::move -///\brief Renames an object at this location. -///\param src - IN: Object's original name -///\param dst - IN: Object's new name -///\exception H5::FileIException or H5::GroupIException -///\note -/// Exercise care in moving groups as it is possible to render -/// data in a file inaccessible with Group::move. Please refer -/// to the Group Interface in the HDF5 User's Guide for details at: -/// https://www.hdfgroup.org/HDF5/doc/UG/HDF5_Users_Guide-Responsive%20HTML5/index.html#t=HDF5_Users_Guide%2FGroups%2FHDF5_Groups.htm -// Programmer Binh-Minh Ribler - 2000 -// Modification -// 2007: QAK modified to use H5L APIs - BMR -//-------------------------------------------------------------------------- -void Group::move( const char* src, const char* dst ) const -{ - herr_t ret_value = H5Lmove(getId(), src, H5L_SAME_LOC, dst, H5P_DEFAULT, H5P_DEFAULT ); - if( ret_value < 0 ) - throwException("move", "H5Lmove failed"); -} - -//-------------------------------------------------------------------------- -// Function: Group::move -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a src and \a dst. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -void Group::move( const H5std_string& src, const H5std_string& dst ) const -{ - move( src.c_str(), dst.c_str() ); -} - -#ifndef H5_NO_DEPRECATED_SYMBOLS -//-------------------------------------------------------------------------- -// Function: Group::getObjinfo -///\brief Returns information about an object. -///\param name - IN: Name of the object -///\param follow_link - IN: Link flag -///\param statbuf - OUT: Buffer to return information about the object -///\exception H5::FileIException or H5::GroupIException -///\par Description -/// For more information, please refer to the C layer Reference -/// Manual at: -/// http://www.hdfgroup.org/HDF5/doc/RM/RM_H5G.html#Group-GetObjinfo -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -void Group::getObjinfo( const char* name, hbool_t follow_link, H5G_stat_t& statbuf ) const -{ - herr_t ret_value = H5Gget_objinfo(getId(), name, follow_link, &statbuf ); - if( ret_value < 0 ) - throwException("getObjinfo", "H5Gget_objinfo failed"); -} - -//-------------------------------------------------------------------------- -// Function: Group::getObjinfo -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -void Group::getObjinfo( const H5std_string& name, hbool_t follow_link, H5G_stat_t& statbuf ) const -{ - getObjinfo( name.c_str(), follow_link, statbuf ); -} - -//-------------------------------------------------------------------------- -// Function: Group::getObjinfo -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above functions in that it doesn't have -/// the paramemter \a follow_link. -// Programmer Binh-Minh Ribler - Nov, 2005 -// Note: need to modify to use H5Oget_info and H5Lget_info - BMR -//-------------------------------------------------------------------------- -void Group::getObjinfo( const char* name, H5G_stat_t& statbuf ) const -{ - herr_t ret_value = H5Gget_objinfo(getId(), name, 0, &statbuf ); - if( ret_value < 0 ) - throwException("getObjinfo", "H5Gget_objinfo failed"); -} - -//-------------------------------------------------------------------------- -// Function: Group::getObjinfo -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - Nov, 2005 -//-------------------------------------------------------------------------- -void Group::getObjinfo( const H5std_string& name, H5G_stat_t& statbuf ) const -{ - getObjinfo( name.c_str(), statbuf ); -} -#endif /* H5_NO_DEPRECATED_SYMBOLS */ - -//-------------------------------------------------------------------------- -// Function: Group::getLinkval -///\brief Returns the name of the object that the symbolic link points to. -///\param name - IN: Symbolic link to the object -///\param size - IN: Maximum number of characters of value to be returned -///\return Name of the object -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -H5std_string Group::getLinkval( const char* name, size_t size ) const -{ - H5L_info_t linkinfo; - char *value_C; // value in C string - size_t val_size = size; - H5std_string value = ""; - herr_t ret_value; - - // if user doesn't provide buffer size, determine it - if (size == 0) - { - ret_value = H5Lget_info(getLocId(), name, &linkinfo, H5P_DEFAULT); - if( ret_value < 0 ) - throwException("getLinkval", "H5Lget_info to find buffer size failed"); - - val_size = linkinfo.u.val_size; - } - - // if link has value, retrieve the value, otherwise, return null string - if (val_size > 0) - { - value_C = new char[val_size+1]; // temporary C-string for C API - HDmemset(value_C, 0, val_size+1); // clear buffer - - ret_value = H5Lget_val(getLocId(), name, value_C, val_size, H5P_DEFAULT); - if( ret_value < 0 ) - { - delete []value_C; - throwException("getLinkval", "H5Lget_val failed"); - } - - value = H5std_string(value_C); - delete []value_C; - } - return(value); -} - -//-------------------------------------------------------------------------- -// Function: Group::getLinkval -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -H5std_string Group::getLinkval( const H5std_string& name, size_t size ) const -{ - return( getLinkval( name.c_str(), size )); -} - -//-------------------------------------------------------------------------- -// Function: Group::mount -///\brief Mounts the file \a child onto this group. -///\param name - IN: Name of the group -///\param child - IN: File to mount -///\param plist - IN: Property list to use -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2014 (original 2000) -//-------------------------------------------------------------------------- -void Group::mount(const char* name, const H5File& child, const PropList& plist ) const -{ - // Obtain identifiers for C API - hid_t plist_id = plist.getId(); - hid_t child_id = child.getId(); - - // Call C routine H5Fmount to do the mouting - herr_t ret_value = H5Fmount(getId(), name, child_id, plist_id ); - - // Raise exception if H5Fmount returns negative value - if( ret_value < 0 ) - throwException("mount", "H5Fmount failed"); -} - -//-------------------------------------------------------------------------- -// Function: Group::mount -// Purpose This is an overloaded member function, kept for backward -// compatibility. It differs from the above function in that it -// misses const's. This wrapper will be removed in future release. -// Param name - IN: Name of the group -// Param child - IN: File to mount -// Param plist - IN: Property list to use -// Exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2000 -// Modification -// Modified to call its replacement. -BMR, 2014/04/16 -// Removed from documentation. -BMR, 2016/03/07 1.8.17 and 1.10.0 -// Removed from code. -BMR, 2016/08/11 1.8.18 and 1.10.1 -//-------------------------------------------------------------------------- -//void Group::mount(const char* name, H5File& child, PropList& plist) const -//{ -// mount(name, child, plist); -//} - -//-------------------------------------------------------------------------- -// Function: Group::mount -///\brief This is an overloaded member function, provided for convenience. -/// It takes an \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -void Group::mount(const H5std_string& name, const H5File& child, const PropList& plist) const -{ - mount(name.c_str(), child, plist); -} - -//-------------------------------------------------------------------------- -// Function: Group::mount -// Purpose This is an overloaded member function, kept for backward -// compatibility. It differs from the above function in that it -// misses const's. This wrapper will be removed in future release. -// Programmer Binh-Minh Ribler - 2014 -// Modification -// Modified to call its replacement. -BMR, 2014/04/16 -// Removed from documentation. -BMR, 2016/03/07 1.8.17 and 1.10.0 -// Removed from code. -BMR, 2016/08/11 1.8.18 and 1.10.1 -//-------------------------------------------------------------------------- -//void Group::mount(const H5std_string& name, H5File& child, PropList& plist) const -//{ -// mount(name.c_str(), child, plist); -//} - -//-------------------------------------------------------------------------- -// Function: Group::unmount -///\brief Unmounts the specified file. -///\param name - IN: Name of the file to unmount -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -void Group::unmount( const char* name ) const -{ - // Call C routine H5Fmount to do the mouting - herr_t ret_value = H5Funmount(getId(), name ); - - // Raise exception if H5Funmount returns negative value - if( ret_value < 0 ) - throwException("unmount", "H5Funmount failed"); -} - -//-------------------------------------------------------------------------- -// Function: Group::unmount -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -void Group::unmount( const H5std_string& name ) const -{ - unmount( name.c_str() ); -} - -//-------------------------------------------------------------------------- -// Function: Group::openDataType -///\brief Opens the named generic datatype at this location. -///\param name - IN: Name of the datatype to open -///\return DataType instance -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -DataType Group::openDataType( const char* name ) const -{ - // Call C function H5Topen2 to open the named datatype in this group, - // given either the file or group id - hid_t type_id = H5Topen2(getLocId(), name, H5P_DEFAULT); - - // If the datatype's opening failed, throw an exception - if( type_id < 0 ) - throwException("openDataType", "H5Topen2 failed"); - - // No failure, create and return the DataType object - DataType data_type; - f_DataType_setId(&data_type, type_id); - return(data_type); -} - -//-------------------------------------------------------------------------- -// Function: Group::openDataType -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -DataType Group::openDataType( const H5std_string& name ) const -{ - return( openDataType( name.c_str()) ); -} - -//-------------------------------------------------------------------------- -// Function: Group::openArrayType -///\brief Opens the named array datatype at this location. -///\param name - IN: Name of the array datatype to open -///\return ArrayType instance -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - Jul, 2005 -//-------------------------------------------------------------------------- -ArrayType Group::openArrayType( const char* name ) const -{ - // Call C function H5Topen2 to open the named datatype in this group, - // given either the file or group id - hid_t type_id = H5Topen2(getLocId(), name, H5P_DEFAULT); - - // If the datatype's opening failed, throw an exception - if( type_id < 0 ) - throwException("openArrayType", "H5Topen2 failed"); - - // No failure, create and return the ArrayType object - ArrayType array_type; - f_DataType_setId(&array_type, type_id); - return(array_type); -} - -//-------------------------------------------------------------------------- -// Function: Group::openArrayType -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - Jul, 2005 -//-------------------------------------------------------------------------- -ArrayType Group::openArrayType( const H5std_string& name ) const -{ - return( openArrayType( name.c_str()) ); -} - -//-------------------------------------------------------------------------- -// Function: Group::openCompType -///\brief Opens the named compound datatype at this location. -///\param name - IN: Name of the compound datatype to open -///\return CompType instance -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -CompType Group::openCompType( const char* name ) const -{ - // Call C function H5Topen2 to open the named datatype in this group, - // given either the file or group id - hid_t type_id = H5Topen2(getLocId(), name, H5P_DEFAULT); - - // If the datatype's opening failed, throw an exception - if( type_id < 0 ) - throwException("openCompType", "H5Topen2 failed"); - - // No failure, create and return the CompType object - CompType comp_type; - f_DataType_setId(&comp_type, type_id); - return(comp_type); -} - -//-------------------------------------------------------------------------- -// Function: Group::openCompType -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -CompType Group::openCompType( const H5std_string& name ) const -{ - return( openCompType( name.c_str()) ); -} - -//-------------------------------------------------------------------------- -// Function: Group::openEnumType -///\brief Opens the named enumeration datatype at this location. -///\param name - IN: Name of the enumeration datatype to open -///\return EnumType instance -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -EnumType Group::openEnumType( const char* name ) const -{ - // Call C function H5Topen2 to open the named datatype in this group, - // given either the file or group id - hid_t type_id = H5Topen2(getLocId(), name, H5P_DEFAULT); - - // If the datatype's opening failed, throw an exception - if( type_id < 0 ) - throwException("openEnumType", "H5Topen2 failed"); - - // No failure, create and return the EnumType object - EnumType enum_type; - f_DataType_setId(&enum_type, type_id); - return(enum_type); -} - -//-------------------------------------------------------------------------- -// Function: Group::openEnumType -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -EnumType Group::openEnumType( const H5std_string& name ) const -{ - return( openEnumType( name.c_str()) ); -} - -//-------------------------------------------------------------------------- -// Function: Group::openIntType -///\brief Opens the named integer datatype at this location. -///\param name - IN: Name of the integer datatype to open -///\return IntType instance -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -IntType Group::openIntType( const char* name ) const -{ - // Call C function H5Topen2 to open the named datatype in this group, - // given either the file or group id - hid_t type_id = H5Topen2(getLocId(), name, H5P_DEFAULT); - - // If the datatype's opening failed, throw an exception - if( type_id < 0 ) - throwException("openIntType", "H5Topen2 failed"); - - // No failure, create and return the IntType object - IntType int_type; - f_DataType_setId(&int_type, type_id); - return(int_type); -} - -//-------------------------------------------------------------------------- -// Function: Group::openIntType -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -IntType Group::openIntType( const H5std_string& name ) const -{ - return( openIntType( name.c_str()) ); -} - -//-------------------------------------------------------------------------- -// Function: Group::openFloatType -///\brief Opens the named floating-point datatype at this location. -///\param name - IN: Name of the floating-point datatype to open -///\return FloatType instance -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -FloatType Group::openFloatType( const char* name ) const -{ - // Call C function H5Topen2 to open the named datatype in this group, - // given either the file or group id - hid_t type_id = H5Topen2(getLocId(), name, H5P_DEFAULT); - - // If the datatype's opening failed, throw an exception - if( type_id < 0 ) - throwException("openFloatType", "H5Topen2 failed"); - - // No failure, create and return the FloatType object - FloatType float_type; - f_DataType_setId(&float_type, type_id); - return(float_type); -} - -//-------------------------------------------------------------------------- -// Function: Group::openFloatType -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -FloatType Group::openFloatType( const H5std_string& name ) const -{ - return( openFloatType( name.c_str()) ); -} - -//-------------------------------------------------------------------------- -// Function: Group::openStrType -///\brief Opens the named string datatype at this location. -///\param name - IN: Name of the string datatype to open -///\return StrType instance -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -StrType Group::openStrType( const char* name ) const -{ - // Call C function H5Topen2 to open the named datatype in this group, - // given either the file or group id - hid_t type_id = H5Topen2(getLocId(), name, H5P_DEFAULT); - - // If the datatype's opening failed, throw an exception - if( type_id < 0 ) - throwException("openStrType", "H5Topen2 failed"); - - // No failure, create and return the StrType object - StrType str_type; - f_DataType_setId(&str_type, type_id); - return(str_type); -} - -//-------------------------------------------------------------------------- -// Function: Group::openStrType -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -StrType Group::openStrType( const H5std_string& name ) const -{ - return( openStrType( name.c_str()) ); -} - -//-------------------------------------------------------------------------- -// Function: Group::openVarLenType -///\brief Opens the named variable length datatype at this location. -///\param name - IN: Name of the variable length datatype to open -///\return VarLenType instance -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - Jul, 2005 -//-------------------------------------------------------------------------- -VarLenType Group::openVarLenType( const char* name ) const -{ - // Call C function H5Topen2 to open the named datatype in this group, - // given either the file or group id - hid_t type_id = H5Topen2(getLocId(), name, H5P_DEFAULT); - - // If the datatype's opening failed, throw an exception - if( type_id < 0 ) - throwException("openVarLenType", "H5Topen2 failed"); - - // No failure, create and return the VarLenType object - VarLenType varlen_type; - f_DataType_setId(&varlen_type, type_id); - return(varlen_type); -} - -//-------------------------------------------------------------------------- -// Function: Group::openVarLenType -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - Jul, 2005 -//-------------------------------------------------------------------------- -VarLenType Group::openVarLenType( const H5std_string& name ) const -{ - return( openVarLenType( name.c_str()) ); -} - -#ifndef H5_NO_DEPRECATED_SYMBOLS -//-------------------------------------------------------------------------- -// Function: Group::iterateElems -///\brief Iterates a user's function over the entries of a group. -///\param name - IN : Name of group to iterate over -///\param idx - IN/OUT: Starting (IN) and ending (OUT) entry indices -///\param op - IN : User's function to operate on each entry -///\param op_data - IN/OUT: Data associated with the operation -///\return The return value of the first operator that returns non-zero, -/// or zero if all members were processed with no operator -/// returning non-zero. -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -int Group::iterateElems( const char* name, int *idx, H5G_iterate_t op , void* op_data ) -{ - int ret_value = H5Giterate(getId(), name, idx, op, op_data ); - if( ret_value < 0 ) - { - throwException("iterateElems", "H5Giterate failed"); - } - return( ret_value ); -} - -//-------------------------------------------------------------------------- -// Function: Group::iterateElems -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - 2000 -//-------------------------------------------------------------------------- -int Group::iterateElems( const H5std_string& name, int *idx, H5G_iterate_t op , void* op_data ) -{ - return( iterateElems( name.c_str(), idx, op, op_data )); -} -#endif /* H5_NO_DEPRECATED_SYMBOLS */ - -//-------------------------------------------------------------------------- -// Function: Group::getNumObjs -///\brief Returns the number of objects in this group. -///\return Number of objects -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - January, 2003 -//-------------------------------------------------------------------------- -hsize_t Group::getNumObjs() const -{ - H5G_info_t ginfo; /* Group information */ - - herr_t ret_value = H5Gget_info(getLocId(), &ginfo); - if(ret_value < 0) - throwException("getNumObjs", "H5Gget_info failed"); - return (ginfo.nlinks); -} - -//-------------------------------------------------------------------------- -// Function: Group::getObjnameByIdx -///\brief Returns the name of an object in this group, given the -/// object's index. -///\param idx - IN: Transient index of the object -///\return Object name -///\exception H5::FileIException or H5::GroupIException -///\par Description -/// The value of idx can be any nonnegative number less than the -/// total number of objects in the group, which is returned by -/// the function \c Group::getNumObjs. Note that this is a -/// transient index; thus, an object may have a different index -/// each time the group is opened. -// Programmer Binh-Minh Ribler - Mar, 2005 -//-------------------------------------------------------------------------- -H5std_string Group::getObjnameByIdx(hsize_t idx) const -{ - // call H5Lget_name_by_idx with name as NULL to get its length - ssize_t name_len = H5Lget_name_by_idx(getLocId(), ".", H5_INDEX_NAME, H5_ITER_INC, idx, NULL, 0, H5P_DEFAULT); - if(name_len < 0) - throwException("getObjnameByIdx", "H5Lget_name_by_idx failed"); - - // now, allocate C buffer to get the name - char* name_C = new char[name_len+1]; - HDmemset(name_C, 0, name_len+1); // clear buffer - - name_len = H5Lget_name_by_idx(getLocId(), ".", H5_INDEX_NAME, H5_ITER_INC, idx, name_C, name_len+1, H5P_DEFAULT); - - if (name_len < 0) - { - delete []name_C; - throwException("getObjnameByIdx", "H5Lget_name_by_idx failed"); - } - - // clean up and return the string - H5std_string name = H5std_string(name_C); - delete []name_C; - return (name); -} - -//-------------------------------------------------------------------------- -// Function: Group::getObjnameByIdx -///\brief Retrieves the name of an object in this group, given the -/// object's index. -///\param idx - IN: Transient index of the object -///\param name - IN/OUT: Retrieved name of the object -///\param size - IN: Length to retrieve -///\return Actual size of the object name or 0, if object has no name -///\exception H5::FileIException or H5::GroupIException -///\par Description -/// The value of idx can be any nonnegative number less than the -/// total number of objects in the group, which is returned by -/// the function \c Group::getNumObjs. Note that this is a -/// transient index; thus, an object may have a different index -/// each time the group is opened. -// Programmer Binh-Minh Ribler - January, 2003 -//-------------------------------------------------------------------------- -ssize_t Group::getObjnameByIdx(hsize_t idx, char* name, size_t size) const -{ - ssize_t name_len = H5Lget_name_by_idx(getLocId(), ".", H5_INDEX_NAME, H5_ITER_INC, idx, name, size, H5P_DEFAULT); - if(name_len < 0) - throwException("getObjnameByIdx", "H5Lget_name_by_idx failed"); - - return (name_len); -} - -//-------------------------------------------------------------------------- -// Function: Group::getObjnameByIdx -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function in that it takes an -/// \c H5std_string for \a name. -// Programmer Binh-Minh Ribler - January, 2003 -//-------------------------------------------------------------------------- -ssize_t Group::getObjnameByIdx(hsize_t idx, H5std_string& name, size_t size) const -{ - char* name_C = new char[size+1]; // temporary C-string for object name - HDmemset(name_C, 0, size+1); // clear buffer - - // call overloaded function to get the name - ssize_t name_len = getObjnameByIdx(idx, name_C, size+1); - if(name_len < 0) - { - delete []name_C; - throwException("getObjnameByIdx", "H5Lget_name_by_idx failed"); - } - - // clean up and return the string - name = H5std_string(name_C); - delete []name_C; - return (name_len); -} - -//-------------------------------------------------------------------------- -// Function: Group::childObjType -///\brief Returns the type of an object in this file/group, given the -/// object's name. -///\param objname - IN: Name of the object -///\return Object type, which can have the following values for group, -/// dataset, and named datatype -/// \li \c H5O_TYPE_GROUP -/// \li \c H5O_TYPE_DATASET -/// \li \c H5O_TYPE_NAMED_DATATYPE -/// Refer to the C API documentation for more details: -/// http://www.hdfgroup.org/HDF5/doc/RM/RM_H5O.html#Object-GetInfo -///\exception H5::FileIException or H5::GroupIException -/// Exception will be thrown when: -/// - an error returned by the C API -/// - object type is not one of the valid values above -// Programmer Binh-Minh Ribler - April, 2014 -//-------------------------------------------------------------------------- -H5O_type_t Group::childObjType(const char* objname) const -{ - H5O_info_t objinfo; - H5O_type_t objtype = H5O_TYPE_UNKNOWN; - - // Use C API to get information of the object - herr_t ret_value = H5Oget_info_by_name(getLocId(), objname, &objinfo, H5P_DEFAULT); - - // Throw exception if C API returns failure - if (ret_value < 0) - throwException("childObjType", "H5Oget_info_by_name failed"); - // Return a valid type or throw an exception for unknown type - else - switch (objinfo.type) - { - case H5O_TYPE_GROUP: - case H5O_TYPE_DATASET: - case H5O_TYPE_NAMED_DATATYPE: - objtype = objinfo.type; - break; - case H5O_TYPE_UNKNOWN: - case H5O_TYPE_NTYPES: - default: - throwException("childObjType", "Unknown type of object"); - } - return(objtype); -} - -//-------------------------------------------------------------------------- -// Function: Group::childObjType -///\brief This is an overloaded member function, provided for convenience. -/// It takes an \a H5std_string for the object's name. -///\brief Returns the type of an object in this group, given the -/// object's name. -///\param objname - IN: Name of the object (H5std_string&) -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - April, 2014 -//-------------------------------------------------------------------------- -H5O_type_t Group::childObjType(const H5std_string& objname) const -{ - // Use overloaded function - H5O_type_t objtype = childObjType(objname.c_str()); - return(objtype); -} - -//-------------------------------------------------------------------------- -// Function: Group::childObjType -///\brief Returns the type of an object in this file/group, given the -/// object's index and its type and order. -///\param index - IN: Position of the object -///\param index_type - IN: Type of the index, default to H5_INDEX_NAME -///\param order - IN: Traversing order, default to H5_ITER_INC -///\param objname - IN: Name of the object, default to "." -///\return Object type, which can have the following values for group, -/// dataset, and named datatype -/// \li \c H5O_TYPE_GROUP -/// \li \c H5O_TYPE_DATASET -/// \li \c H5O_TYPE_NAMED_DATATYPE -/// Refer to the C API documentation for more details: -/// http://www.hdfgroup.org/HDF5/doc/RM/RM_H5O.html#Object-GetInfo -///\exception H5::FileIException or H5::GroupIException -/// Exception will be thrown when: -/// - an error returned by the C API -/// - object type is not one of the valid values above -// Developer's Notes: -// - this overload uses H5Oget_info_by_idx instead of H5Oget_info_by_name -// like the previous childObjType() -// - index is the required argument so, first -// - objname is last because it's more likely the location is already -// fully specified -// - Leave property list out for now because C API is not using it, it -// can be added later when needed. -// Programmer Binh-Minh Ribler - April, 2014 -//-------------------------------------------------------------------------- -H5O_type_t Group::childObjType(hsize_t index, H5_index_t index_type, H5_iter_order_t order, const char* objname) const -{ - herr_t ret_value; - H5O_info_t objinfo; - H5O_type_t objtype = H5O_TYPE_UNKNOWN; - - // Use C API to get information of the object - ret_value = H5Oget_info_by_idx(getLocId(), objname, index_type, order, index, &objinfo, H5P_DEFAULT); - - // Throw exception if C API returns failure - if (ret_value < 0) - throwException("childObjType", "H5Oget_info_by_idx failed"); - // Return a valid type or throw an exception for unknown type - else - switch (objinfo.type) - { - case H5O_TYPE_GROUP: - case H5O_TYPE_DATASET: - case H5O_TYPE_NAMED_DATATYPE: - objtype = objinfo.type; - break; - case H5O_TYPE_UNKNOWN: - case H5O_TYPE_NTYPES: - default: - throwException("childObjType", "Unknown type of object"); - } - return(objtype); -} - -//-------------------------------------------------------------------------- -// Function: Group::childObjVersion -///\brief Returns the object header version of an object in this file/group, -/// given the object's name. -///\param objname - IN: Name of the object -///\return Object version, which can have the following values: -/// \li \c H5O_VERSION_1 -/// \li \c H5O_VERSION_2 -///\exception H5::FileIException or H5::GroupIException -/// Exception will be thrown when: -/// - an error returned by the C API -/// - version number is not one of the valid values above -// Programmer Binh-Minh Ribler - April, 2014 -//-------------------------------------------------------------------------- -unsigned Group::childObjVersion(const char* objname) const -{ - H5O_info_t objinfo; - unsigned version = 0; - - // Use C API to get information of the object - herr_t ret_value = H5Oget_info_by_name(getLocId(), objname, &objinfo, H5P_DEFAULT); - - // Throw exception if C API returns failure - if (ret_value < 0) - throwException("childObjVersion", "H5Oget_info_by_name failed"); - // Return a valid version or throw an exception for invalid value - else - { - version = objinfo.hdr.version; - if (version != H5O_VERSION_1 && version != H5O_VERSION_2) - throwException("childObjVersion", "Invalid version for object"); - } - return(version); -} - -//-------------------------------------------------------------------------- -// Function: Group::childObjVersion -///\brief This is an overloaded member function, provided for convenience. -/// It takes an \a H5std_string for the object's name. -///\brief Returns the type of an object in this group, given the -/// object's name. -///\param objname - IN: Name of the object (H5std_string&) -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - April, 2014 -//-------------------------------------------------------------------------- -unsigned Group::childObjVersion(const H5std_string& objname) const -{ - // Use overloaded function - unsigned version = childObjVersion(objname.c_str()); - return(version); -} - -#ifndef H5_NO_DEPRECATED_SYMBOLS -#ifndef DOXYGEN_SHOULD_SKIP_THIS -//-------------------------------------------------------------------------- -// Function: Group::getObjTypeByIdx -///\brief Returns the type of an object in this group, given the -/// object's index. -///\param idx - IN: Transient index of the object -///\return Object type -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - January, 2003 -//-------------------------------------------------------------------------- -H5G_obj_t Group::getObjTypeByIdx(hsize_t idx) const -{ - H5G_obj_t obj_type = H5Gget_objtype_by_idx(getLocId(), idx); - if (obj_type == H5G_UNKNOWN) - throwException("getObjTypeByIdx", "H5Gget_objtype_by_idx failed"); - - return (obj_type); -} - -//-------------------------------------------------------------------------- -// Function: Group::getObjTypeByIdx -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function because it also provides -/// the returned object type in text (char*) -///\param idx - IN: Transient index of the object -///\param type_name - OUT: Object type in text -///\return Object type -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - May, 2010 -// Modification -// Modified to use the other function. -BMR, 2016/03/07 -//-------------------------------------------------------------------------- -H5G_obj_t Group::getObjTypeByIdx(hsize_t idx, char* type_name) const -{ - H5std_string stype_name(type_name); - return(getObjTypeByIdx(idx, stype_name)); -} -//-------------------------------------------------------------------------- -// Function: Group::getObjTypeByIdx -///\brief This is an overloaded member function, provided for convenience. -/// It differs from the above function because it also provides -/// the returned object type in text (H5std_string&) -///\param idx - IN: Transient index of the object -///\param type_name - OUT: Object type in text -///\return Object type -///\exception H5::FileIException or H5::GroupIException -// Programmer Binh-Minh Ribler - January, 2003 -//-------------------------------------------------------------------------- -H5G_obj_t Group::getObjTypeByIdx(hsize_t idx, H5std_string& type_name) const -{ - H5G_obj_t obj_type = H5Gget_objtype_by_idx(getLocId(), idx); - switch (obj_type) - { - case H5G_LINK: type_name = H5std_string("symbolic link"); break; - case H5G_GROUP: type_name = H5std_string("group"); break; - case H5G_DATASET: type_name = H5std_string("dataset"); break; - case H5G_TYPE: type_name = H5std_string("datatype"); break; - case H5G_UNKNOWN: - case H5G_UDLINK: - case H5G_RESERVED_5: - case H5G_RESERVED_6: - case H5G_RESERVED_7: - default: - throwException("getObjTypeByIdx", "H5Gget_objtype_by_idx failed"); - } - return (obj_type); -} - -#endif // DOXYGEN_SHOULD_SKIP_THIS -#endif /* H5_NO_DEPRECATED_SYMBOLS */ - -#ifndef DOXYGEN_SHOULD_SKIP_THIS - -//-------------------------------------------------------------------------- -// Function: f_DataType_setId - friend -// Purpose: This function is friend to class H5::DataType so that it -// can set DataType::id in order to work around a problem -// described in the JIRA issue HDFFV-7947. -// Applications shouldn't need to use it. -// param dtype - IN/OUT: DataType object to be changed -// param new_id - IN: New id to set -// Programmer Binh-Minh Ribler - 2015 -//-------------------------------------------------------------------------- -void f_DataType_setId(DataType* dtype, hid_t new_id) -{ - dtype->p_setId(new_id); -} - -//-------------------------------------------------------------------------- -// Function: f_DataSet_setId - friend -// Purpose: This function is friend to class H5::DataSet so that it -// can set DataSet::id in order to work around a problem -// described in the JIRA issue HDFFV-7947. -// Applications shouldn't need to use it. -// param dset - IN/OUT: DataSet object to be changed -// param new_id - IN: New id to set -// Programmer Binh-Minh Ribler - 2015 -//-------------------------------------------------------------------------- -void f_DataSet_setId(DataSet* dset, hid_t new_id) -{ - dset->p_setId(new_id); -} - -#endif // DOXYGEN_SHOULD_SKIP_THIS - -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5Group.h b/c++/src/H5Group.h index e8527d8..5f4b0f3 100644 --- a/c++/src/H5Group.h +++ b/c++/src/H5Group.h @@ -17,26 +17,17 @@ #ifndef __Group_H #define __Group_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif /*! \class Group \brief Class Group represents an HDF5 group. - It inherits many operations from H5Location and CommonFG. + Inheritance: H5Object -> H5Location -> IdComponent */ // Class forwarding -//class Group; -//class H5File; class ArrayType; class VarLenType; -/*! \class CommonFG - \brief \a CommonFG is an abstract base class of H5File and Group. - - It provides common operations of H5File and Group. -*/ class H5_DLLCPP Group : public H5Object { public: // Group constructor to create a group or file (aka root group). @@ -47,126 +38,6 @@ class H5_DLLCPP Group : public H5Object { Group(const char* name); Group(const H5std_string& name); -// From CommonFG - // Creates a new group at this location which can be a file - // or another group. - Group createGroup(const char* name, size_t size_hint = 0) const; - Group createGroup(const H5std_string& name, size_t size_hint = 0) const; - - // Opens an existing group in a location which can be a file - // or another group. - Group openGroup(const char* name) const; - Group openGroup(const H5std_string& name) const; - - // Creates a new dataset in this group. - DataSet createDataSet(const char* name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist = DSetCreatPropList::DEFAULT) const; - DataSet createDataSet(const H5std_string& name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist = DSetCreatPropList::DEFAULT) const; - - // Opens an existing dataset at this location. - DataSet openDataSet(const char* name) const; - DataSet openDataSet(const H5std_string& name) const; - - // Returns the value of a symbolic link. - H5std_string getLinkval(const char* link_name, size_t size=0) const; - H5std_string getLinkval(const H5std_string& link_name, size_t size=0) const; - - // Returns the number of objects in this group. - hsize_t getNumObjs() const; - - // Retrieves the name of an object in this group, given the - // object's index. - H5std_string getObjnameByIdx(hsize_t idx) const; - ssize_t getObjnameByIdx(hsize_t idx, char* name, size_t size) const; - ssize_t getObjnameByIdx(hsize_t idx, H5std_string& name, size_t size) const; - - // Retrieves the type of an object in this file or group, given the - // object's name - H5O_type_t childObjType(const H5std_string& objname) const; - H5O_type_t childObjType(const char* objname) const; - H5O_type_t childObjType(hsize_t index, H5_index_t index_type=H5_INDEX_NAME, H5_iter_order_t order=H5_ITER_INC, const char* objname=".") const; - - // Returns the object header version of an object in this file or group, - // given the object's name. - unsigned childObjVersion(const char* objname) const; - unsigned childObjVersion(const H5std_string& objname) const; - -#ifndef H5_NO_DEPRECATED_SYMBOLS - // Returns the type of an object in this group, given the - // object's index. - H5G_obj_t getObjTypeByIdx(hsize_t idx) const; - H5G_obj_t getObjTypeByIdx(hsize_t idx, char* type_name) const; - H5G_obj_t getObjTypeByIdx(hsize_t idx, H5std_string& type_name) const; - - // Returns information about an HDF5 object, given by its name, - // at this location. - void getObjinfo(const char* name, hbool_t follow_link, H5G_stat_t& statbuf) const; - void getObjinfo(const H5std_string& name, hbool_t follow_link, H5G_stat_t& statbuf) const; - void getObjinfo(const char* name, H5G_stat_t& statbuf) const; - void getObjinfo(const H5std_string& name, H5G_stat_t& statbuf) const; - - // Iterates over the elements of this group - not implemented in - // C++ style yet. - int iterateElems(const char* name, int *idx, H5G_iterate_t op, void *op_data); - int iterateElems(const H5std_string& name, int *idx, H5G_iterate_t op, void *op_data); -#endif /* H5_NO_DEPRECATED_SYMBOLS */ - - // Creates a link of the specified type from new_name to current_name; - // both names are interpreted relative to the specified location id. - void link(H5L_type_t link_type, const char* curr_name, const char* new_name) const; - void link(H5L_type_t link_type, const H5std_string& curr_name, const H5std_string& new_name) const; - - // Removes the specified name at this location. - void unlink(const char* name) const; - void unlink(const H5std_string& name) const; - - // Mounts the file 'child' onto this location. - void mount(const char* name, const H5File& child, const PropList& plist) const; - //void mount(const char* name, H5File& child, PropList& plist) const; // removed from 1.8.18 and 1.10.1 - void mount(const H5std_string& name, const H5File& child, const PropList& plist) const; - //void mount(const H5std_string& name, H5File& child, PropList& plist) const; // removed from 1.8.18 and 1.10.1 - - // Unmounts the file named 'name' from this parent location. - void unmount(const char* name) const; - void unmount(const H5std_string& name) const; - - // Renames an object at this location. - void move(const char* src, const char* dst) const; - void move(const H5std_string& src, const H5std_string& dst) const; - - // Opens a generic named datatype in this location. - DataType openDataType(const char* name) const; - DataType openDataType(const H5std_string& name) const; - - // Opens a named array datatype in this location. - ArrayType openArrayType(const char* name) const; - ArrayType openArrayType(const H5std_string& name) const; - - // Opens a named compound datatype in this location. - CompType openCompType(const char* name) const; - CompType openCompType(const H5std_string& name) const; - - // Opens a named enumeration datatype in this location. - EnumType openEnumType(const char* name) const; - EnumType openEnumType(const H5std_string& name) const; - - // Opens a named integer datatype in this location. - IntType openIntType(const char* name) const; - IntType openIntType(const H5std_string& name) const; - - // Opens a named floating-point datatype in this location. - FloatType openFloatType(const char* name) const; - FloatType openFloatType(const H5std_string& name) const; - - // Opens a named string datatype in this location. - StrType openStrType(const char* name) const; - StrType openStrType(const H5std_string& name) const; - - // Opens a named variable length datatype in this location. - VarLenType openVarLenType(const char* name) const; - VarLenType openVarLenType(const H5std_string& name) const; - -// end from CommonFG - // Close this group. virtual void close(); @@ -208,7 +79,5 @@ class H5_DLLCPP Group : public H5Object { hid_t id; // HDF5 group id }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __Group_H diff --git a/c++/src/H5IdComponent.cpp b/c++/src/H5IdComponent.cpp index 6d0c39f..d869b07 100644 --- a/c++/src/H5IdComponent.cpp +++ b/c++/src/H5IdComponent.cpp @@ -22,9 +22,7 @@ #include "H5DataSpace.h" #include "H5private.h" // for HDmemset -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif // This flag indicates whether H5Library::initH5cpp has been called to register // the terminating functions with atexit() @@ -352,6 +350,4 @@ bool IdComponent::p_valid_id(const hid_t obj_id) #endif // DOXYGEN_SHOULD_SKIP_THIS -#ifndef H5_NO_NAMESPACE } -#endif diff --git a/c++/src/H5IdComponent.h b/c++/src/H5IdComponent.h index 61c8bd6..d3d9b9f 100644 --- a/c++/src/H5IdComponent.h +++ b/c++/src/H5IdComponent.h @@ -17,11 +17,7 @@ #ifndef __IdComponent_H #define __IdComponent_H -// IdComponent represents an HDF5 object that has an identifier. - -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif class DataSpace; /*! \class IdComponent @@ -120,7 +116,5 @@ class H5_DLLCPP IdComponent { }; // end class IdComponent -#ifndef H5_NO_NAMESPACE } -#endif #endif // __IdComponent_H diff --git a/c++/src/H5IntType.cpp b/c++/src/H5IntType.cpp index 780e44d..69fbedb 100644 --- a/c++/src/H5IntType.cpp +++ b/c++/src/H5IntType.cpp @@ -19,23 +19,20 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5Location.h" -#include "H5Object.h" #include "H5OcreatProp.h" #include "H5DcreatProp.h" +#include "H5DxferProp.h" +#include "H5Location.h" +#include "H5Object.h" #include "H5DataType.h" #include "H5AbstractDs.h" -#include "H5DxferProp.h" #include "H5DataSpace.h" #include "H5AtomType.h" #include "H5IntType.h" #include "H5DataSet.h" #include "H5PredType.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif - //-------------------------------------------------------------------------- // Function: IntType default constructor @@ -136,6 +133,4 @@ void IntType::setSign( H5T_sign_t sign ) const //-------------------------------------------------------------------------- IntType::~IntType() {} -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5IntType.h b/c++/src/H5IntType.h index e28f5c2..54c0d57 100644 --- a/c++/src/H5IntType.h +++ b/c++/src/H5IntType.h @@ -17,11 +17,14 @@ #ifndef __H5IntType_H #define __H5IntType_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif -//! Class IntType operates on HDF5 integer datatype. +/*! \class IntType + \brief IntType is a derivative of a DataType and operates on HDF5 + integer datatype. + + Inheritance: AtomType -> DataType -> H5Object -> H5Location -> IdComponent +*/ class H5_DLLCPP IntType : public AtomType { public: // Creates an integer type using a predefined type @@ -51,7 +54,5 @@ class H5_DLLCPP IntType : public AtomType { // Noop destructor. virtual ~IntType(); }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5IntType_H diff --git a/c++/src/H5Library.cpp b/c++/src/H5Library.cpp index 30f68e2..1726121 100644 --- a/c++/src/H5Library.cpp +++ b/c++/src/H5Library.cpp @@ -25,18 +25,16 @@ #include "H5FcreatProp.h" #include "H5OcreatProp.h" #include "H5DxferProp.h" +#include "H5DcreatProp.h" #include "H5Location.h" #include "H5Object.h" #include "H5DataType.h" -#include "H5DcreatProp.h" #include "H5AtomType.h" #include "H5PredType.h" #include "H5DataSpace.h" #include "H5Library.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif //-------------------------------------------------------------------------- // Function: H5Library::open (static) @@ -82,7 +80,7 @@ void H5Library::close() //-------------------------------------------------------------------------- void H5Library::dontAtExit() { - herr_t ret_value = H5dont_atexit(); + (void)H5dont_atexit(); } //-------------------------------------------------------------------------- @@ -255,12 +253,20 @@ void H5Library::setFreeListLimits(int reg_global_lim, int reg_list_lim, } } -// Default constructor - private +#ifndef DOXYGEN_SHOULD_SKIP_THIS +//-------------------------------------------------------------------------- +// Function: H5Library default constructor - private +///\brief Default constructor: Creates a stub H5Library object +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- H5Library::H5Library(){} -// Destructor - private +//-------------------------------------------------------------------------- +// Function: H5Library destructor +///\brief Noop destructor +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- H5Library::~H5Library(){} +#endif // DOXYGEN_SHOULD_SKIP_THIS -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5Library.h b/c++/src/H5Library.h index 308881b..694b052 100644 --- a/c++/src/H5Library.h +++ b/c++/src/H5Library.h @@ -17,9 +17,7 @@ #ifndef __H5Library_H #define __H5Library_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif /*! \class H5Library \brief Class H5Library operates the HDF5 library globably. @@ -72,7 +70,5 @@ class H5_DLLCPP H5Library { #endif // DOXYGEN_SHOULD_SKIP_THIS }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5Library_H diff --git a/c++/src/H5Location.cpp b/c++/src/H5Location.cpp index 4048d94..cb4fd12 100644 --- a/c++/src/H5Location.cpp +++ b/c++/src/H5Location.cpp @@ -19,28 +19,25 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5Location.h" -#include "H5Object.h" +#include "H5FaccProp.h" +#include "H5FcreatProp.h" #include "H5OcreatProp.h" #include "H5DcreatProp.h" #include "H5DxferProp.h" -#include "H5FaccProp.h" -#include "H5FcreatProp.h" -#include "H5DataType.h" -#include "H5DataSpace.h" +#include "H5Location.h" +#include "H5Object.h" #include "H5AbstractDs.h" -#include "H5Group.h" -#include "H5File.h" +#include "H5DataSpace.h" #include "H5DataSet.h" #include "H5Attribute.h" +#include "H5Group.h" +#include "H5File.h" +#include "H5Alltypes.h" #include "H5private.h" // for HDmemset -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif #ifndef DOXYGEN_SHOULD_SKIP_THIS - //-------------------------------------------------------------------------- // Function: H5Location default constructor (protected) // Programmer Binh-Minh Ribler - 2000 @@ -658,12 +655,1280 @@ DataSpace H5Location::getRegion(void *ref, H5R_type_t ref_type) const } +// From H5CommonFG.cpp +// Notes with "***Updated" are new and for Group.cpp +// Original notes are from December 2000 +// +// There are a few comments that are common to most of the functions +// defined in this file so they are listed here. +// - getLocId is called by all functions, that call a C API, to get +// the location id, which can be either a file id or a group id. +// This function is pure virtual and it's up to H5File and Group +// to call the right getId() - although, as the structure of the +// library at this time, getId() is basically the IdComponent::getId() +// ***Updated: after the classes are rearranged (HDFFV-9920), functions +// in CommonFG are moved to Group, and they can call getId() +// instead of getLocId(). getLocId() is kept for backward +// compatibility on user applications. Aug 18, 2016 -BMR +// ***Updated: Moving to Group was a mistake, now to H5Location +// Aug 24, 2016 -BMR +// - when a failure returned by the C API, the functions will call +// throwException, which is a pure virtual function and is implemented +// by H5File to throw a FileIException and by Group to throw a +// GroupIException. +// ***Updated: after HDFFV-9920, methods in classes H5Location and Group +// use throwException to distinguish the FileIException and GroupIException. +// CommonFG is no longer used in the library. Aug 18, 2016 -BMR +// ***Note: following the changes in HDFFV-9920, some of the methods could +// throw different exceptions, but for backward-compatibility, throwException +// is kept in those methods as well. Sep 17, 2016 -BMR + //-------------------------------------------------------------------------- -// Function: H5Location destructor -///\brief Noop destructor. +// Function: H5Location::createGroup +///\brief Creates a new group at this location which can be a file +/// or another group. +///\param name - IN: Name of the group to create +///\param size_hint - IN: Indicates the number of bytes to reserve for +/// the names that will appear in the group +///\return Group instance +///\exception H5::FileIException or H5::GroupIException +///\par Description +/// The optional \a size_hint specifies how much file space to +/// reserve for storing the names that will appear in this new +/// group. If a non-positive value is provided for the \a size_hint +/// then a default size is chosen. // Programmer Binh-Minh Ribler - 2000 //-------------------------------------------------------------------------- -H5Location::~H5Location() {} +Group H5Location::createGroup( const char* name, size_t size_hint ) const +{ + // Group creation property list for size hint + hid_t gcpl_id = 0; + + // Set the local heap size hint + if (size_hint > 0) + { + // If the creation of the property list failed, throw an exception + if ((gcpl_id = H5Pcreate(H5P_GROUP_CREATE)) < 0) + throwException("createGroup", "H5Pcreate failed"); + + if (H5Pset_local_heap_size_hint(gcpl_id, size_hint) < 0) { + H5Pclose(gcpl_id); + throwException("createGroup", "H5Pset_local_heap_size_hint failed"); + } + } + + // Call C routine H5Gcreate2 to create the named group, giving the + // location id which can be a file id or a group id + hid_t group_id = H5Gcreate2(getId(), name, H5P_DEFAULT, gcpl_id, H5P_DEFAULT ); + + // Close the group creation property list, if necessary + if(gcpl_id > 0) + H5Pclose(gcpl_id); + + // If the creation of the group failed, throw an exception + if( group_id < 0 ) + throwException("createGroup", "H5Gcreate2 failed"); + + // No failure, create and return the Group object + Group group; + //group.p_setId(group_id); + H5Location *ptr = &group; + ptr->p_setId(group_id); + return( group ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::createGroup +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +Group H5Location::createGroup( const H5std_string& name, size_t size_hint ) const +{ + return( createGroup( name.c_str(), size_hint )); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openGroup +///\brief Opens an existing group in a location which can be a file +/// or another group. +///\param name - IN: Name of the group to open +///\return Group instance +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +Group H5Location::openGroup( const char* name ) const +{ + // Call C routine H5Gopen2 to open the named group, giving the + // location id which can be a file id or a group id + hid_t group_id = H5Gopen2(getId(), name, H5P_DEFAULT ); + + // If the opening of the group failed, throw an exception + if( group_id < 0 ) + throwException("openGroup", "H5Gopen2 failed"); + + // No failure, create and return the Group object + Group group; + //group.p_setId(group_id); + H5Location *ptr = &group; + ptr->p_setId(group_id); + return( group ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openGroup +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +Group H5Location::openGroup( const H5std_string& name ) const +{ + return( openGroup( name.c_str() )); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::createDataSet +///\brief Creates a new dataset at this location. +///\param name - IN: Name of the dataset to create +///\param data_type - IN: Datatype of the dataset +///\param data_space - IN: Dataspace for the dataset +///\param create_plist - IN: Creation properly list for the dataset +///\return DataSet instance +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +DataSet H5Location::createDataSet( const char* name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist ) const +{ + // Obtain identifiers for C API + hid_t type_id = data_type.getId(); + hid_t space_id = data_space.getId(); + hid_t create_plist_id = create_plist.getId(); + + // Call C routine H5Dcreate2 to create the named dataset + hid_t dataset_id = H5Dcreate2(getId(), name, type_id, space_id, H5P_DEFAULT, create_plist_id, H5P_DEFAULT ); + + // If the creation of the dataset failed, throw an exception + if( dataset_id < 0 ) + throwException("createDataSet", "H5Dcreate2 failed"); + + // No failure, create and return the DataSet object + DataSet dataset; + f_DataSet_setId(&dataset, dataset_id); + return( dataset ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::createDataSet +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +DataSet H5Location::createDataSet( const H5std_string& name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist ) const +{ + return( createDataSet( name.c_str(), data_type, data_space, create_plist )); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openDataSet +///\brief Opens an existing dataset at this location. +///\param name - IN: Name of the dataset to open +///\return DataSet instance +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +DataSet H5Location::openDataSet( const char* name ) const +{ + // Call C function H5Dopen2 to open the specified dataset, giving + // the location id and the dataset's name + hid_t dataset_id = H5Dopen2(getId(), name, H5P_DEFAULT ); + + // If the dataset's opening failed, throw an exception + if(dataset_id < 0) + throwException("openDataSet", "H5Dopen2 failed"); + + // No failure, create and return the DataSet object + DataSet dataset; + f_DataSet_setId(&dataset, dataset_id); + return( dataset ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openDataSet +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +DataSet H5Location::openDataSet( const H5std_string& name ) const +{ + return( openDataSet( name.c_str() )); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::link +///\brief Creates a link of the specified type from \a new_name to +/// \a curr_name. +///\param link_type - IN: Link type; possible values are +/// \li \c H5G_LINK_HARD +/// \li \c H5G_LINK_SOFT +///\param curr_name - IN: Name of the existing object if link is a hard +/// link; can be anything for the soft link +///\param new_name - IN: New name for the object +///\exception H5::FileIException or H5::GroupIException +///\par Description +/// Note that both names are interpreted relative to the +/// specified location. +/// For information on creating hard link and soft link, please +/// refer to the C layer Reference Manual at: +/// http://hdfgroup.org/HDF5/doc/RM/RM_H5L.html#Link-CreateHard and +/// http://hdfgroup.org/HDF5/doc/RM/RM_H5L.html#Link-CreateSoft +// Programmer Binh-Minh Ribler - 2000 +// Modification +// 2007: QAK modified to use H5L APIs - BMR +//-------------------------------------------------------------------------- +void H5Location::link( H5L_type_t link_type, const char* curr_name, const char* new_name ) const +{ + herr_t ret_value = -1; + + switch(link_type) { + case H5L_TYPE_HARD: + ret_value = H5Lcreate_hard(getId(), curr_name, H5L_SAME_LOC, new_name, H5P_DEFAULT, H5P_DEFAULT ); + break; + + case H5L_TYPE_SOFT: + ret_value = H5Lcreate_soft( curr_name,getId(), new_name, H5P_DEFAULT, H5P_DEFAULT ); + break; + + case H5L_TYPE_ERROR: + case H5L_TYPE_EXTERNAL: + case H5L_TYPE_MAX: + default: + throwException("link", "unknown link type"); + break; + } /* end switch */ + + if( ret_value < 0 ) + throwException("link", "creating link failed"); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::link +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a curr_name and \a new_name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +void H5Location::link( H5L_type_t link_type, const H5std_string& curr_name, const H5std_string& new_name ) const +{ + link( link_type, curr_name.c_str(), new_name.c_str() ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::unlink +///\brief Removes the specified name at this location. +///\param name - IN: Name of the object to be removed +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +// Modification +// 2007: QAK modified to use H5L APIs - BMR +//-------------------------------------------------------------------------- +void H5Location::unlink( const char* name ) const +{ + herr_t ret_value = H5Ldelete(getId(), name, H5P_DEFAULT ); + if( ret_value < 0 ) + throwException("unlink", "H5Ldelete failed"); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::unlink +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +void H5Location::unlink( const H5std_string& name ) const +{ + unlink( name.c_str() ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::move +///\brief Renames an object at this location. +///\param src - IN: Object's original name +///\param dst - IN: Object's new name +///\exception H5::FileIException or H5::GroupIException +///\note +/// Exercise care in moving groups as it is possible to render +/// data in a file inaccessible with H5Location::move. Please refer +/// to the Group Interface in the HDF5 User's Guide for details at: +/// https://www.hdfgroup.org/HDF5/doc/UG/HDF5_Users_Guide-Responsive%20HTML5/index.html#t=HDF5_Users_Guide%2FGroups%2FHDF5_Groups.htm +// Programmer Binh-Minh Ribler - 2000 +// Modification +// 2007: QAK modified to use H5L APIs - BMR +//-------------------------------------------------------------------------- +void H5Location::move( const char* src, const char* dst ) const +{ + herr_t ret_value = H5Lmove(getId(), src, H5L_SAME_LOC, dst, H5P_DEFAULT, H5P_DEFAULT ); + if( ret_value < 0 ) + throwException("move", "H5Lmove failed"); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::move +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a src and \a dst. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +void H5Location::move( const H5std_string& src, const H5std_string& dst ) const +{ + move( src.c_str(), dst.c_str() ); +} + +#ifndef H5_NO_DEPRECATED_SYMBOLS +//-------------------------------------------------------------------------- +// Function: H5Location::getObjinfo +///\brief Returns information about an object. +///\param name - IN: Name of the object +///\param follow_link - IN: Link flag +///\param statbuf - OUT: Buffer to return information about the object +///\exception H5::FileIException or H5::GroupIException +///\par Description +/// For more information, please refer to the C layer Reference +/// Manual at: +/// http://www.hdfgroup.org/HDF5/doc/RM/RM_H5G.html#Group-GetObjinfo +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +void H5Location::getObjinfo( const char* name, hbool_t follow_link, H5G_stat_t& statbuf ) const +{ + herr_t ret_value = H5Gget_objinfo(getId(), name, follow_link, &statbuf ); + if( ret_value < 0 ) + throwException("getObjinfo", "H5Gget_objinfo failed"); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::getObjinfo +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +void H5Location::getObjinfo( const H5std_string& name, hbool_t follow_link, H5G_stat_t& statbuf ) const +{ + getObjinfo( name.c_str(), follow_link, statbuf ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::getObjinfo +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above functions in that it doesn't have +/// the paramemter \a follow_link. +// Programmer Binh-Minh Ribler - Nov, 2005 +// Note: need to modify to use H5Oget_info and H5Lget_info - BMR +//-------------------------------------------------------------------------- +void H5Location::getObjinfo( const char* name, H5G_stat_t& statbuf ) const +{ + herr_t ret_value = H5Gget_objinfo(getId(), name, 0, &statbuf ); + if( ret_value < 0 ) + throwException("getObjinfo", "H5Gget_objinfo failed"); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::getObjinfo +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - Nov, 2005 +//-------------------------------------------------------------------------- +void H5Location::getObjinfo( const H5std_string& name, H5G_stat_t& statbuf ) const +{ + getObjinfo( name.c_str(), statbuf ); +} +#endif /* H5_NO_DEPRECATED_SYMBOLS */ + +//-------------------------------------------------------------------------- +// Function: H5Location::getLinkval +///\brief Returns the name of the object that the symbolic link points to. +///\param name - IN: Symbolic link to the object +///\param size - IN: Maximum number of characters of value to be returned +///\return Name of the object +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +H5std_string H5Location::getLinkval( const char* name, size_t size ) const +{ + H5L_info_t linkinfo; + char *value_C; // value in C string + size_t val_size = size; + H5std_string value = ""; + herr_t ret_value; + + // if user doesn't provide buffer size, determine it + if (size == 0) + { + ret_value = H5Lget_info(getId(), name, &linkinfo, H5P_DEFAULT); + if( ret_value < 0 ) + throwException("getLinkval", "H5Lget_info to find buffer size failed"); + + val_size = linkinfo.u.val_size; + } + + // if link has value, retrieve the value, otherwise, return null string + if (val_size > 0) + { + value_C = new char[val_size+1]; // temporary C-string for C API + HDmemset(value_C, 0, val_size+1); // clear buffer + + ret_value = H5Lget_val(getId(), name, value_C, val_size, H5P_DEFAULT); + if( ret_value < 0 ) + { + delete []value_C; + throwException("getLinkval", "H5Lget_val failed"); + } + + value = H5std_string(value_C); + delete []value_C; + } + return(value); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::getLinkval +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +H5std_string H5Location::getLinkval( const H5std_string& name, size_t size ) const +{ + return( getLinkval( name.c_str(), size )); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::mount +///\brief Mounts the file \a child onto this group. +///\param name - IN: Name of the group +///\param child - IN: File to mount +///\param plist - IN: Property list to use +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2014 (original 2000) +//-------------------------------------------------------------------------- +void H5Location::mount(const char* name, const H5File& child, const PropList& plist ) const +{ + // Obtain identifiers for C API + hid_t plist_id = plist.getId(); + hid_t child_id = child.getId(); + + // Call C routine H5Fmount to do the mouting + herr_t ret_value = H5Fmount(getId(), name, child_id, plist_id ); + + // Raise exception if H5Fmount returns negative value + if( ret_value < 0 ) + throwException("mount", "H5Fmount failed"); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::mount +// Purpose This is an overloaded member function, kept for backward +// compatibility. It differs from the above function in that it +// misses const's. This wrapper will be removed in future release. +// Param name - IN: Name of the group +// Param child - IN: File to mount +// Param plist - IN: Property list to use +// Exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +// Modification +// Modified to call its replacement. -BMR, 2014/04/16 +// Removed from documentation. -BMR, 2016/03/07 1.8.17 and 1.10.0 +// Removed from code. -BMR, 2016/08/11 1.8.18 and 1.10.1 +//-------------------------------------------------------------------------- +//void H5Location::mount(const char* name, H5File& child, PropList& plist) const +//{ +// mount(name, child, plist); +//} + +//-------------------------------------------------------------------------- +// Function: H5Location::mount +///\brief This is an overloaded member function, provided for convenience. +/// It takes an \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +void H5Location::mount(const H5std_string& name, const H5File& child, const PropList& plist) const +{ + mount(name.c_str(), child, plist); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::mount +// Purpose This is an overloaded member function, kept for backward +// compatibility. It differs from the above function in that it +// misses const's. This wrapper will be removed in future release. +// Programmer Binh-Minh Ribler - 2014 +// Modification +// Modified to call its replacement. -BMR, 2014/04/16 +// Removed from documentation. -BMR, 2016/03/07 1.8.17 and 1.10.0 +// Removed from code. -BMR, 2016/08/11 1.8.18 and 1.10.1 +//-------------------------------------------------------------------------- +//void H5Location::mount(const H5std_string& name, H5File& child, PropList& plist) const +//{ +// mount(name.c_str(), child, plist); +//} + +//-------------------------------------------------------------------------- +// Function: H5Location::unmount +///\brief Unmounts the specified file. +///\param name - IN: Name of the file to unmount +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +void H5Location::unmount( const char* name ) const +{ + // Call C routine H5Fmount to do the mouting + herr_t ret_value = H5Funmount(getId(), name ); + + // Raise exception if H5Funmount returns negative value + if( ret_value < 0 ) + throwException("unmount", "H5Funmount failed"); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::unmount +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +void H5Location::unmount( const H5std_string& name ) const +{ + unmount( name.c_str() ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openDataType +///\brief Opens the named generic datatype at this location. +///\param name - IN: Name of the datatype to open +///\return DataType instance +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +DataType H5Location::openDataType( const char* name ) const +{ + // Call C function H5Topen2 to open the named datatype in this group, + // given either the file or group id + hid_t type_id = H5Topen2(getId(), name, H5P_DEFAULT); + + // If the datatype's opening failed, throw an exception + if( type_id < 0 ) + throwException("openDataType", "H5Topen2 failed"); + + // No failure, create and return the DataType object + DataType data_type; + f_DataType_setId(&data_type, type_id); + return(data_type); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openDataType +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +DataType H5Location::openDataType( const H5std_string& name ) const +{ + return( openDataType( name.c_str()) ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openArrayType +///\brief Opens the named array datatype at this location. +///\param name - IN: Name of the array datatype to open +///\return ArrayType instance +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - Jul, 2005 +//-------------------------------------------------------------------------- +ArrayType H5Location::openArrayType( const char* name ) const +{ + // Call C function H5Topen2 to open the named datatype in this group, + // given either the file or group id + hid_t type_id = H5Topen2(getId(), name, H5P_DEFAULT); + + // If the datatype's opening failed, throw an exception + if( type_id < 0 ) + throwException("openArrayType", "H5Topen2 failed"); + + // No failure, create and return the ArrayType object + ArrayType array_type; + f_DataType_setId(&array_type, type_id); + return(array_type); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openArrayType +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - Jul, 2005 +//-------------------------------------------------------------------------- +ArrayType H5Location::openArrayType( const H5std_string& name ) const +{ + return( openArrayType( name.c_str()) ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openCompType +///\brief Opens the named compound datatype at this location. +///\param name - IN: Name of the compound datatype to open +///\return CompType instance +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +CompType H5Location::openCompType( const char* name ) const +{ + // Call C function H5Topen2 to open the named datatype in this group, + // given either the file or group id + hid_t type_id = H5Topen2(getId(), name, H5P_DEFAULT); + + // If the datatype's opening failed, throw an exception + if( type_id < 0 ) + throwException("openCompType", "H5Topen2 failed"); + + // No failure, create and return the CompType object + CompType comp_type; + f_DataType_setId(&comp_type, type_id); + return(comp_type); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openCompType +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +CompType H5Location::openCompType( const H5std_string& name ) const +{ + return( openCompType( name.c_str()) ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openEnumType +///\brief Opens the named enumeration datatype at this location. +///\param name - IN: Name of the enumeration datatype to open +///\return EnumType instance +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +EnumType H5Location::openEnumType( const char* name ) const +{ + // Call C function H5Topen2 to open the named datatype in this group, + // given either the file or group id + hid_t type_id = H5Topen2(getId(), name, H5P_DEFAULT); + + // If the datatype's opening failed, throw an exception + if( type_id < 0 ) + throwException("openEnumType", "H5Topen2 failed"); + + // No failure, create and return the EnumType object + EnumType enum_type; + f_DataType_setId(&enum_type, type_id); + return(enum_type); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openEnumType +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +EnumType H5Location::openEnumType( const H5std_string& name ) const +{ + return( openEnumType( name.c_str()) ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openIntType +///\brief Opens the named integer datatype at this location. +///\param name - IN: Name of the integer datatype to open +///\return IntType instance +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +IntType H5Location::openIntType( const char* name ) const +{ + // Call C function H5Topen2 to open the named datatype in this group, + // given either the file or group id + hid_t type_id = H5Topen2(getId(), name, H5P_DEFAULT); + + // If the datatype's opening failed, throw an exception + if( type_id < 0 ) + throwException("openIntType", "H5Topen2 failed"); + + // No failure, create and return the IntType object + IntType int_type; + f_DataType_setId(&int_type, type_id); + return(int_type); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openIntType +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +IntType H5Location::openIntType( const H5std_string& name ) const +{ + return( openIntType( name.c_str()) ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openFloatType +///\brief Opens the named floating-point datatype at this location. +///\param name - IN: Name of the floating-point datatype to open +///\return FloatType instance +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +FloatType H5Location::openFloatType( const char* name ) const +{ + // Call C function H5Topen2 to open the named datatype in this group, + // given either the file or group id + hid_t type_id = H5Topen2(getId(), name, H5P_DEFAULT); + + // If the datatype's opening failed, throw an exception + if( type_id < 0 ) + throwException("openFloatType", "H5Topen2 failed"); + + // No failure, create and return the FloatType object + FloatType float_type; + f_DataType_setId(&float_type, type_id); + return(float_type); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openFloatType +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +FloatType H5Location::openFloatType( const H5std_string& name ) const +{ + return( openFloatType( name.c_str()) ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openStrType +///\brief Opens the named string datatype at this location. +///\param name - IN: Name of the string datatype to open +///\return StrType instance +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +StrType H5Location::openStrType( const char* name ) const +{ + // Call C function H5Topen2 to open the named datatype in this group, + // given either the file or group id + hid_t type_id = H5Topen2(getId(), name, H5P_DEFAULT); + + // If the datatype's opening failed, throw an exception + if( type_id < 0 ) + throwException("openStrType", "H5Topen2 failed"); + + // No failure, create and return the StrType object + StrType str_type; + f_DataType_setId(&str_type, type_id); + return(str_type); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openStrType +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +StrType H5Location::openStrType( const H5std_string& name ) const +{ + return( openStrType( name.c_str()) ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openVarLenType +///\brief Opens the named variable length datatype at this location. +///\param name - IN: Name of the variable length datatype to open +///\return VarLenType instance +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - Jul, 2005 +//-------------------------------------------------------------------------- +VarLenType H5Location::openVarLenType( const char* name ) const +{ + // Call C function H5Topen2 to open the named datatype in this group, + // given either the file or group id + hid_t type_id = H5Topen2(getId(), name, H5P_DEFAULT); + + // If the datatype's opening failed, throw an exception + if( type_id < 0 ) + throwException("openVarLenType", "H5Topen2 failed"); + + // No failure, create and return the VarLenType object + VarLenType varlen_type; + f_DataType_setId(&varlen_type, type_id); + return(varlen_type); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::openVarLenType +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - Jul, 2005 +//-------------------------------------------------------------------------- +VarLenType H5Location::openVarLenType( const H5std_string& name ) const +{ + return( openVarLenType( name.c_str()) ); +} + +#ifndef H5_NO_DEPRECATED_SYMBOLS +//-------------------------------------------------------------------------- +// Function: H5Location::iterateElems +///\brief Iterates a user's function over the entries of a group. +///\param name - IN : Name of group to iterate over +///\param idx - IN/OUT: Starting (IN) and ending (OUT) entry indices +///\param op - IN : User's function to operate on each entry +///\param op_data - IN/OUT: Data associated with the operation +///\return The return value of the first operator that returns non-zero, +/// or zero if all members were processed with no operator +/// returning non-zero. +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +int H5Location::iterateElems( const char* name, int *idx, H5G_iterate_t op , void* op_data ) +{ + int ret_value = H5Giterate(getId(), name, idx, op, op_data ); + if( ret_value < 0 ) + { + throwException("iterateElems", "H5Giterate failed"); + } + return( ret_value ); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::iterateElems +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +int H5Location::iterateElems( const H5std_string& name, int *idx, H5G_iterate_t op , void* op_data ) +{ + return( iterateElems( name.c_str(), idx, op, op_data )); +} +#endif /* H5_NO_DEPRECATED_SYMBOLS */ + +//-------------------------------------------------------------------------- +// Function: H5Location::getNumObjs +///\brief Returns the number of objects in this group. +///\return Number of objects +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - January, 2003 +//-------------------------------------------------------------------------- +hsize_t H5Location::getNumObjs() const +{ + H5G_info_t ginfo; /* Group information */ + + herr_t ret_value = H5Gget_info(getId(), &ginfo); + if(ret_value < 0) + throwException("getNumObjs", "H5Gget_info failed"); + return (ginfo.nlinks); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::getObjnameByIdx +///\brief Returns the name of an object in this group, given the +/// object's index. +///\param idx - IN: Transient index of the object +///\return Object name +///\exception H5::FileIException or H5::GroupIException +///\par Description +/// The value of idx can be any nonnegative number less than the +/// total number of objects in the group, which is returned by +/// the function \c H5Location::getNumObjs. Note that this is a +/// transient index; thus, an object may have a different index +/// each time the group is opened. +// Programmer Binh-Minh Ribler - Mar, 2005 +//-------------------------------------------------------------------------- +H5std_string H5Location::getObjnameByIdx(hsize_t idx) const +{ + // call H5Lget_name_by_idx with name as NULL to get its length + ssize_t name_len = H5Lget_name_by_idx(getId(), ".", H5_INDEX_NAME, H5_ITER_INC, idx, NULL, 0, H5P_DEFAULT); + if(name_len < 0) + throwException("getObjnameByIdx", "H5Lget_name_by_idx failed"); + + // now, allocate C buffer to get the name + char* name_C = new char[name_len+1]; + HDmemset(name_C, 0, name_len+1); // clear buffer + + name_len = H5Lget_name_by_idx(getId(), ".", H5_INDEX_NAME, H5_ITER_INC, idx, name_C, name_len+1, H5P_DEFAULT); + + if (name_len < 0) + { + delete []name_C; + throwException("getObjnameByIdx", "H5Lget_name_by_idx failed"); + } + + // clean up and return the string + H5std_string name = H5std_string(name_C); + delete []name_C; + return (name); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::getObjnameByIdx +///\brief Retrieves the name of an object in this group, given the +/// object's index. +///\param idx - IN: Transient index of the object +///\param name - IN/OUT: Retrieved name of the object +///\param size - IN: Length to retrieve +///\return Actual size of the object name or 0, if object has no name +///\exception H5::FileIException or H5::GroupIException +///\par Description +/// The value of idx can be any nonnegative number less than the +/// total number of objects in the group, which is returned by +/// the function \c H5Location::getNumObjs. Note that this is a +/// transient index; thus, an object may have a different index +/// each time the group is opened. +// Programmer Binh-Minh Ribler - January, 2003 +//-------------------------------------------------------------------------- +ssize_t H5Location::getObjnameByIdx(hsize_t idx, char* name, size_t size) const +{ + ssize_t name_len = H5Lget_name_by_idx(getId(), ".", H5_INDEX_NAME, H5_ITER_INC, idx, name, size, H5P_DEFAULT); + if(name_len < 0) + throwException("getObjnameByIdx", "H5Lget_name_by_idx failed"); + + return (name_len); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::getObjnameByIdx +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function in that it takes an +/// \c H5std_string for \a name. +// Programmer Binh-Minh Ribler - January, 2003 +//-------------------------------------------------------------------------- +ssize_t H5Location::getObjnameByIdx(hsize_t idx, H5std_string& name, size_t size) const +{ + char* name_C = new char[size+1]; // temporary C-string for object name + HDmemset(name_C, 0, size+1); // clear buffer + + // call overloaded function to get the name + ssize_t name_len = getObjnameByIdx(idx, name_C, size+1); + if(name_len < 0) + { + delete []name_C; + throwException("getObjnameByIdx", "H5Lget_name_by_idx failed"); + } + + // clean up and return the string + name = H5std_string(name_C); + delete []name_C; + return (name_len); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::childObjType +///\brief Returns the type of an object in this file/group, given the +/// object's name. +///\param objname - IN: Name of the object +///\return Object type, which can have the following values for group, +/// dataset, and named datatype +/// \li \c H5O_TYPE_GROUP +/// \li \c H5O_TYPE_DATASET +/// \li \c H5O_TYPE_NAMED_DATATYPE +/// Refer to the C API documentation for more details: +/// http://www.hdfgroup.org/HDF5/doc/RM/RM_H5O.html#Object-GetInfo +///\exception H5::FileIException or H5::GroupIException +/// Exception will be thrown when: +/// - an error returned by the C API +/// - object type is not one of the valid values above +// Programmer Binh-Minh Ribler - April, 2014 +//-------------------------------------------------------------------------- +H5O_type_t H5Location::childObjType(const char* objname) const +{ + H5O_info_t objinfo; + H5O_type_t objtype = H5O_TYPE_UNKNOWN; + + // Use C API to get information of the object + herr_t ret_value = H5Oget_info_by_name(getId(), objname, &objinfo, H5P_DEFAULT); + + // Throw exception if C API returns failure + if (ret_value < 0) + throwException("childObjType", "H5Oget_info_by_name failed"); + // Return a valid type or throw an exception for unknown type + else + switch (objinfo.type) + { + case H5O_TYPE_GROUP: + case H5O_TYPE_DATASET: + case H5O_TYPE_NAMED_DATATYPE: + objtype = objinfo.type; + break; + case H5O_TYPE_UNKNOWN: + case H5O_TYPE_NTYPES: + default: + throwException("childObjType", "Unknown type of object"); + } + return(objtype); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::childObjType +///\brief This is an overloaded member function, provided for convenience. +/// It takes an \a H5std_string for the object's name. +///\brief Returns the type of an object in this group, given the +/// object's name. +///\param objname - IN: Name of the object (H5std_string&) +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - April, 2014 +//-------------------------------------------------------------------------- +H5O_type_t H5Location::childObjType(const H5std_string& objname) const +{ + // Use overloaded function + H5O_type_t objtype = childObjType(objname.c_str()); + return(objtype); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::childObjType +///\brief Returns the type of an object in this file/group, given the +/// object's index and its type and order. +///\param index - IN: Position of the object +///\param index_type - IN: Type of the index, default to H5_INDEX_NAME +///\param order - IN: Traversing order, default to H5_ITER_INC +///\param objname - IN: Name of the object, default to "." +///\return Object type, which can have the following values for group, +/// dataset, and named datatype +/// \li \c H5O_TYPE_GROUP +/// \li \c H5O_TYPE_DATASET +/// \li \c H5O_TYPE_NAMED_DATATYPE +/// Refer to the C API documentation for more details: +/// http://www.hdfgroup.org/HDF5/doc/RM/RM_H5O.html#Object-GetInfo +///\exception H5::FileIException or H5::GroupIException +/// Exception will be thrown when: +/// - an error returned by the C API +/// - object type is not one of the valid values above +// Developer's Notes: +// - this overload uses H5Oget_info_by_idx instead of H5Oget_info_by_name +// like the previous childObjType() +// - index is the required argument so, first +// - objname is last because it's more likely the location is already +// fully specified +// - Leave property list out for now because C API is not using it, it +// can be added later when needed. +// Programmer Binh-Minh Ribler - April, 2014 +//-------------------------------------------------------------------------- +H5O_type_t H5Location::childObjType(hsize_t index, H5_index_t index_type, H5_iter_order_t order, const char* objname) const +{ + herr_t ret_value; + H5O_info_t objinfo; + H5O_type_t objtype = H5O_TYPE_UNKNOWN; + + // Use C API to get information of the object + ret_value = H5Oget_info_by_idx(getId(), objname, index_type, order, index, &objinfo, H5P_DEFAULT); + + // Throw exception if C API returns failure + if (ret_value < 0) + throwException("childObjType", "H5Oget_info_by_idx failed"); + // Return a valid type or throw an exception for unknown type + else + switch (objinfo.type) + { + case H5O_TYPE_GROUP: + case H5O_TYPE_DATASET: + case H5O_TYPE_NAMED_DATATYPE: + objtype = objinfo.type; + break; + case H5O_TYPE_UNKNOWN: + case H5O_TYPE_NTYPES: + default: + throwException("childObjType", "Unknown type of object"); + } + return(objtype); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::childObjVersion +///\brief Returns the object header version of an object in this file/group, +/// given the object's name. +///\param objname - IN: Name of the object +///\return Object version, which can have the following values: +/// \li \c H5O_VERSION_1 +/// \li \c H5O_VERSION_2 +///\exception H5::FileIException or H5::GroupIException +/// Exception will be thrown when: +/// - an error returned by the C API +/// - version number is not one of the valid values above +// Programmer Binh-Minh Ribler - April, 2014 +//-------------------------------------------------------------------------- +unsigned H5Location::childObjVersion(const char* objname) const +{ + H5O_info_t objinfo; + unsigned version = 0; + + // Use C API to get information of the object + herr_t ret_value = H5Oget_info_by_name(getId(), objname, &objinfo, H5P_DEFAULT); + + // Throw exception if C API returns failure + if (ret_value < 0) + throwException("childObjVersion", "H5Oget_info_by_name failed"); + // Return a valid version or throw an exception for invalid value + else + { + version = objinfo.hdr.version; + if (version != H5O_VERSION_1 && version != H5O_VERSION_2) + throwException("childObjVersion", "Invalid version for object"); + } + return(version); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::childObjVersion +///\brief This is an overloaded member function, provided for convenience. +/// It takes an \a H5std_string for the object's name. +///\brief Returns the type of an object in this group, given the +/// object's name. +///\param objname - IN: Name of the object (H5std_string&) +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - April, 2014 +//-------------------------------------------------------------------------- +unsigned H5Location::childObjVersion(const H5std_string& objname) const +{ + // Use overloaded function + unsigned version = childObjVersion(objname.c_str()); + return(version); +} + +#ifndef H5_NO_DEPRECATED_SYMBOLS +#ifndef DOXYGEN_SHOULD_SKIP_THIS +//-------------------------------------------------------------------------- +// Function: H5Location::getObjTypeByIdx +///\brief Returns the type of an object in this group, given the +/// object's index. +///\param idx - IN: Transient index of the object +///\return Object type +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - January, 2003 +//-------------------------------------------------------------------------- +H5G_obj_t H5Location::getObjTypeByIdx(hsize_t idx) const +{ + H5G_obj_t obj_type = H5Gget_objtype_by_idx(getId(), idx); + if (obj_type == H5G_UNKNOWN) + throwException("getObjTypeByIdx", "H5Gget_objtype_by_idx failed"); + + return (obj_type); +} + +//-------------------------------------------------------------------------- +// Function: H5Location::getObjTypeByIdx +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function because it also provides +/// the returned object type in text (char*) +///\param idx - IN: Transient index of the object +///\param type_name - OUT: Object type in text +///\return Object type +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - May, 2010 +// Modification +// Modified to use the other function. -BMR, 2016/03/07 +//-------------------------------------------------------------------------- +H5G_obj_t H5Location::getObjTypeByIdx(hsize_t idx, char* type_name) const +{ + H5std_string stype_name(type_name); + return(getObjTypeByIdx(idx, stype_name)); +} +//-------------------------------------------------------------------------- +// Function: H5Location::getObjTypeByIdx +///\brief This is an overloaded member function, provided for convenience. +/// It differs from the above function because it also provides +/// the returned object type in text (H5std_string&) +///\param idx - IN: Transient index of the object +///\param type_name - OUT: Object type in text +///\return Object type +///\exception H5::FileIException or H5::GroupIException +// Programmer Binh-Minh Ribler - January, 2003 +//-------------------------------------------------------------------------- +H5G_obj_t H5Location::getObjTypeByIdx(hsize_t idx, H5std_string& type_name) const +{ + H5G_obj_t obj_type = H5Gget_objtype_by_idx(getId(), idx); + switch (obj_type) + { + case H5G_LINK: type_name = H5std_string("symbolic link"); break; + case H5G_GROUP: type_name = H5std_string("group"); break; + case H5G_DATASET: type_name = H5std_string("dataset"); break; + case H5G_TYPE: type_name = H5std_string("datatype"); break; + case H5G_UNKNOWN: + case H5G_UDLINK: + case H5G_RESERVED_5: + case H5G_RESERVED_6: + case H5G_RESERVED_7: + default: + throwException("getObjTypeByIdx", "H5Gget_objtype_by_idx failed"); + } + return (obj_type); +} + +#endif // DOXYGEN_SHOULD_SKIP_THIS +#endif /* H5_NO_DEPRECATED_SYMBOLS */ + +//-------------------------------------------------------------------------- +// Function: H5Location::throwException +///\brief Invokes subclass' throwException +///\param func_name - Name of the function where failure occurs +///\param msg - Message describing the failure +///\exception H5::GroupIException +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +void H5Location::throwException(const H5std_string& func_name, const H5std_string& msg) const +{ + throwException(func_name, msg); +} + +//-------------------------------------------------------------------------- +// Function: f_DataType_setId - friend +// Purpose: This function is friend to class H5::DataType so that it +// can set DataType::id in order to work around a problem +// described in the JIRA issue HDFFV-7947. +// Applications shouldn't need to use it. +// param dtype - IN/OUT: DataType object to be changed +// param new_id - IN: New id to set +// Programmer Binh-Minh Ribler - 2015 +//-------------------------------------------------------------------------- +void f_DataType_setId(DataType* dtype, hid_t new_id) +{ + dtype->p_setId(new_id); +} + +//-------------------------------------------------------------------------- +// Function: f_DataSet_setId - friend +// Purpose: This function is friend to class H5::DataSet so that it +// can set DataSet::id in order to work around a problem +// described in the JIRA issue HDFFV-7947. +// Applications shouldn't need to use it. +// param dset - IN/OUT: DataSet object to be changed +// param new_id - IN: New id to set +// Programmer Binh-Minh Ribler - 2015 +//-------------------------------------------------------------------------- +void f_DataSet_setId(DataSet* dset, hid_t new_id) +{ + dset->p_setId(new_id); +} + +// end of From H5CommonFG.cpp //-------------------------------------------------------------------------- // Function: f_Attribute_setId - friend @@ -695,8 +1960,13 @@ void f_DataSpace_setId(DataSpace* dspace, hid_t new_id) dspace->p_setId(new_id); } +//-------------------------------------------------------------------------- +// Function: H5Location destructor +///\brief Noop destructor. +// Programmer Binh-Minh Ribler - 2000 +//-------------------------------------------------------------------------- +H5Location::~H5Location() {} + #endif // DOXYGEN_SHOULD_SKIP_THIS -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5Location.h b/c++/src/H5Location.h index 9000c5c..647904b 100644 --- a/c++/src/H5Location.h +++ b/c++/src/H5Location.h @@ -19,35 +19,21 @@ #include "H5Classes.h" // constains forward class declarations -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif - -//class H5_DLLCPP H5Location; // forward declaration for UserData4Aiterate - -// Define the operator function pointer for H5Aiterate(). -//typedef void (*attr_operator_t)( H5Location& loc/*in*/, - //const H5std_string attr_name/*in*/, - //void *operator_data/*in,out*/); - -//! User data for attribute iteration - /* class UserData4Aiterate { - public: - attr_operator_t op; - void* opData; - H5Location* location; -}; - */ /*! \class H5Location \brief H5Location is an abstract base class, added in version 1.8.12. It provides a collection of wrappers for the C functions that take a location identifier to specify the HDF5 object. The location identifier - can be either file, group, dataset, or named datatype. + can be either file, group, dataset, attribute, or named datatype. + Wrappers for H5A functions stay in H5Object. + + Inheritance: IdComponent */ -// Most of these methods were in H5Object but are now moved here because -// a location can be a file, group, dataset, or named datatype. -BMR, 2013-10-1 +// Class forwarding +class H5_DLLCPP ArrayType; +class H5_DLLCPP VarLenType; class H5_DLLCPP H5Location : public IdComponent { public: // Flushes all buffers associated with this location to disk. @@ -100,15 +86,134 @@ class H5_DLLCPP H5Location : public IdComponent { // Retrieves a dataspace with the region pointed to selected. DataSpace getRegion(void *ref, H5R_type_t ref_type = H5R_DATASET_REGION) const; - ///\brief Returns an identifier. (pure virtual) - virtual hid_t getId() const = 0; +// From CommonFG + // Creates a new group at this location which can be a file + // or another group. + Group createGroup(const char* name, size_t size_hint = 0) const; + Group createGroup(const H5std_string& name, size_t size_hint = 0) const; + + // Opens an existing group in a location which can be a file + // or another group. + Group openGroup(const char* name) const; + Group openGroup(const H5std_string& name) const; + + // Creates a new dataset in this group. + DataSet createDataSet(const char* name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist = DSetCreatPropList::DEFAULT) const; + DataSet createDataSet(const H5std_string& name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist = DSetCreatPropList::DEFAULT) const; + + // Opens an existing dataset at this location. + DataSet openDataSet(const char* name) const; + DataSet openDataSet(const H5std_string& name) const; + + // Returns the value of a symbolic link. + H5std_string getLinkval(const char* link_name, size_t size=0) const; + H5std_string getLinkval(const H5std_string& link_name, size_t size=0) const; + + // Returns the number of objects in this group. + hsize_t getNumObjs() const; + + // Retrieves the name of an object in this group, given the + // object's index. + H5std_string getObjnameByIdx(hsize_t idx) const; + ssize_t getObjnameByIdx(hsize_t idx, char* name, size_t size) const; + ssize_t getObjnameByIdx(hsize_t idx, H5std_string& name, size_t size) const; + + // Retrieves the type of an object in this file or group, given the + // object's name + H5O_type_t childObjType(const H5std_string& objname) const; + H5O_type_t childObjType(const char* objname) const; + H5O_type_t childObjType(hsize_t index, H5_index_t index_type=H5_INDEX_NAME, H5_iter_order_t order=H5_ITER_INC, const char* objname=".") const; + + // Returns the object header version of an object in this file or group, + // given the object's name. + unsigned childObjVersion(const char* objname) const; + unsigned childObjVersion(const H5std_string& objname) const; + +#ifndef H5_NO_DEPRECATED_SYMBOLS + // Returns the type of an object in this group, given the + // object's index. + H5G_obj_t getObjTypeByIdx(hsize_t idx) const; + H5G_obj_t getObjTypeByIdx(hsize_t idx, char* type_name) const; + H5G_obj_t getObjTypeByIdx(hsize_t idx, H5std_string& type_name) const; + + // Returns information about an HDF5 object, given by its name, + // at this location. + void getObjinfo(const char* name, hbool_t follow_link, H5G_stat_t& statbuf) const; + void getObjinfo(const H5std_string& name, hbool_t follow_link, H5G_stat_t& statbuf) const; + void getObjinfo(const char* name, H5G_stat_t& statbuf) const; + void getObjinfo(const H5std_string& name, H5G_stat_t& statbuf) const; + + // Iterates over the elements of this group - not implemented in + // C++ style yet. + int iterateElems(const char* name, int *idx, H5G_iterate_t op, void *op_data); + int iterateElems(const H5std_string& name, int *idx, H5G_iterate_t op, void *op_data); +#endif /* H5_NO_DEPRECATED_SYMBOLS */ + + // Creates a link of the specified type from new_name to current_name; + // both names are interpreted relative to the specified location id. + void link(H5L_type_t link_type, const char* curr_name, const char* new_name) const; + void link(H5L_type_t link_type, const H5std_string& curr_name, const H5std_string& new_name) const; + + // Removes the specified name at this location. + void unlink(const char* name) const; + void unlink(const H5std_string& name) const; + + // Mounts the file 'child' onto this location. + void mount(const char* name, const H5File& child, const PropList& plist) const; + //void mount(const char* name, H5File& child, PropList& plist) const; // removed from 1.8.18 and 1.10.1 + void mount(const H5std_string& name, const H5File& child, const PropList& plist) const; + //void mount(const H5std_string& name, H5File& child, PropList& plist) const; // removed from 1.8.18 and 1.10.1 + + // Unmounts the file named 'name' from this parent location. + void unmount(const char* name) const; + void unmount(const H5std_string& name) const; + + // Renames an object at this location. + void move(const char* src, const char* dst) const; + void move(const H5std_string& src, const H5std_string& dst) const; + + // Opens a generic named datatype in this location. + DataType openDataType(const char* name) const; + DataType openDataType(const H5std_string& name) const; + + // Opens a named array datatype in this location. + ArrayType openArrayType(const char* name) const; + ArrayType openArrayType(const H5std_string& name) const; + + // Opens a named compound datatype in this location. + CompType openCompType(const char* name) const; + CompType openCompType(const H5std_string& name) const; + + // Opens a named enumeration datatype in this location. + EnumType openEnumType(const char* name) const; + EnumType openEnumType(const H5std_string& name) const; + + // Opens a named integer datatype in this location. + IntType openIntType(const char* name) const; + IntType openIntType(const H5std_string& name) const; + + // Opens a named floating-point datatype in this location. + FloatType openFloatType(const char* name) const; + FloatType openFloatType(const H5std_string& name) const; + + // Opens a named string datatype in this location. + StrType openStrType(const char* name) const; + StrType openStrType(const H5std_string& name) const; + + // Opens a named variable length datatype in this location. + VarLenType openVarLenType(const char* name) const; + VarLenType openVarLenType(const H5std_string& name) const; + +// end From CommonFG + + /// For subclasses, H5File and Group, to throw appropriate exception. + virtual void throwException(const H5std_string& func_name, const H5std_string& msg) const; - protected: // Default constructor H5Location(); + protected: #ifndef DOXYGEN_SHOULD_SKIP_THIS - // *** Deprecation warning *** // The following two constructors are no longer appropriate after the // data member "id" had been moved to the sub-classes. @@ -144,7 +249,5 @@ class H5_DLLCPP H5Location : public IdComponent { }; /* end class H5Location */ -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5Location_H diff --git a/c++/src/H5Object.cpp b/c++/src/H5Object.cpp index 0cb392d..ab79d9d 100644 --- a/c++/src/H5Object.cpp +++ b/c++/src/H5Object.cpp @@ -19,13 +19,13 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5Location.h" -#include "H5Object.h" +#include "H5FaccProp.h" +#include "H5FcreatProp.h" #include "H5OcreatProp.h" #include "H5DcreatProp.h" #include "H5DxferProp.h" -#include "H5FaccProp.h" -#include "H5FcreatProp.h" +#include "H5Location.h" +#include "H5Object.h" #include "H5DataType.h" #include "H5DataSpace.h" #include "H5AbstractDs.h" @@ -35,9 +35,7 @@ #include "H5Attribute.h" #include "H5private.h" // for HDmemset -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif #ifndef DOXYGEN_SHOULD_SKIP_THIS // userAttrOpWrpr simply interfaces between the user's function and the @@ -87,7 +85,6 @@ H5Object::H5Object() : H5Location() {} //-------------------------------------------------------------------------- // H5Object::H5Object(const H5Object& original) : H5Location() {} - //-------------------------------------------------------------------------- // Function: H5Object::createAttribute ///\brief Creates an attribute for a group, dataset, or named datatype. @@ -465,6 +462,4 @@ ssize_t H5Object::getObjName(H5std_string& obj_name, size_t len) const H5Object::~H5Object() {} #endif // DOXYGEN_SHOULD_SKIP_THIS -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5Object.h b/c++/src/H5Object.h index c39de3a..72a9f50 100644 --- a/c++/src/H5Object.h +++ b/c++/src/H5Object.h @@ -17,28 +17,33 @@ #ifndef __H5Object_H #define __H5Object_H -//#include "H5Location.h" -//#include "H5Classes.h" // constains forward class declarations - -// H5Object is a baseclass. It has these subclasses: -// Group, DataSet, and DataType. -// DataType, in turn, has several specific datatypes as subclasses. -// Modification: -// Sept 18, 2012: Added class H5Location in between IdComponent and -// H5Object. An H5File now inherits from H5Location. All HDF5 -// wrappers in H5Object are moved up to H5Location. H5Object -// is left mostly empty for future wrappers that are only for -// group, dataset, and named datatype. Note that the reason for -// adding H5Location instead of simply moving H5File to be under -// H5Object is H5File is not an HDF5 object, and renaming H5Object -// to H5Location will risk breaking user applications. -// -BMR -// Apr 2, 2014: Added wrapper getObjName for H5Iget_name -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif +/*! \class H5Object + \brief Class H5Object is a bridge between H5Location and DataSet, DataType, + and Group. + + Modification: + Sept 18, 2012: Added class H5Location in between IdComponent and + H5Object. An H5File now inherits from H5Location. All HDF5 + wrappers in H5Object are moved up to H5Location. H5Object + is left mostly empty for future wrappers that are only for + group, dataset, and named datatype. Note that the reason for + adding H5Location instead of simply moving H5File to be under + H5Object is H5File is not an HDF5 object, and renaming H5Object + to H5Location will risk breaking user applications. + -BMR + Apr 2, 2014: Added wrapper getObjName for H5Iget_name + Sep 21, 2016: Rearranging classes (HDFFV-9920) moved H5A wrappers back + into H5Object. This way, C functions that takes attribute id + can be in H5Location and those that cannot take attribute id + can be in H5Object. + + Inheritance: H5Location -> IdComponent +*/ +// Class forwarding class H5_DLLCPP H5Object; +class H5_DLLCPP Attribute; // Define the operator function pointer for H5Aiterate(). typedef void (*attr_operator_t)( H5Object& loc/*in*/, @@ -53,18 +58,8 @@ class UserData4Aiterate { H5Object* location; }; -/*! \class H5Object - \brief Class H5Object is a bridge between H5Location and DataSet, DataType, - and Group. - - All the wrappers in H5Object were moved to H5Location. -*/ class H5_DLLCPP H5Object : public H5Location { public: -// Rearranging classes (HDFFV-9920) moved H5A wrappers back into H5Object. -// That way, C functions that takes attribute id can be in -// H5Location and those that cannot take attribute id can be in H5Object. - // Creates an attribute for the specified object // PropList is currently not used, so always be default. Attribute createAttribute( const char* name, const DataType& type, const DataSpace& space, const PropList& create_plist = PropList::DEFAULT ) const; @@ -135,7 +130,5 @@ class H5_DLLCPP H5Object : public H5Location { }; /* end class H5Object */ -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5Object_H diff --git a/c++/src/H5OcreatProp.cpp b/c++/src/H5OcreatProp.cpp index 635ffe9..3cda945 100644 --- a/c++/src/H5OcreatProp.cpp +++ b/c++/src/H5OcreatProp.cpp @@ -19,12 +19,10 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5FaccProp.h" #include "H5OcreatProp.h" +#include "H5FaccProp.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif #ifndef DOXYGEN_SHOULD_SKIP_THIS // This DOXYGEN_SHOULD_SKIP_THIS block is a work-around approach to control @@ -217,6 +215,4 @@ unsigned ObjCreatPropList::getAttrCrtOrder() const //-------------------------------------------------------------------------- ObjCreatPropList::~ObjCreatPropList() {} -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5OcreatProp.h b/c++/src/H5OcreatProp.h index 0fda34d..bfba1c4 100644 --- a/c++/src/H5OcreatProp.h +++ b/c++/src/H5OcreatProp.h @@ -17,11 +17,14 @@ #ifndef __H5ObjCreatPropList_H #define __H5ObjCreatPropList_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif -//! Class ObjCreatPropList represents the HDF5 object creation property list. +/*! \class ObjCreatPropList + \brief Class ObjCreatPropList inherits from PropList and provides + wrappers for the HDF5 file create property list. + + Inheritance: PropList -> IdComponent +*/ class H5_DLLCPP ObjCreatPropList : public PropList { public: ///\brief Default object creation property list. @@ -70,7 +73,5 @@ class H5_DLLCPP ObjCreatPropList : public PropList { #endif // DOXYGEN_SHOULD_SKIP_THIS }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5ObjCreatPropList_H diff --git a/c++/src/H5PredType.cpp b/c++/src/H5PredType.cpp index 3fe9a8a..0711020 100644 --- a/c++/src/H5PredType.cpp +++ b/c++/src/H5PredType.cpp @@ -19,15 +19,15 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" +#include "H5OcreatProp.h" +#include "H5DcreatProp.h" #include "H5Location.h" #include "H5Object.h" #include "H5DataType.h" #include "H5AtomType.h" #include "H5PredType.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif #ifndef DOXYGEN_SHOULD_SKIP_THIS //-------------------------------------------------------------------------- @@ -887,9 +887,7 @@ const PredType& PredType::NATIVE_UINT_FAST64 = *NATIVE_UINT_FAST64_; #endif // DOXYGEN_SHOULD_SKIP_THIS -#ifndef H5_NO_NAMESPACE } // end namespace -#endif /*************************************************************************** Design Note diff --git a/c++/src/H5PredType.h b/c++/src/H5PredType.h index f560765..750902e 100644 --- a/c++/src/H5PredType.h +++ b/c++/src/H5PredType.h @@ -17,9 +17,7 @@ #ifndef __H5PredType_H #define __H5PredType_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif /*! \class PredType \brief Class PredType holds the definition of all the HDF5 predefined @@ -27,6 +25,8 @@ namespace H5 { These types can only be made copy of, not created by H5Tcreate or closed by H5Tclose. They are treated as constants. + + Inheritance: AtomType -> DataType -> H5Object -> H5Location -> IdComponent */ class H5_DLLCPP PredType : public AtomType { public: @@ -439,7 +439,5 @@ class H5_DLLCPP PredType : public AtomType { #endif // DOXYGEN_SHOULD_SKIP_THIS }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5PredType_H diff --git a/c++/src/H5PropList.cpp b/c++/src/H5PropList.cpp index 6655900..b6f7c15 100644 --- a/c++/src/H5PropList.cpp +++ b/c++/src/H5PropList.cpp @@ -28,13 +28,9 @@ #include "H5private.h" // for HDfree -#ifndef H5_NO_NAMESPACE namespace H5 { -#ifndef H5_NO_STD using std::cerr; using std::endl; -#endif // H5_NO_STD -#endif #ifndef DOXYGEN_SHOULD_SKIP_THIS // This DOXYGEN_SHOULD_SKIP_THIS block is a work-around approach to control @@ -752,6 +748,4 @@ PropList::~PropList() } } -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5PropList.h b/c++/src/H5PropList.h index 7f6ee31..faaf68d 100644 --- a/c++/src/H5PropList.h +++ b/c++/src/H5PropList.h @@ -17,11 +17,15 @@ #ifndef __H5PropList_H #define __H5PropList_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif //! Class PropList provides operations for generic property lists. +/*! \class PropList + \brief Class PropList inherits from IdComponent and provides wrappers for + the HDF5 generic property list. + + Inheritance: IdComponent +*/ class H5_DLLCPP PropList : public IdComponent { public: ///\brief Default property list @@ -133,7 +137,5 @@ class H5_DLLCPP PropList : public IdComponent { #endif // DOXYGEN_SHOULD_SKIP_THIS }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5PropList_H diff --git a/c++/src/H5StrType.cpp b/c++/src/H5StrType.cpp index 8e1672b..962a5dc 100644 --- a/c++/src/H5StrType.cpp +++ b/c++/src/H5StrType.cpp @@ -19,22 +19,20 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5Location.h" -#include "H5Object.h" #include "H5OcreatProp.h" #include "H5DcreatProp.h" +#include "H5DxferProp.h" +#include "H5Location.h" +#include "H5Object.h" #include "H5DataType.h" #include "H5AtomType.h" #include "H5AbstractDs.h" -#include "H5DxferProp.h" #include "H5DataSpace.h" #include "H5StrType.h" #include "H5DataSet.h" #include "H5PredType.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif //-------------------------------------------------------------------------- // Function: StrType default constructor @@ -247,6 +245,4 @@ void StrType::setStrpad( H5T_str_t strpad ) const //-------------------------------------------------------------------------- StrType::~StrType() {} -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5StrType.h b/c++/src/H5StrType.h index 8b3a773..5d223b3 100644 --- a/c++/src/H5StrType.h +++ b/c++/src/H5StrType.h @@ -17,11 +17,14 @@ #ifndef __H5StrType_H #define __H5StrType_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif -//! Class StrType operates on HDF5 string datatypes. +/*! \class StrType + \brief StrType is a derivative of a DataType and operates on HDF5 + string datatype. + + Inheritance: AtomType -> DataType -> H5Object -> H5Location -> IdComponent +*/ class H5_DLLCPP StrType : public AtomType { public: // Creates a string type using a predefined type @@ -63,7 +66,5 @@ class H5_DLLCPP StrType : public AtomType { // Noop destructor. virtual ~StrType(); }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5StrType_H diff --git a/c++/src/H5VarLenType.cpp b/c++/src/H5VarLenType.cpp index 67334d3..fa3a18f 100644 --- a/c++/src/H5VarLenType.cpp +++ b/c++/src/H5VarLenType.cpp @@ -19,17 +19,14 @@ #include "H5Exception.h" #include "H5IdComponent.h" #include "H5PropList.h" -#include "H5Location.h" -#include "H5Object.h" #include "H5OcreatProp.h" #include "H5DcreatProp.h" +#include "H5Location.h" +#include "H5Object.h" #include "H5DataType.h" #include "H5VarLenType.h" -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif - //-------------------------------------------------------------------------- // Function: VarLenType default constructor @@ -81,6 +78,4 @@ VarLenType::VarLenType(const DataType* base_type) : DataType() //-------------------------------------------------------------------------- VarLenType::~VarLenType() {} -#ifndef H5_NO_NAMESPACE } // end namespace -#endif diff --git a/c++/src/H5VarLenType.h b/c++/src/H5VarLenType.h index 672b3db..d7141b0 100644 --- a/c++/src/H5VarLenType.h +++ b/c++/src/H5VarLenType.h @@ -17,11 +17,14 @@ #ifndef __H5VarLenType_H #define __H5VarLenType_H -#ifndef H5_NO_NAMESPACE namespace H5 { -#endif -//! VarLenType operates on the HDF5 C's Variable-length Datatypes. +/*! \class VarLenType + \brief VarLenType is a derivative of a DataType and operates on HDF5 + C's Variable-length Datatypes. + + Inheritance: DataType -> H5Object -> H5Location -> IdComponent +*/ class H5_DLLCPP VarLenType : public DataType { public: // Constructor that creates a variable-length datatype based @@ -43,7 +46,5 @@ class H5_DLLCPP VarLenType : public DataType { // Default constructor VarLenType(); }; -#ifndef H5_NO_NAMESPACE } -#endif #endif // __H5VarLenType_H diff --git a/c++/src/cpp_doc_config b/c++/src/cpp_doc_config index 623f9c7..5986eaa 100644 --- a/c++/src/cpp_doc_config +++ b/c++/src/cpp_doc_config @@ -38,7 +38,7 @@ PROJECT_NAME = "HDF5 C++ API" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "1.9.234 currently under development" +PROJECT_NUMBER = "1.9.236 currently under development" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a |