diff options
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 |