From 3ee36553b9aedb4e4d9cb31339e9c8a9f5ef3a92 Mon Sep 17 00:00:00 2001
From: Allen Byrne <byrn@hdfgroup.org>
Date: Fri, 14 Oct 2016 11:22:22 -0500
Subject: Add support for namespace and add tools to binaries config

---
 CMakeInstallation.cmake               |  4 +++-
 CMakeLists.txt                        |  2 ++
 c++/src/CMakeLists.txt                |  1 +
 config/cmake/hdf5-config.cmake.in     |  4 ++--
 fortran/src/CMakeLists.txt            |  1 +
 hl/c++/src/CMakeLists.txt             |  5 +++--
 hl/fortran/src/CMakeLists.txt         |  1 +
 hl/src/CMakeLists.txt                 |  1 +
 hl/tools/gif2h5/CMakeLists.txt        |  2 ++
 java/src/jni/CMakeLists.txt           |  1 +
 release_docs/RELEASE.txt              |  2 ++
 release_docs/USING_HDF5_CMake.txt     | 10 +++++++---
 src/CMakeLists.txt                    |  1 +
 tools/h5copy/CMakeLists.txt           |  1 +
 tools/h5diff/CMakeLists.txt           |  6 ++++--
 tools/h5dump/CMakeLists.txt           |  3 ++-
 tools/h5format_convert/CMakeLists.txt |  1 +
 tools/h5import/CMakeLists.txt         |  1 +
 tools/h5jam/CMakeLists.txt            |  6 +++++-
 tools/h5ls/CMakeLists.txt             |  1 +
 tools/h5repack/CMakeLists.txt         |  1 +
 tools/h5stat/CMakeLists.txt           |  3 ++-
 tools/lib/CMakeLists.txt              |  1 +
 tools/misc/CMakeLists.txt             |  3 +++
 24 files changed, 49 insertions(+), 13 deletions(-)

diff --git a/CMakeInstallation.cmake b/CMakeInstallation.cmake
index 045f875..65d2222 100644
--- a/CMakeInstallation.cmake
+++ b/CMakeInstallation.cmake
@@ -31,6 +31,7 @@ if (NOT HDF5_EXTERNALLY_CONFIGURED)
       EXPORT ${HDF5_EXPORTED_TARGETS}
       DESTINATION ${HDF5_INSTALL_CMAKE_DIR}
       FILE ${HDF5_PACKAGE}${HDF_PACKAGE_EXT}-targets.cmake
+      NAMESPACE ${HDF5_PACKAGE}::
       COMPONENT configinstall
   )
 endif (NOT HDF5_EXTERNALLY_CONFIGURED)
@@ -40,8 +41,9 @@ endif (NOT HDF5_EXTERNALLY_CONFIGURED)
 #-----------------------------------------------------------------------------
 if (NOT HDF5_EXTERNALLY_CONFIGURED)
   export (
-      TARGETS ${HDF5_LIBRARIES_TO_EXPORT} ${HDF5_LIB_DEPENDENCIES}
+      TARGETS ${HDF5_LIBRARIES_TO_EXPORT} ${HDF5_LIB_DEPENDENCIES} ${HDF5_UTILS_TO_EXPORT}
       FILE ${HDF5_PACKAGE}${HDF_PACKAGE_EXT}-targets.cmake
+      NAMESPACE ${HDF5_PACKAGE}::
   )
 endif (NOT HDF5_EXTERNALLY_CONFIGURED)
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9359084..ea09493 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -452,6 +452,8 @@ endif (NOT HDF5_EXPORTED_TARGETS)
 # which include hdf5 as a sub-project within their build tree
 #-----------------------------------------------------------------------------
 set_global_variable (HDF5_LIBRARIES_TO_EXPORT "")
+set_global_variable (HDF5_UTILS_TO_EXPORT "")
+
 set (EXTERNAL_HEADER_LIST "")
 set (EXTERNAL_LIBRARY_LIST "")
 set (EXTERNAL_LIBRARYDLL_LIST "")
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/config/cmake/hdf5-config.cmake.in b/config/cmake/hdf5-config.cmake.in
index 3f95d76..41fc726 100644
--- a/config/cmake/hdf5-config.cmake.in
+++ b/config/cmake/hdf5-config.cmake.in
@@ -157,12 +157,12 @@ foreach (libtype IN LISTS ${HDF5_PACKAGE_NAME}_LIB_TYPE)
         else ()
           set (${HDF5_PACKAGE_NAME}_${libtype}_${comp}_FOUND 1)
           string(TOUPPER ${HDF5_PACKAGE_NAME}_${comp}_${libtype}_LIBRARY COMP_LIBRARY)
-          set (${COMP_LIBRARY} ${${COMP_LIBRARY}} ${hdf5_comp2}-${libtype} ${hdf5_comp}-${libtype})
+          set (${COMP_LIBRARY} ${${COMP_LIBRARY}} @HDF5_PACKAGE@::${hdf5_comp2}-${libtype} @HDF5_PACKAGE@::${hdf5_comp}-${libtype})
         endif ()
       else ()
         set (${HDF5_PACKAGE_NAME}_${libtype}_${comp}_FOUND 1)
         string(TOUPPER ${HDF5_PACKAGE_NAME}_${comp}_${libtype}_LIBRARY COMP_LIBRARY)
-        set (${COMP_LIBRARY} ${${COMP_LIBRARY}} ${hdf5_comp}-${libtype})
+        set (${COMP_LIBRARY} ${${COMP_LIBRARY}} @HDF5_PACKAGE@::${hdf5_comp}-${libtype})
       endif ()
     endif ()
   endforeach ()
diff --git a/fortran/src/CMakeLists.txt b/fortran/src/CMakeLists.txt
index c3af6ea..00d0429 100644
--- a/fortran/src/CMakeLists.txt
+++ b/fortran/src/CMakeLists.txt
@@ -387,5 +387,6 @@ if (HDF5_EXPORTED_TARGETS)
       ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT fortlibraries
       RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT fortlibraries
       FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT fortlibraries
+      INCLUDES DESTINATION include
   )
 endif (HDF5_EXPORTED_TARGETS)
diff --git a/hl/c++/src/CMakeLists.txt b/hl/c++/src/CMakeLists.txt
index cec9406..f30e684 100644
--- a/hl/c++/src/CMakeLists.txt
+++ b/hl/c++/src/CMakeLists.txt
@@ -45,7 +45,7 @@ if (BUILD_SHARED_LIBS)
 endif (BUILD_SHARED_LIBS)
 
 #-----------------------------------------------------------------------------
-# Add file(s) to CMake Install 
+# Add file(s) to CMake Install
 #-----------------------------------------------------------------------------
 install (
     FILES
@@ -63,7 +63,7 @@ if (HDF5_EXPORTED_TARGETS)
   if (BUILD_SHARED_LIBS)
     INSTALL_TARGET_PDB (${HDF5_HL_CPP_LIBSH_TARGET} ${HDF5_INSTALL_BIN_DIR} hlcpplibraries)
   endif (BUILD_SHARED_LIBS)
-  
+
   install (
       TARGETS
           ${install_targets}
@@ -73,5 +73,6 @@ if (HDF5_EXPORTED_TARGETS)
       ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hlcpplibraries
       RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT hlcpplibraries
       FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT hlcpplibraries
+      INCLUDES DESTINATION include
   )
 endif (HDF5_EXPORTED_TARGETS)
diff --git a/hl/fortran/src/CMakeLists.txt b/hl/fortran/src/CMakeLists.txt
index 0b6327a..2eaac31 100644
--- a/hl/fortran/src/CMakeLists.txt
+++ b/hl/fortran/src/CMakeLists.txt
@@ -273,5 +273,6 @@ if (HDF5_EXPORTED_TARGETS)
       ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hlfortlibraries
       RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT hlfortlibraries
       FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT hlfortlibraries
+      INCLUDES DESTINATION include
   )
 endif (HDF5_EXPORTED_TARGETS)
diff --git a/hl/src/CMakeLists.txt b/hl/src/CMakeLists.txt
index a55a16b..0c71583 100644
--- a/hl/src/CMakeLists.txt
+++ b/hl/src/CMakeLists.txt
@@ -84,5 +84,6 @@ if (HDF5_EXPORTED_TARGETS)
       ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hllibraries
       RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT hllibraries
       FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT hllibraries
+      INCLUDES DESTINATION include
   )
 endif (HDF5_EXPORTED_TARGETS)
diff --git a/hl/tools/gif2h5/CMakeLists.txt b/hl/tools/gif2h5/CMakeLists.txt
index 3a55501..57daadb 100644
--- a/hl/tools/gif2h5/CMakeLists.txt
+++ b/hl/tools/gif2h5/CMakeLists.txt
@@ -22,6 +22,7 @@ TARGET_NAMING (gif2h5 STATIC)
 TARGET_C_PROPERTIES (gif2h5 STATIC " " " ")
 target_link_libraries (gif2h5 ${HDF5_HL_LIB_TARGET} ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET})
 set_target_properties (gif2h5 PROPERTIES FOLDER tools/hl)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};gif2h5")
 
 #-- Add h52gif program
 set (hdf2gif_SOURCES
@@ -33,6 +34,7 @@ TARGET_NAMING (h52gif STATIC)
 TARGET_C_PROPERTIES (h52gif STATIC " " " ")
 target_link_libraries (h52gif ${HDF5_HL_LIB_TARGET} ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET})
 set_target_properties (h52gif PROPERTIES FOLDER tools/hl)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h52gif")
 
 if (BUILD_TESTING)
   # --------------------------------------------------------------------
diff --git a/java/src/jni/CMakeLists.txt b/java/src/jni/CMakeLists.txt
index 2e4a821..9da31ee 100644
--- a/java/src/jni/CMakeLists.txt
+++ b/java/src/jni/CMakeLists.txt
@@ -84,5 +84,6 @@ if (HDF5_EXPORTED_TARGETS)
       ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries
       RUNTIME DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries
       FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT libraries
+      INCLUDES DESTINATION include
   )
 endif (HDF5_EXPORTED_TARGETS)
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 87eb732..179a5c7 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -41,6 +41,8 @@ New Features
 
     Configuration:
     -------------
+    - CMake
+      Added NAMESPACE hdf5:: to package configuration files
     - CMake: change CTEST_BUILD_CONFIGURATION to CTEST_CONFIGURATION_TYPE, which is
       recommended by CMake documentation.
       HDFFV-9971 (ADB 2016/8/22)
diff --git a/release_docs/USING_HDF5_CMake.txt b/release_docs/USING_HDF5_CMake.txt
index e89f1eb..313af83 100644
--- a/release_docs/USING_HDF5_CMake.txt
+++ b/release_docs/USING_HDF5_CMake.txt
@@ -183,15 +183,19 @@ source root. Include the following text in the file:
 cmake_minimum_required (VERSION 3.1.0)
 project (HDF5MyApp C CXX)
 
-find_package (HDF5 NAMES hdf5 COMPONENTS C static)
+set (LIB_TYPE STATIC) # or SHARED
+string(TOLOWER ${LIB_TYPE} SEARCH_TYPE)
+
+find_package (HDF5 NAMES hdf5 COMPONENTS C ${SEARCH_TYPE})
 # find_package (HDF5) # Find non-cmake built HDF5
 INCLUDE_DIRECTORIES (${HDF5_INCLUDE_DIR})
-set (LINK_LIBS ${LINK_LIBS} ${HDF5_C_STATIC_LIBRARY})
+set (LINK_LIBS ${LINK_LIBS} ${HDF5_C_${LIB_TYPE}_LIBRARY})
 
 set (example hdf_example)
 
 add_executable (${example} ${PROJECT_SOURCE_DIR}/${example}.c)
-TARGET_C_PROPERTIES (${example} " " " ")
+TARGET_NAMING (${example} ${LIB_TYPE})
+TARGET_C_PROPERTIES (${example} ${LIB_TYPE} " " " ")
 target_link_libraries (${example} ${LINK_LIBS})
 
 enable_testing ()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c0f934e..94b2d11 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -959,5 +959,6 @@ if (HDF5_EXPORTED_TARGETS)
       ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries
       RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT libraries
       FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT libraries
+      INCLUDES DESTINATION include
   )
 endif (HDF5_EXPORTED_TARGETS)
diff --git a/tools/h5copy/CMakeLists.txt b/tools/h5copy/CMakeLists.txt
index 219106f..0a5d01a 100644
--- a/tools/h5copy/CMakeLists.txt
+++ b/tools/h5copy/CMakeLists.txt
@@ -14,6 +14,7 @@ TARGET_NAMING (h5copy STATIC)
 TARGET_C_PROPERTIES (h5copy STATIC " " " ")
 target_link_libraries (h5copy  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (h5copy PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5copy")
 
 set (H5_DEP_EXECUTABLES h5copy)
 
diff --git a/tools/h5diff/CMakeLists.txt b/tools/h5diff/CMakeLists.txt
index 3902bd4..5da7bf5 100644
--- a/tools/h5diff/CMakeLists.txt
+++ b/tools/h5diff/CMakeLists.txt
@@ -17,6 +17,7 @@ TARGET_NAMING (h5diff STATIC)
 TARGET_C_PROPERTIES (h5diff STATIC " " " ")
 target_link_libraries (h5diff  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (h5diff PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5diff")
 
 set (H5_DEP_EXECUTABLES h5diff)
 
@@ -29,6 +30,7 @@ if (H5_HAVE_PARALLEL)
   TARGET_C_PROPERTIES (ph5diff STATIC " " " ")
   target_link_libraries (ph5diff  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
   set_target_properties (ph5diff PROPERTIES FOLDER tools)
+  set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};ph5diff")
 endif (H5_HAVE_PARALLEL)
 
 if (BUILD_TESTING)
@@ -41,12 +43,12 @@ if (BUILD_TESTING)
     TARGET_C_PROPERTIES (h5diffgentest STATIC " " " ")
     target_link_libraries (h5diffgentest ${HDF5_LIB_TARGET})
     set_target_properties (h5diffgentest PROPERTIES FOLDER generator/tools)
-    
+
     #add_test (NAME h5diffgentest COMMAND $<TARGET_FILE:h5diffgentest>)
   endif (HDF5_BUILD_GENERATORS)
 
   include (CMakeTests.cmake)
- 
+
 endif (BUILD_TESTING)
 
 ##############################################################################
diff --git a/tools/h5dump/CMakeLists.txt b/tools/h5dump/CMakeLists.txt
index 7b32e8b..49de08c 100644
--- a/tools/h5dump/CMakeLists.txt
+++ b/tools/h5dump/CMakeLists.txt
@@ -18,6 +18,7 @@ TARGET_NAMING (h5dump STATIC)
 TARGET_C_PROPERTIES (h5dump STATIC " " " ")
 target_link_libraries (h5dump  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (h5dump PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5dump")
 
 set (H5_DEP_EXECUTABLES h5dump)
 
@@ -31,7 +32,7 @@ if (BUILD_TESTING)
     TARGET_C_PROPERTIES (h5dumpgentest STATIC " " " ")
     target_link_libraries (h5dumpgentest ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET})
     set_target_properties (h5dumpgentest PROPERTIES FOLDER generator/tools)
-    
+
     #add_test (NAME h5dumpgentest COMMAND $<TARGET_FILE:h5dumpgentest>)
   endif (HDF5_BUILD_GENERATORS)
 
diff --git a/tools/h5format_convert/CMakeLists.txt b/tools/h5format_convert/CMakeLists.txt
index 4f6fdea..e5faf7c 100644
--- a/tools/h5format_convert/CMakeLists.txt
+++ b/tools/h5format_convert/CMakeLists.txt
@@ -14,6 +14,7 @@ TARGET_NAMING (h5format_convert STATIC)
 TARGET_C_PROPERTIES (h5format_convert STATIC " " " ")
 target_link_libraries (h5format_convert  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (h5format_convert PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5format_convert")
 
 set (H5_DEP_EXECUTABLES h5format_convert)
 
diff --git a/tools/h5import/CMakeLists.txt b/tools/h5import/CMakeLists.txt
index 7278bbe..c9c7db5 100644
--- a/tools/h5import/CMakeLists.txt
+++ b/tools/h5import/CMakeLists.txt
@@ -15,6 +15,7 @@ TARGET_C_PROPERTIES (h5import STATIC " " " ")
 target_link_libraries (h5import  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 #set_target_properties (h5import PROPERTIES COMPILE_DEFINITIONS H5DEBUGIMPORT)
 set_target_properties (h5import PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5import")
 
 set (H5_DEP_EXECUTABLES h5import)
 
diff --git a/tools/h5jam/CMakeLists.txt b/tools/h5jam/CMakeLists.txt
index 0a9aa6c..395ef0e 100644
--- a/tools/h5jam/CMakeLists.txt
+++ b/tools/h5jam/CMakeLists.txt
@@ -14,24 +14,28 @@ TARGET_NAMING (h5jam STATIC)
 TARGET_C_PROPERTIES (h5jam STATIC " " " ")
 target_link_libraries (h5jam  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (h5jam PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5jam")
 
 add_executable (getub ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/getub.c)
 TARGET_NAMING (getub STATIC)
 TARGET_C_PROPERTIES (getub STATIC " " " ")
 target_link_libraries (getub  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (getub PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5getub")
 
 add_executable (tellub ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/tellub.c)
 TARGET_NAMING (tellub STATIC)
 TARGET_C_PROPERTIES (tellub STATIC " " " ")
 target_link_libraries (tellub  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (tellub PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5tellub")
 
 add_executable (h5unjam ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/h5unjam.c)
 TARGET_NAMING (h5unjam STATIC)
 TARGET_C_PROPERTIES (h5unjam STATIC " " " ")
 target_link_libraries (h5unjam  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (h5unjam PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5unjam")
 
 set (H5_DEP_EXECUTABLES
     h5jam
@@ -50,7 +54,7 @@ if (BUILD_TESTING)
     TARGET_C_PROPERTIES (testhdf5 STATIC " " " ")
     target_link_libraries (h5jamgentest ${HDF5_LIB_TARGET})
     set_target_properties (h5jamgentest PROPERTIES FOLDER generator/tools)
-    
+
     #add_test (NAME h5jamgentest COMMAND $<TARGET_FILE:h5jamgentest>)
   endif (HDF5_BUILD_GENERATORS)
 
diff --git a/tools/h5ls/CMakeLists.txt b/tools/h5ls/CMakeLists.txt
index b6c0141..41ba23c 100644
--- a/tools/h5ls/CMakeLists.txt
+++ b/tools/h5ls/CMakeLists.txt
@@ -14,6 +14,7 @@ TARGET_NAMING (h5ls STATIC)
 TARGET_C_PROPERTIES (h5ls STATIC " " " ")
 target_link_libraries (h5ls  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (h5ls PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5lsy")
 
 set (H5_DEP_EXECUTABLES
     h5ls
diff --git a/tools/h5repack/CMakeLists.txt b/tools/h5repack/CMakeLists.txt
index dfe9271..85cd37c 100644
--- a/tools/h5repack/CMakeLists.txt
+++ b/tools/h5repack/CMakeLists.txt
@@ -25,6 +25,7 @@ TARGET_NAMING (h5repack STATIC)
 TARGET_C_PROPERTIES (h5repack STATIC " " " ")
 target_link_libraries (h5repack  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (h5repack PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5repack")
 
 set (H5_DEP_EXECUTABLES h5repack)
 
diff --git a/tools/h5stat/CMakeLists.txt b/tools/h5stat/CMakeLists.txt
index f537ce6..467fac2 100644
--- a/tools/h5stat/CMakeLists.txt
+++ b/tools/h5stat/CMakeLists.txt
@@ -14,6 +14,7 @@ TARGET_NAMING (h5stat STATIC)
 TARGET_C_PROPERTIES (h5stat STATIC " " " ")
 target_link_libraries (h5stat  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (h5stat PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5stat")
 
 set (H5_DEP_EXECUTABLES h5stat)
 
@@ -27,7 +28,7 @@ if (BUILD_TESTING)
     TARGET_C_PROPERTIES (h5stat_gentest STATIC " " " ")
     target_link_libraries (h5stat_gentest ${HDF5_LIB_TARGET})
     set_target_properties (h5stat_gentest PROPERTIES FOLDER generator/tools)
-    
+
     #add_test (NAME h5stat_gentest COMMAND $<TARGET_FILE:h5stat_gentest>)
   endif (HDF5_BUILD_GENERATORS)
 
diff --git a/tools/lib/CMakeLists.txt b/tools/lib/CMakeLists.txt
index 33c6b02..bfd1af2 100644
--- a/tools/lib/CMakeLists.txt
+++ b/tools/lib/CMakeLists.txt
@@ -100,5 +100,6 @@ if (HDF5_EXPORTED_TARGETS)
       ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT toolslibraries
       RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT toolslibraries
       FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT toolslibraries
+      INCLUDES DESTINATION include
   )
 endif (HDF5_EXPORTED_TARGETS)
diff --git a/tools/misc/CMakeLists.txt b/tools/misc/CMakeLists.txt
index 2e38fa3..daa8dda 100644
--- a/tools/misc/CMakeLists.txt
+++ b/tools/misc/CMakeLists.txt
@@ -15,18 +15,21 @@ TARGET_NAMING (h5debug STATIC)
 TARGET_C_PROPERTIES (h5debug STATIC " " " ")
 target_link_libraries (h5debug ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET})
 set_target_properties (h5debug PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5debug")
 
 add_executable (h5repart ${HDF5_TOOLS_MISC_SOURCE_DIR}/h5repart.c)
 TARGET_NAMING (h5repart STATIC)
 TARGET_C_PROPERTIES (h5repart STATIC " " " ")
 target_link_libraries (h5repart ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET})
 set_target_properties (h5repart PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5repart")
 
 add_executable (h5mkgrp ${HDF5_TOOLS_MISC_SOURCE_DIR}/h5mkgrp.c)
 TARGET_NAMING (h5mkgrp STATIC)
 TARGET_C_PROPERTIES (h5mkgrp STATIC " " " ")
 target_link_libraries (h5mkgrp  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (h5mkgrp PROPERTIES FOLDER tools)
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5mkgrp")
 
 set (H5_DEP_EXECUTABLES
     h5debug
-- 
cgit v0.12


From 4fc6f27a5ebb209753b5df9f15993f45e907daff Mon Sep 17 00:00:00 2001
From: Binh-Minh Ribler <bmribler@hdfgroup.org>
Date: Wed, 21 Sep 2016 14:53:17 -0500
Subject: Purpose: Fix bug HDFFR-9920 cont. Description:     Adding user's test
 revealed a flaw in the fix.     Moved CommonFG's functions in Group to
 H5Location, so that they     could be called by objects that can be used to
 specify a location     Also, rearranged many "#include" header files to
 resolve conflicts.

Platforms tested:
    Linux/32 2.6 (jam)
    Linux/64 (platypus)
    Darwin (osx1010test)
---
 c++/src/H5AbstractDs.cpp |    9 +-
 c++/src/H5ArrayType.cpp  |    4 +-
 c++/src/H5AtomType.cpp   |    4 +-
 c++/src/H5Attribute.cpp  |    6 +-
 c++/src/H5CommonFG.cpp   |    5 +-
 c++/src/H5CompType.cpp   |    6 +-
 c++/src/H5Cpp.h          |   12 +-
 c++/src/H5DataSet.cpp    |    9 +-
 c++/src/H5DataType.cpp   |    6 +-
 c++/src/H5DcreatProp.cpp |    2 +-
 c++/src/H5DcreatProp.h   |    2 +
 c++/src/H5EnumType.cpp   |    8 +-
 c++/src/H5File.cpp       |   14 +-
 c++/src/H5FloatType.cpp  |    6 +-
 c++/src/H5Group.cpp      | 1282 +-------------------------------------------
 c++/src/H5Group.h        |  120 -----
 c++/src/H5IntType.cpp    |    6 +-
 c++/src/H5Library.cpp    |    4 +-
 c++/src/H5Location.cpp   | 1337 ++++++++++++++++++++++++++++++++++++++++++++--
 c++/src/H5Location.h     |  134 ++++-
 c++/src/H5Object.cpp     |    8 +-
 c++/src/H5Object.h       |    2 +
 c++/src/H5OcreatProp.cpp |    2 +-
 c++/src/H5PredType.cpp   |    2 +
 c++/src/H5StrType.cpp    |    6 +-
 c++/src/H5VarLenType.cpp |    4 +-
 c++/test/Makefile.am     |    2 +-
 c++/test/h5cpputil.cpp   |   26 +
 c++/test/h5cpputil.h     |    8 +-
 c++/test/testhdf5.cpp    |    2 +
 c++/test/titerate.cpp    |  541 +++++++++++++++++++
 31 files changed, 2090 insertions(+), 1489 deletions(-)
 create mode 100644 c++/test/titerate.cpp

diff --git a/c++/src/H5AbstractDs.cpp b/c++/src/H5AbstractDs.cpp
index f0579fc..ac10bf8 100644
--- a/c++/src/H5AbstractDs.cpp
+++ b/c++/src/H5AbstractDs.cpp
@@ -19,12 +19,15 @@
 #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
diff --git a/c++/src/H5ArrayType.cpp b/c++/src/H5ArrayType.cpp
index d7d1a35..9646a6f 100644
--- a/c++/src/H5ArrayType.cpp
+++ b/c++/src/H5ArrayType.cpp
@@ -19,10 +19,10 @@
 #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"
 
diff --git a/c++/src/H5AtomType.cpp b/c++/src/H5AtomType.cpp
index 6308821..7871455 100644
--- a/c++/src/H5AtomType.cpp
+++ b/c++/src/H5AtomType.cpp
@@ -19,10 +19,10 @@
 #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"
 
diff --git a/c++/src/H5Attribute.cpp b/c++/src/H5Attribute.cpp
index 5454583..0a8ec52 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"
diff --git a/c++/src/H5CommonFG.cpp b/c++/src/H5CommonFG.cpp
index 0c18293..f79a048 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"
@@ -73,4 +73,3 @@ CommonFG::~CommonFG() {}
 #ifndef H5_NO_NAMESPACE
 }
 #endif
-
diff --git a/c++/src/H5CompType.cpp b/c++/src/H5CompType.cpp
index 6105273..b7c5687 100644
--- a/c++/src/H5CompType.cpp
+++ b/c++/src/H5CompType.cpp
@@ -19,13 +19,13 @@
 #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"
diff --git a/c++/src/H5Cpp.h b/c++/src/H5Cpp.h
index 4e82ee3..56b2f7f 100644
--- a/c++/src/H5Cpp.h
+++ b/c++/src/H5Cpp.h
@@ -22,17 +22,17 @@
 #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 "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..e4d6665 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"
diff --git a/c++/src/H5DataType.cpp b/c++/src/H5DataType.cpp
index b784dd4..a36dc60 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"
diff --git a/c++/src/H5DcreatProp.cpp b/c++/src/H5DcreatProp.cpp
index 06b5024..d540c72 100644
--- a/c++/src/H5DcreatProp.cpp
+++ b/c++/src/H5DcreatProp.cpp
@@ -20,9 +20,9 @@
 #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
diff --git a/c++/src/H5DcreatProp.h b/c++/src/H5DcreatProp.h
index fed41b4..fa7b1c1 100644
--- a/c++/src/H5DcreatProp.h
+++ b/c++/src/H5DcreatProp.h
@@ -24,6 +24,8 @@
 namespace H5 {
 #endif
 
+class DataType;
+
 /*! \class DSetCreatPropList
     \brief Class DSetCreatPropList represents the dataset creation property
     list.
diff --git a/c++/src/H5EnumType.cpp b/c++/src/H5EnumType.cpp
index f0a2138..32cb1ac 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"
diff --git a/c++/src/H5File.cpp b/c++/src/H5File.cpp
index a81efd8..246da9f 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"
@@ -563,6 +563,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 +626,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
diff --git a/c++/src/H5FloatType.cpp b/c++/src/H5FloatType.cpp
index ed17aeb..c019ae4 100644
--- a/c++/src/H5FloatType.cpp
+++ b/c++/src/H5FloatType.cpp
@@ -19,13 +19,13 @@
 #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"
diff --git a/c++/src/H5Group.cpp b/c++/src/H5Group.cpp
index d93d3a1..0e19e6f 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"
@@ -68,9 +68,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 +198,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 +231,6 @@ 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..f1dfce1 100644
--- a/c++/src/H5Group.h
+++ b/c++/src/H5Group.h
@@ -47,126 +47,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();
 
diff --git a/c++/src/H5IntType.cpp b/c++/src/H5IntType.cpp
index 780e44d..f934d26 100644
--- a/c++/src/H5IntType.cpp
+++ b/c++/src/H5IntType.cpp
@@ -19,13 +19,13 @@
 #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"
diff --git a/c++/src/H5Library.cpp b/c++/src/H5Library.cpp
index 30f68e2..09e0f7e 100644
--- a/c++/src/H5Library.cpp
+++ b/c++/src/H5Library.cpp
@@ -25,10 +25,10 @@
 #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"
@@ -82,7 +82,7 @@ void H5Library::close()
 //--------------------------------------------------------------------------
 void H5Library::dontAtExit()
 {
-   herr_t ret_value = H5dont_atexit();
+   (void)H5dont_atexit();
 }
 
 //--------------------------------------------------------------------------
diff --git a/c++/src/H5Location.cpp b/c++/src/H5Location.cpp
index 4048d94..334389e 100644
--- a/c++/src/H5Location.cpp
+++ b/c++/src/H5Location.cpp
@@ -19,20 +19,20 @@
 #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
@@ -658,43 +658,1318 @@ 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:	f_Attribute_setId - friend
-// Purpose:	This function is friend to class H5::Attribute so that it
-//		can set Attribute::id in order to work around a problem
-//		described in the JIRA issue HDFFV-7947.
-//		Applications shouldn't need to use it.
-// param	attr   - IN/OUT: Attribute object to be changed
-// param	new_id - IN: New id to set
-// Programmer	Binh-Minh Ribler - 2015
+// 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
 //--------------------------------------------------------------------------
-void f_Attribute_setId(Attribute* attr, hid_t new_id)
+Group H5Location::createGroup( const H5std_string& name, size_t size_hint ) const
 {
-    attr->p_setId(new_id);
+   return( createGroup( name.c_str(), size_hint ));
 }
 
 //--------------------------------------------------------------------------
-// Function:	f_DataSpace_setId - friend
-// Purpose:	This function is friend to class H5::DataSpace so that it can
-//		can set DataSpace::id in order to work around a problem
-//		described in the JIRA issue HDFFV-7947.
-//		Applications shouldn't need to use it.
-// param	dspace   - IN/OUT: DataSpace object to be changed
-// param	new_id - IN: New id to set
-// Programmer	Binh-Minh Ribler - 2015
+// 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
 //--------------------------------------------------------------------------
-void f_DataSpace_setId(DataSpace* dspace, hid_t new_id)
+Group H5Location::openGroup( const char* name ) const
 {
-    dspace->p_setId(new_id);
+   // 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);
+}
+
+//--------------------------------------------------------------------------
+// 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);
+}
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+//--------------------------------------------------------------------------
+// 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
+// Purpose:	This function is friend to class H5::Attribute so that it
+//		can set Attribute::id in order to work around a problem
+//		described in the JIRA issue HDFFV-7947.
+//		Applications shouldn't need to use it.
+// param	attr   - IN/OUT: Attribute object to be changed
+// param	new_id - IN: New id to set
+// Programmer	Binh-Minh Ribler - 2015
+//--------------------------------------------------------------------------
+void f_Attribute_setId(Attribute* attr, hid_t new_id)
+{
+    attr->p_setId(new_id);
+}
+
+//--------------------------------------------------------------------------
+// Function:	f_DataSpace_setId - friend
+// Purpose:	This function is friend to class H5::DataSpace so that it can
+//		can set DataSpace::id in order to work around a problem
+//		described in the JIRA issue HDFFV-7947.
+//		Applications shouldn't need to use it.
+// param	dspace   - IN/OUT: DataSpace object to be changed
+// param	new_id - IN: New id to set
+// Programmer	Binh-Minh Ribler - 2015
+//--------------------------------------------------------------------------
+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
diff --git a/c++/src/H5Location.h b/c++/src/H5Location.h
index 9000c5c..4f7a717 100644
--- a/c++/src/H5Location.h
+++ b/c++/src/H5Location.h
@@ -39,6 +39,10 @@ namespace H5 {
 };
  */ 
 
+// Class forwarding
+class H5_DLLCPP ArrayType;
+class H5_DLLCPP VarLenType;
+
 /*! \class H5Location
     \brief H5Location is an abstract base class, added in version 1.8.12.
 
@@ -100,15 +104,137 @@ 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
+
+	///\brief Returns an identifier.
+	//virtual hid_t getId() const;
+
+	/// 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.
diff --git a/c++/src/H5Object.cpp b/c++/src/H5Object.cpp
index 0cb392d..6b5edcf 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"
diff --git a/c++/src/H5Object.h b/c++/src/H5Object.h
index c39de3a..372faed 100644
--- a/c++/src/H5Object.h
+++ b/c++/src/H5Object.h
@@ -38,7 +38,9 @@
 namespace H5 {
 #endif
 
+// 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*/,
diff --git a/c++/src/H5OcreatProp.cpp b/c++/src/H5OcreatProp.cpp
index 635ffe9..54ce2ff 100644
--- a/c++/src/H5OcreatProp.cpp
+++ b/c++/src/H5OcreatProp.cpp
@@ -19,8 +19,8 @@
 #include "H5Exception.h"
 #include "H5IdComponent.h"
 #include "H5PropList.h"
-#include "H5FaccProp.h"
 #include "H5OcreatProp.h"
+#include "H5FaccProp.h"
 
 #ifndef H5_NO_NAMESPACE
 namespace H5 {
diff --git a/c++/src/H5PredType.cpp b/c++/src/H5PredType.cpp
index 3fe9a8a..211702d 100644
--- a/c++/src/H5PredType.cpp
+++ b/c++/src/H5PredType.cpp
@@ -19,6 +19,8 @@
 #include "H5Exception.h"
 #include "H5IdComponent.h"
 #include "H5PropList.h"
+#include "H5OcreatProp.h"
+#include "H5DcreatProp.h"
 #include "H5Location.h"
 #include "H5Object.h"
 #include "H5DataType.h"
diff --git a/c++/src/H5StrType.cpp b/c++/src/H5StrType.cpp
index 8e1672b..db46596 100644
--- a/c++/src/H5StrType.cpp
+++ b/c++/src/H5StrType.cpp
@@ -19,14 +19,14 @@
 #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"
diff --git a/c++/src/H5VarLenType.cpp b/c++/src/H5VarLenType.cpp
index 67334d3..c9f320a 100644
--- a/c++/src/H5VarLenType.cpp
+++ b/c++/src/H5VarLenType.cpp
@@ -19,10 +19,10 @@
 #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"
 
diff --git a/c++/test/Makefile.am b/c++/test/Makefile.am
index 07fe533..da0a864 100644
--- a/c++/test/Makefile.am
+++ b/c++/test/Makefile.am
@@ -34,7 +34,7 @@ LDADD=$(LIBH5TEST) $(LIBH5CPP) $(LIBHDF5)
 testhdf5_SOURCES=testhdf5.cpp dsets.cpp tattr.cpp tarray.cpp	\
 	tcompound.cpp tdspl.cpp tfile.cpp tfilter.cpp th5s.cpp	\
 	tlinks.cpp tobject.cpp trefer.cpp ttypes.cpp tvlstr.cpp	\
-	h5cpputil.cpp
+	titerate.cpp h5cpputil.cpp
 
 # Tell conclude.am that these are C++ tests.
 CXX_API=yes
diff --git a/c++/test/h5cpputil.cpp b/c++/test/h5cpputil.cpp
index 05a4d9a..3bc38b5 100644
--- a/c++/test/h5cpputil.cpp
+++ b/c++/test/h5cpputil.cpp
@@ -164,6 +164,32 @@ int check_values (hsize_t i, hsize_t j, int apoint, int acheck)
 } // check_values
 
 /*-------------------------------------------------------------------------
+ * Function:	check_values
+ *
+ * Purpose:	Checks a char string pointer for NULL.  If it is NULL,
+ *		the function will print out a message
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Binh-Minh Ribler (using C code segment for checking values)
+ *		Friday, September 16, 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+void check_values(const char *value, const char* msg, int line, const char* file_name)
+{
+    if (value == NULL)
+    {
+	cerr << endl;
+        cerr << "*** ERROR: " << msg << ", at line " << line << endl;
+	IncTestNumErrs();
+	throw TestFailedException(file_name, msg);
+    }
+}
+
+/*-------------------------------------------------------------------------
  * Function:	verify_val (const char*, const char*,...)
  *
  * Purpose:	Compares two character strings.  If they are
diff --git a/c++/test/h5cpputil.h b/c++/test/h5cpputil.h
index 50cde99..0a3221d 100644
--- a/c++/test/h5cpputil.h
+++ b/c++/test/h5cpputil.h
@@ -39,6 +39,7 @@ using std::endl;
 #define SUBTEST(TEST) {printf("   Subtest: %-52s",TEST); fflush(stdout);}
 
 int check_values (hsize_t i, hsize_t j, int apoint, int acheck);
+void check_values(const char *value, const char* msg, int line, const char* file_name);
 int test_report (int, const H5std_string&);
 void issue_fail_msg(const char* where, int line, const char* file_name,
 		    const char* message="");
@@ -60,6 +61,8 @@ class TestFailedException : public Exception {
 };
 
 // Overloaded/Template functions to verify values and display proper info
+
+// Verifies 
 void verify_val(const char* x, const char* value, const char* where, int line, const char* file_name);
 
 template <class Type1, class Type2>
@@ -153,6 +156,7 @@ void test_file();
 void test_filters();
 void test_links();
 void test_h5s();
+void test_iterate();
 void test_object();
 void test_reference();
 void test_types();
@@ -167,8 +171,9 @@ void cleanup_dsproplist();
 void cleanup_dsets();
 void cleanup_file();
 void cleanup_filters();
-void cleanup_links();
 void cleanup_h5s();
+void cleanup_iterate();
+void cleanup_links();
 void cleanup_object();
 void cleanup_reference();
 void cleanup_types();
@@ -182,7 +187,6 @@ void cleanup_vlstrings();
 void cleanup_select(void);
 void cleanup_time(void);
 void cleanup_vltypes(void);
-void cleanup_iterate(void);
 void cleanup_array(void);
 void cleanup_genprop(void);
 void cleanup_misc(void);
diff --git a/c++/test/testhdf5.cpp b/c++/test/testhdf5.cpp
index b17d942..4fe4b58 100644
--- a/c++/test/testhdf5.cpp
+++ b/c++/test/testhdf5.cpp
@@ -100,7 +100,9 @@ main(int argc, char *argv[])
 	AddTest("select", test_select, cleanup_select,  "Selections", NULL);
 	AddTest("time", test_time, cleanup_time,  "Time Datatypes", NULL);
 	AddTest("vltypes", test_vltypes, cleanup_vltypes,  "Variable-Length Datatypes", NULL);
+*/
 	AddTest("iterate", test_iterate, cleanup_iterate,  "Group & Attribute Iteration", NULL);
+/*
 	AddTest("genprop", test_genprop, cleanup_genprop,  "Generic Properties", NULL);
 	AddTest("id", test_ids, NULL,  "User-Created Identifiers", NULL);
 
diff --git a/c++/test/titerate.cpp b/c++/test/titerate.cpp
new file mode 100644
index 0000000..e4aee97
--- /dev/null
+++ b/c++/test/titerate.cpp
@@ -0,0 +1,541 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*****************************************************************************
+   FILE
+   titerate.cpp - HDF5 C++ testing iterate related functionality
+
+ ***************************************************************************/
+
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+#include <string>
+
+#ifndef H5_NO_NAMESPACE
+#ifndef H5_NO_STD
+    using std::cerr;
+    using std::endl;
+#endif  // H5_NO_STD
+#endif
+
+#include "H5Cpp.h"      // C++ API header file
+
+#ifndef H5_NO_NAMESPACE
+    using namespace H5;
+#endif
+
+#include "h5cpputil.h"  // C++ utilility header file
+
+/* Number of datasets for group iteration test */
+#define NDATASETS 50
+
+/* Number of attributes for attribute iteration test */
+//#define NATTR 50
+
+/* Number of groups for second group iteration test */
+//#define ITER_NGROUPS 150
+
+/* General maximum length of names used */
+#define NAMELEN     80
+
+/* 1-D dataset with fixed dimensions */
+//#define SPACE1_RANK     1
+//#define SPACE1_DIM1     4
+
+const H5std_string	FILE_ITERATE("titerate.h5");
+const H5std_string	GROUP1("Top Group");
+const H5std_string	GROUP1_PATH("/Top Group");
+const H5std_string	GROUP1_1("Sub-Group 1.1");
+const H5std_string	GROUP1_1_PATH("/Top Group/Sub-Group 1.1");
+const H5std_string	GROUP1_2("Sub-Group 1.2");
+const H5std_string	GROUP1_2_PATH("/Top Group/Sub-Group 1.2");
+const H5std_string	DSET_DEFAULT_NAME("default");
+const H5std_string	DSET_IN_FILE("Dataset in File");
+const H5std_string	DSET_IN_FILE_PATH("/Dataset in File");
+const H5std_string	DSET_IN_GRP1("Dataset in Group 1");
+const H5std_string	DSET_IN_GRP1_PATH("/Top Group/Dataset in Group 1");
+const H5std_string	DSET_IN_GRP1_2("Dataset in Group 1.2");
+const H5std_string	DSET_IN_GRP1_2_PATH("/Top Group/Sub-Group 1.2/Dataset in Group 1.2");
+
+typedef enum {
+    RET_ZERO,
+    RET_TWO,
+    RET_CHANGE,
+    RET_CHANGE2
+} iter_enum;
+
+/* Custom group iteration callback data */
+typedef struct {
+    char name[NAMELEN];     /* The name of the object */
+    H5O_type_t type;        /* The type of the object */
+    iter_enum command;      /* The type of return value */
+} iter_info;
+
+int iter_strcmp(const void *s1, const void *s2);
+
+/****************************************************************
+**
+**  iter_strcmp(): String comparison routine for qsort
+**
+****************************************************************/
+int iter_strcmp(const void *s1, const void *s2)
+{
+    return(HDstrcmp(*(const char * const *)s1,*(const char * const *)s2));
+}
+
+/****************************************************************
+**
+**  liter_cb(): Custom link iteration callback routine.
+**
+****************************************************************/
+static herr_t
+liter_cb(hid_t H5_ATTR_UNUSED group, const char *name, const H5L_info_t H5_ATTR_UNUSED *link_info,
+    void *op_data)
+{
+    iter_info *info = (iter_info *)op_data;
+    static int count = 0;
+    static int count2 = 0;
+
+    HDstrcpy(info->name, name);
+
+    switch(info->command) {
+        case RET_ZERO:
+            return(0);
+
+        case RET_TWO:
+            return(2);
+
+        case RET_CHANGE:
+            count++;
+            return(count > 10 ? 1 : 0);
+
+        case RET_CHANGE2:
+            count2++;
+            return(count2 > 10 ? 1 : 0);
+
+        default:
+            printf("invalid iteration command");
+            return(-1);
+    } /* end switch */
+} /* end liter_cb() */
+
+/*-------------------------------------------------------------------------
+ * Function:	test_iter_group
+ *
+ * Purpose:	Tests group iteration
+ *
+ * Return:	Success: 0
+ *		Failure: -1
+ *
+ * Programmer:	Binh-Minh Ribler
+ *		Friday, September 9, 2016
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void test_iter_group(FileAccPropList& fapl)
+{
+    int i;                  /* counting variable */
+    hsize_t idx;            /* Index in the group */
+    char name[NAMELEN];     /* temporary name buffer */
+    char *lnames[NDATASETS + 2];/* Names of the links created */
+    iter_info info;         /* Custom iteration information */
+    herr_t ret;		    /* Generic return value */
+
+    /* Output message about test being performed */
+    SUBTEST("Group Iteration");
+
+    /* Create the test file with the datasets */
+    try {
+	// Create file
+	H5File file(FILE_ITERATE, H5F_ACC_TRUNC, FileCreatPropList::DEFAULT, fapl);
+
+	/* Test iterating over empty group */
+	info.command = RET_ZERO;
+	idx = 0;
+	ret = H5Literate(file.getId(), H5_INDEX_NAME, H5_ITER_INC, &idx, liter_cb, &info);
+	verify_val(ret, SUCCEED, "H5Literate", __LINE__, __FILE__);
+
+	DataType datatype(PredType::NATIVE_INT);
+
+	// Create a scalar file space
+	DataSpace filespace;
+
+	for (i=0; i< NDATASETS; i++)
+	{
+        sprintf(name, "Dataset %d", i);
+
+	// Create a dataset in the file
+	DataSet dataset = file.createDataSet(name, datatype, filespace);
+
+        /* Keep a copy of the dataset names */
+        lnames[i] = HDstrdup(name);
+        check_values(lnames[i], "HDstrdup returns NULL", __LINE__, __FILE__);
+
+	} /* end for */
+
+	/* Create a group and named datatype under root group for testing */
+	Group grp(file.createGroup(GROUP1, 0));
+	lnames[NDATASETS] = HDstrdup("grp");
+	check_values(lnames[NDATASETS], "HDstrdup returns NULL", __LINE__, __FILE__);
+
+	datatype.commit(file, "dtype");
+	lnames[NDATASETS + 1] = HDstrdup("dtype");
+	check_values(lnames[NDATASETS], "HDstrdup returns NULL", __LINE__, __FILE__);
+
+	/* Sort the dataset names */
+	HDqsort(lnames, (size_t)(NDATASETS + 2), sizeof(char *), iter_strcmp);
+
+
+	/* Iterate through the datasets in the root group in various ways */
+
+	// Open data file to read
+	file.openFile(FILE_ITERATE, H5F_ACC_RDONLY, fapl);
+
+	// Open the root group
+	Group root_group(file.openGroup("/"));
+
+	// Get the number of object in the root group
+	hsize_t nobjs = root_group.getNumObjs();
+	verify_val(nobjs, (hsize_t)(NDATASETS + 2), "H5Gget_info", __LINE__, __FILE__);
+
+	H5std_string obj_name;
+	for (i = 0; i < nobjs; i++)
+	{
+	    //H5O_info_t oinfo;               /* Object info */
+
+	    obj_name = root_group.getObjnameByIdx(i);
+        //ret = (herr_t)H5Lget_name_by_idx(root_group, ".", H5_INDEX_NAME, H5_ITER_INC, (hsize_t)i, dataset_name, (size_t)NAMELEN, H5P_DEFAULT);
+
+	//oinfo = root_group.childObjType((hsize_t)i, H5_INDEX_NAME, H5_ITER_INC,  ".");
+        //ret = H5Oget_info_by_idx(root_group, ".", H5_INDEX_NAME, H5_ITER_INC, (hsize_t)i, &oinfo, H5P_DEFAULT);
+	} /* end for */
+
+	// Attempted to iterate with invalid index, should fail
+	try {
+	    obj_name = root_group.getObjnameByIdx(NDATASETS + 3);
+
+	    // Should FAIL but didn't, so throw an invalid action exception
+	    throw InvalidActionException("Group::getObjnameByIdx", "Attempt to iterate with invalid index");
+	}
+	catch (GroupIException& invalid_action) // invalid index
+	{} // do nothing, exception expected
+
+	// Attempted to iterate with negative index, should fail
+	try {
+	    info.command = RET_ZERO;
+	    idx = (hsize_t)-1;
+	    obj_name = root_group.getObjnameByIdx(idx);
+
+	    // Should FAIL but didn't, so throw an invalid action exception
+	    throw InvalidActionException("Group::getObjnameByIdx", "Attempt to iterate with negative index");
+	}
+	catch (FileIException& invalid_action) // invalid index
+	{} // do nothing, exception expected
+	catch (GroupIException& invalid_action) // invalid index
+	{} // do nothing, exception expected
+
+	/* Test skipping exactly as many entries as in the group */
+	try {
+	    info.command = RET_ZERO;
+	    idx = NDATASETS + 2;
+	    obj_name = root_group.getObjnameByIdx(idx);
+
+	    // Should FAIL but didn't, so throw an invalid action exception
+	    throw InvalidActionException("Group::getObjnameByIdx", "Attempt to iterate with negative index");
+	}
+	catch (FileIException& invalid_action) // invalid index
+	{} // do nothing, exception expected
+	catch (GroupIException& invalid_action) // invalid index
+	{} // do nothing, exception expected
+
+	/* Test skipping more entries than are in the group */
+	try {
+	    info.command = RET_ZERO;
+	    idx = NDATASETS + 3;
+	    obj_name = root_group.getObjnameByIdx(idx);
+
+	    // Should FAIL but didn't, so throw an invalid action exception
+	    throw InvalidActionException("Group::getObjnameByIdx", "Attempt to iterate with negative index");
+	}
+	catch (FileIException& invalid_action) // invalid index
+	{} // do nothing, exception expected
+	catch (GroupIException& invalid_action) // invalid index
+	{} // do nothing, exception expected
+
+	/* Free the dataset names */
+	for(i = 0; i< (NDATASETS + 2); i++)
+	    HDfree(lnames[i]);
+
+	// Everything will be closed as they go out of scope
+
+	PASSED();
+    }	// try block
+
+    // catch all other exceptions
+    catch (Exception& E)
+    {
+	issue_fail_msg("test_iter_group", __LINE__, __FILE__);
+    }
+
+#if 0
+    /* Test all objects in group, when callback always returns 0 */
+    info.command = RET_ZERO;
+    idx = 0;
+    if((ret = H5Literate(file, H5_INDEX_NAME, H5_ITER_INC, &idx, liter_cb, &info)) > 0)
+        TestErrPrintf("Group iteration function didn't return zero correctly!\n");
+
+    /* Test all objects in group, when callback always returns 1 */
+    /* This also tests the "restarting" ability, because the index changes */
+    info.command = RET_TWO;
+    i = 0;
+    idx = 0;
+    while((ret = H5Literate(file, H5_INDEX_NAME, H5_ITER_INC, &idx, liter_cb, &info)) > 0) {
+        /* Verify return value from iterator gets propagated correctly */
+        verify_val(ret, 2, "H5Literate", __LINE__, __FILE__);
+
+        /* Increment the number of times "2" is returned */
+        i++;
+
+        /* Verify that the index is the correct value */
+        verify_val(idx, (hsize_t)i, "H5Literate", __LINE__, __FILE__);
+        if(idx > (NDATASETS + 2))
+            TestErrPrintf("Group iteration function walked too far!\n");
+
+        /* Verify that the correct name is retrieved */
+        if(HDstrcmp(info.name, lnames[(size_t)(idx - 1)]) != 0)
+            TestErrPrintf("Group iteration function didn't return name correctly for link - lnames[%u] = '%s'!\n", (unsigned)(idx - 1), lnames[(size_t)(idx - 1)]);
+    } /* end while */
+    verify_val(ret, -1, "H5Literate", __LINE__, __FILE__);
+
+    if(i != (NDATASETS + 2))
+        TestErrPrintf("%u: Group iteration function didn't perform multiple iterations correctly!\n", __LINE__);
+
+    /* Test all objects in group, when callback changes return value */
+    /* This also tests the "restarting" ability, because the index changes */
+    info.command = new_format ? RET_CHANGE2 : RET_CHANGE;
+    i = 0;
+    idx = 0;
+    while((ret = H5Literate(file, H5_INDEX_NAME, H5_ITER_INC, &idx, liter_cb, &info)) >= 0) {
+        /* Verify return value from iterator gets propagated correctly */
+        verify_val(ret, 1, "H5Literate", __LINE__, __FILE__);
+
+        /* Increment the number of times "1" is returned */
+        i++;
+
+        /* Verify that the index is the correct value */
+        verify_val(idx, (hsize_t)(i + 10), "H5Literate", __LINE__, __FILE__);
+        if(idx > (NDATASETS + 2))
+            TestErrPrintf("Group iteration function walked too far!\n");
+
+        /* Verify that the correct name is retrieved */
+        if(HDstrcmp(info.name, lnames[(size_t)(idx - 1)]) != 0)
+            TestErrPrintf("Group iteration function didn't return name correctly for link - lnames[%u] = '%s'!\n", (unsigned)(idx - 1), lnames[(size_t)(idx - 1)]);
+    } /* end while */
+    verify_val(ret, -1, "H5Literate", __LINE__, __FILE__);
+
+    if(i != 42 || idx != 52)
+        TestErrPrintf("%u: Group iteration function didn't perform multiple iterations correctly!\n", __LINE__);
+
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+#endif
+} /* test_iter_group() */
+
+
+/****************************************************************
+**
+**  printelems(): Open an attribute and verify that it has a 
+**		  the correct name
+**
+****************************************************************/
+const H5std_string	FILE_NAME("titerate.h5");
+const H5std_string	GRP_NAME("/Group_A");
+const H5std_string	FDATASET_NAME( "file dset" );
+const H5std_string	GDATASET_NAME( "group dset" );
+const H5std_string	ATTR_NAME( "Units" );
+const H5std_string	FATTR_NAME( "F attr" );
+const H5std_string	GATTR_NAME( "G attr" );
+const int	DIM1 = 2;
+void printelems(const Group& group, const H5std_string& dsname, const H5std_string& atname)
+{
+    try
+    {
+	DataSet d1(group.openDataSet(dsname));
+	DataSpace s1 = d1.getSpace();
+	s1.close();
+	d1.close();
+
+	unsigned idx = 0;
+	Attribute a1(group.openAttribute(idx));
+	H5std_string aname = a1.getName();
+        verify_val(aname, atname, "printelems", __LINE__, __FILE__);
+
+	a1.close();
+  }
+   // catch failure caused by the DataSpace operations
+   catch( DataSpaceIException error )
+   {
+	error.printError();
+   }
+
+   // catch failure caused by the Group operations
+   catch( GroupIException error )
+   {
+	error.printError();
+   }
+
+   // catch failure caused by the DataSet operations
+   catch( DataSetIException error )
+   {
+	error.printError();
+   }
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	test_HDFFV_9920
+ *
+ * Purpose:	Tests the fix for HDFFV-9920
+ *
+ * Programmer:	Binh-Minh Ribler
+ *		Friday, September 9, 2016
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void test_HDFFV_9920()
+{
+   int attr_data[2] = { 100, 200};
+   hsize_t dims[1] = { DIM1 };
+   
+   try
+   {
+	// Create a new file and a group in it
+	H5File file( FILE_NAME, H5F_ACC_TRUNC );
+
+	Group gr1(file.createGroup(GRP_NAME));
+
+	// Create the data space for the attribute.
+	DataSpace dspace = DataSpace (1, dims );
+
+	DataSet fds = file.createDataSet(FDATASET_NAME, PredType::STD_I32BE, dspace);
+	DataSet gds = gr1.createDataSet(GDATASET_NAME, PredType::STD_I32BE, dspace);
+
+	// Create a file attribute and a group attribute. 
+	Attribute fa1 = file.createAttribute(FATTR_NAME, PredType::STD_I32BE, 
+	                                          dspace);
+	Attribute ga1 = gr1.createAttribute(GATTR_NAME, PredType::STD_I32BE, 
+	                                          dspace);
+     
+	// Write the attribute data. 
+	fa1.write( PredType::NATIVE_INT, attr_data);
+	ga1.write( PredType::NATIVE_INT, attr_data);
+
+	fa1.close();
+	ga1.close();
+	fds.close();
+	gds.close();
+
+	// Verify the attributes have correct names.
+	printelems(file, FDATASET_NAME, FATTR_NAME);
+	printelems(gr1, GDATASET_NAME, GATTR_NAME);
+
+   }  // end of try block
+
+   // catch failure caused by the H5File operations
+   catch( DataSpaceIException error )
+   {
+	error.printError();
+   }
+
+   // catch failure caused by the H5File operations
+   catch( AttributeIException error )
+   {
+	error.printError();
+   }
+
+   // catch failure caused by the H5File operations
+   catch( FileIException error )
+   {
+	error.printError();
+   }
+
+   // catch failure caused by the DataSet operations
+   catch( DataSetIException error )
+   {
+	error.printError();
+   }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_iterate
+ *
+ * Purpose:	Tests iterate functionality
+ *
+ * Return:	Success: 0
+ *		Failure: -1
+ *
+ * Programmer:	Binh-Minh Ribler
+ *		Tuesday, September 6, 2016
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifdef __cplusplus
+extern "C"
+#endif
+void test_iterate()
+{
+    // Output message about test being performed
+    MESSAGE(5, ("Testing Iterate Feature\n"));
+
+    // Create access property with latest library version.
+    FileAccPropList fapl;
+    fapl.setLibverBounds(H5F_LIBVER_LATEST, H5F_LIBVER_LATEST);
+
+    test_iter_group(fapl);	// Test iterating groups
+    test_HDFFV_9920();		// Test the fix of HDFFV-9920
+    //test_iter_attr(fapl);	// Test iterating attributes
+
+}   // test_iterate
+
+/*-------------------------------------------------------------------------
+ * Function:    cleanup_iterate
+ *
+ * Purpose:     Cleanup temporary test files
+ *
+ * Return:      none
+ *
+ * Programmer:  (use C version)
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifdef __cplusplus
+extern "C"
+#endif
+void cleanup_iterate()
+{
+    HDremove(FILE_ITERATE.c_str());
+} // cleanup_iterate
-- 
cgit v0.12


From 43dd56f0a01b7c242c9d02e45098450edd965f24 Mon Sep 17 00:00:00 2001
From: Binh-Minh Ribler <bmribler@hdfgroup.org>
Date: Mon, 26 Sep 2016 23:08:38 -0500
Subject: Purpose: Updated documentation Description:     Revised class brief
 description and other comments for up-to-date info. Platforms tested:    
 Linux/32 2.6 (jam)     Linux/64 (platypus)     Darwin (osx1010test)

---
 c++/src/H5ArrayType.h   |  2 ++
 c++/src/H5AtomType.h    |  2 ++
 c++/src/H5Attribute.h   |  2 ++
 c++/src/H5CompType.h    |  2 ++
 c++/src/H5DataSet.h     |  2 ++
 c++/src/H5DataSpace.h   |  7 ++++++-
 c++/src/H5DataType.h    |  2 ++
 c++/src/H5DcreatProp.h  |  6 ++++--
 c++/src/H5DxferProp.h   |  6 ++++--
 c++/src/H5EnumType.h    |  7 ++++++-
 c++/src/H5FaccProp.h    |  7 ++++++-
 c++/src/H5FcreatProp.h  |  7 ++++++-
 c++/src/H5File.h        |  5 +++--
 c++/src/H5FloatType.h   |  7 ++++++-
 c++/src/H5Group.h       |  9 +--------
 c++/src/H5IdComponent.h |  2 --
 c++/src/H5IntType.h     |  7 ++++++-
 c++/src/H5Location.h    | 30 +++++++-----------------------
 c++/src/H5Object.h      | 49 ++++++++++++++++++++++---------------------------
 c++/src/H5OcreatProp.h  |  7 ++++++-
 c++/src/H5PredType.h    |  2 ++
 c++/src/H5PropList.h    |  6 ++++++
 c++/src/H5StrType.h     |  7 ++++++-
 c++/src/H5VarLenType.h  |  7 ++++++-
 24 files changed, 115 insertions(+), 75 deletions(-)

diff --git a/c++/src/H5ArrayType.h b/c++/src/H5ArrayType.h
index fb6c711..aa7450c 100644
--- a/c++/src/H5ArrayType.h
+++ b/c++/src/H5ArrayType.h
@@ -24,6 +24,8 @@ namespace H5 {
 /*! \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:
diff --git a/c++/src/H5AtomType.h b/c++/src/H5AtomType.h
index 792312a..9798efc 100644
--- a/c++/src/H5AtomType.h
+++ b/c++/src/H5AtomType.h
@@ -27,6 +27,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:
diff --git a/c++/src/H5Attribute.h b/c++/src/H5Attribute.h
index 6590c23..5455f76 100644
--- a/c++/src/H5Attribute.h
+++ b/c++/src/H5Attribute.h
@@ -28,6 +28,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:
diff --git a/c++/src/H5CompType.h b/c++/src/H5CompType.h
index bd6d76c..8ecc8bf 100644
--- a/c++/src/H5CompType.h
+++ b/c++/src/H5CompType.h
@@ -24,6 +24,8 @@ namespace H5 {
 /*! \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:
diff --git a/c++/src/H5DataSet.h b/c++/src/H5DataSet.h
index c97e5b0..dd98d26 100644
--- a/c++/src/H5DataSet.h
+++ b/c++/src/H5DataSet.h
@@ -27,6 +27,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:
diff --git a/c++/src/H5DataSpace.h b/c++/src/H5DataSpace.h
index 384f1a3..38d8135 100644
--- a/c++/src/H5DataSpace.h
+++ b/c++/src/H5DataSpace.h
@@ -21,7 +21,12 @@
 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
diff --git a/c++/src/H5DataType.h b/c++/src/H5DataType.h
index 7584cff..e332cee 100644
--- a/c++/src/H5DataType.h
+++ b/c++/src/H5DataType.h
@@ -30,6 +30,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:
diff --git a/c++/src/H5DcreatProp.h b/c++/src/H5DcreatProp.h
index fa7b1c1..07c9077 100644
--- a/c++/src/H5DcreatProp.h
+++ b/c++/src/H5DcreatProp.h
@@ -27,8 +27,10 @@ namespace H5 {
 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:
diff --git a/c++/src/H5DxferProp.h b/c++/src/H5DxferProp.h
index 31fc372..a4af53c 100644
--- a/c++/src/H5DxferProp.h
+++ b/c++/src/H5DxferProp.h
@@ -25,8 +25,10 @@ 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:
diff --git a/c++/src/H5EnumType.h b/c++/src/H5EnumType.h
index fe36e8b..bc5b870 100644
--- a/c++/src/H5EnumType.h
+++ b/c++/src/H5EnumType.h
@@ -21,7 +21,12 @@
 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:
diff --git a/c++/src/H5FaccProp.h b/c++/src/H5FaccProp.h
index 831488c..e96d02f 100644
--- a/c++/src/H5FaccProp.h
+++ b/c++/src/H5FaccProp.h
@@ -24,7 +24,12 @@
 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.
diff --git a/c++/src/H5FcreatProp.h b/c++/src/H5FcreatProp.h
index 5d81078..b2a5c2b 100644
--- a/c++/src/H5FcreatProp.h
+++ b/c++/src/H5FcreatProp.h
@@ -21,7 +21,12 @@
 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.
diff --git a/c++/src/H5File.h b/c++/src/H5File.h
index 7ec92fe..476c5b9 100644
--- a/c++/src/H5File.h
+++ b/c++/src/H5File.h
@@ -23,9 +23,10 @@ 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:
diff --git a/c++/src/H5FloatType.h b/c++/src/H5FloatType.h
index e88093e..ce816a4 100644
--- a/c++/src/H5FloatType.h
+++ b/c++/src/H5FloatType.h
@@ -21,7 +21,12 @@
 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.
diff --git a/c++/src/H5Group.h b/c++/src/H5Group.h
index f1dfce1..b6ec425 100644
--- a/c++/src/H5Group.h
+++ b/c++/src/H5Group.h
@@ -24,19 +24,12 @@ namespace H5 {
 /*! \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).
diff --git a/c++/src/H5IdComponent.h b/c++/src/H5IdComponent.h
index 61c8bd6..92765f2 100644
--- a/c++/src/H5IdComponent.h
+++ b/c++/src/H5IdComponent.h
@@ -17,8 +17,6 @@
 #ifndef __IdComponent_H
 #define __IdComponent_H
 
-// IdComponent represents an HDF5 object that has an identifier.
-
 #ifndef H5_NO_NAMESPACE
 namespace H5 {
 #endif
diff --git a/c++/src/H5IntType.h b/c++/src/H5IntType.h
index e28f5c2..362a7e3 100644
--- a/c++/src/H5IntType.h
+++ b/c++/src/H5IntType.h
@@ -21,7 +21,12 @@
 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
diff --git a/c++/src/H5Location.h b/c++/src/H5Location.h
index 4f7a717..9ab67d3 100644
--- a/c++/src/H5Location.h
+++ b/c++/src/H5Location.h
@@ -23,35 +23,19 @@
 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 forwarding
-class H5_DLLCPP ArrayType;
-class H5_DLLCPP VarLenType;
-
 /*! \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.
diff --git a/c++/src/H5Object.h b/c++/src/H5Object.h
index 372faed..e570055 100644
--- a/c++/src/H5Object.h
+++ b/c++/src/H5Object.h
@@ -17,27 +17,32 @@
 #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;
@@ -55,18 +60,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;
diff --git a/c++/src/H5OcreatProp.h b/c++/src/H5OcreatProp.h
index 0fda34d..0532b3c 100644
--- a/c++/src/H5OcreatProp.h
+++ b/c++/src/H5OcreatProp.h
@@ -21,7 +21,12 @@
 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.
diff --git a/c++/src/H5PredType.h b/c++/src/H5PredType.h
index f560765..1e789ef 100644
--- a/c++/src/H5PredType.h
+++ b/c++/src/H5PredType.h
@@ -27,6 +27,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:
diff --git a/c++/src/H5PropList.h b/c++/src/H5PropList.h
index 7f6ee31..dbd1263 100644
--- a/c++/src/H5PropList.h
+++ b/c++/src/H5PropList.h
@@ -22,6 +22,12 @@ 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
diff --git a/c++/src/H5StrType.h b/c++/src/H5StrType.h
index 8b3a773..eac6693 100644
--- a/c++/src/H5StrType.h
+++ b/c++/src/H5StrType.h
@@ -21,7 +21,12 @@
 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
diff --git a/c++/src/H5VarLenType.h b/c++/src/H5VarLenType.h
index 672b3db..4898135 100644
--- a/c++/src/H5VarLenType.h
+++ b/c++/src/H5VarLenType.h
@@ -21,7 +21,12 @@
 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
-- 
cgit v0.12


From fe5c359ce94012dde56938a125a71393a3f8e852 Mon Sep 17 00:00:00 2001
From: "M. Scot Breitenfeld" <brtnfld@hdfgroup.org>
Date: Fri, 7 Oct 2016 09:58:40 -0500
Subject:     Removed unused H5T_NATIVE_INTEGER_# variables due to NAG fixes.

    HDFFV-9973
    Fortran library fails to compile and fails tests with NAG compiler
---
 fortran/src/H5f90global.F90 | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/fortran/src/H5f90global.F90 b/fortran/src/H5f90global.F90
index aef3e4d..b84f6c2 100644
--- a/fortran/src/H5f90global.F90
+++ b/fortran/src/H5f90global.F90
@@ -85,11 +85,7 @@ MODULE H5GLOBAL
   ! integer data types are added
   INTEGER, PARAMETER :: INTEGER_TYPES_LEN = 27
 
-  INTEGER(HID_T) :: H5T_NATIVE_INTEGER_1, &
-       H5T_NATIVE_INTEGER_2, &
-       H5T_NATIVE_INTEGER_4, &
-       H5T_NATIVE_INTEGER_8, &
-       H5T_NATIVE_REAL_C_FLOAT, &
+  INTEGER(HID_T) :: H5T_NATIVE_REAL_C_FLOAT, &
        H5T_NATIVE_REAL_C_DOUBLE, &
        H5T_NATIVE_REAL_C_LONG_DOUBLE, &
        H5T_NATIVE_INTEGER, &
-- 
cgit v0.12


From 21b5e3132ebb544797130c57224fca2cb2654b15 Mon Sep 17 00:00:00 2001
From: "M. Scot Breitenfeld" <brtnfld@hdfgroup.org>
Date: Mon, 10 Oct 2016 10:25:09 -0500
Subject: Fix:HDFFV-9987  With HDF5-1.10 you cannot specify default dataspace
 for Fortran (H5S_ALL_F)

Resolution:
 Made H5S_ALL_F INTEGER(HID_T) to match C.
---
 fortran/src/H5_f.c          | 45 +++++++++++++++++++++++++-------------------
 fortran/src/H5_ff.F90       |  5 ++++-
 fortran/src/H5f90global.F90 | 46 +++++++++++++++++++++++++--------------------
 fortran/src/H5f90proto.h    | 14 ++++++++------
 fortran/test/tH5T.F90       |  2 +-
 fortran/test/tH5T_F03.F90   |  2 +-
 6 files changed, 66 insertions(+), 48 deletions(-)

diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c
index f9fe927..860f9cb 100644
--- a/fortran/src/H5_f.c
+++ b/fortran/src/H5_f.c
@@ -334,6 +334,7 @@ h5close_types_c( hid_t_f * types, int_f *lentypes,
  *  h5p_flags_int   - H5P interface flags of type integer
  *  h5r_flags       - H5R interface flags
  *  h5s_flags       - H5S interface flags
+ *  h5s_hid_flags   - H5S interface flags of type hid_t
  *  h5s_hsize_flags - H5S interface flags of type hsize_t
  *  h5t_flags       - H5T interface flags
  *  h5z_flags       - H5Z interface flags
@@ -356,6 +357,8 @@ h5close_types_c( hid_t_f * types, int_f *lentypes,
  *           MSB, July 9, 2009
  *  Added type h5d_flags of type size_t
  *           MSB, Feb. 28, 2014
+ *  Added type h5s_hid_flags of type hid_t
+ *           MSB, Oct. 10, 2016
  * SOURCE
  */
 int_f
@@ -363,8 +366,9 @@ h5init_flags_c( int_f *h5d_flags, size_t_f *h5d_size_flags,
 		int_f *h5e_flags, hid_t_f *h5e_hid_flags, int_f *h5f_flags,
                 int_f *h5fd_flags, hid_t_f *h5fd_hid_flags,
                 int_f *h5g_flags, int_f *h5i_flags, int_f *h5l_flags, int_f *h5o_flags,
-                hid_t_f *h5p_flags, int_f *h5p_flags_int, int_f *h5r_flags, int_f *h5s_flags,
-		hsize_t_f *h5s_hsize_flags, int_f *h5t_flags, int_f *h5z_flags, int_f *h5_generic_flags,
+                hid_t_f *h5p_flags, int_f *h5p_flags_int, int_f *h5r_flags, 
+                int_f *h5s_flags, hid_t_f *h5s_hid_flags, hsize_t_f *h5s_hsize_flags, 
+		int_f *h5t_flags, int_f *h5z_flags, int_f *h5_generic_flags,
                 haddr_t_f *h5_haddr_generic_flags)
 /******/
 {
@@ -593,29 +597,32 @@ h5init_flags_c( int_f *h5d_flags, size_t_f *h5d_size_flags,
 /*
  *  H5S flags
  */
+      
+      h5s_hid_flags[0] = (hid_t_f)H5S_ALL;
+
+      h5s_hsize_flags[0] = (hsize_t_f)H5S_UNLIMITED;
+
       h5s_flags[0] = (int_f)H5S_SCALAR;
       h5s_flags[1] = (int_f)H5S_SIMPLE;
       h5s_flags[2] = (int_f)H5S_NULL;
       h5s_flags[3] = (int_f)H5S_SELECT_SET;
       h5s_flags[4] = (int_f)H5S_SELECT_OR;
-      h5s_flags[5] = (int_f)H5S_ALL;
-
-      h5s_flags[6] = (int_f)H5S_SELECT_NOOP;
-      h5s_flags[7] = (int_f)H5S_SELECT_AND;
-      h5s_flags[8] = (int_f)H5S_SELECT_XOR;
-      h5s_flags[9] = (int_f)H5S_SELECT_NOTB;
-      h5s_flags[10] = (int_f)H5S_SELECT_NOTA;
-      h5s_flags[11] = (int_f)H5S_SELECT_APPEND;
-      h5s_flags[12] = (int_f)H5S_SELECT_PREPEND;
-      h5s_flags[13] = (int_f)H5S_SELECT_INVALID;
-
-      h5s_flags[14] = (int_f)H5S_SEL_ERROR;
-      h5s_flags[15] = (int_f)H5S_SEL_NONE;
-      h5s_flags[16] = (int_f)H5S_SEL_POINTS;
-      h5s_flags[17] = (int_f)H5S_SEL_HYPERSLABS;
-      h5s_flags[18] = (int_f)H5S_SEL_ALL;
 
-      h5s_hsize_flags[0] = (hsize_t_f)H5S_UNLIMITED;
+      h5s_flags[5] = (int_f)H5S_SELECT_NOOP;
+      h5s_flags[6] = (int_f)H5S_SELECT_AND;
+      h5s_flags[7] = (int_f)H5S_SELECT_XOR;
+      h5s_flags[8] = (int_f)H5S_SELECT_NOTB;
+      h5s_flags[9] = (int_f)H5S_SELECT_NOTA;
+
+      h5s_flags[10] = (int_f)H5S_SELECT_APPEND;
+      h5s_flags[11] = (int_f)H5S_SELECT_PREPEND;
+      h5s_flags[12] = (int_f)H5S_SELECT_INVALID;
+      h5s_flags[13] = (int_f)H5S_SEL_ERROR;
+      h5s_flags[14] = (int_f)H5S_SEL_NONE;
+
+      h5s_flags[15] = (int_f)H5S_SEL_POINTS;
+      h5s_flags[16] = (int_f)H5S_SEL_HYPERSLABS;
+      h5s_flags[17] = (int_f)H5S_SEL_ALL;
 
 /*
  *  H5T flags
diff --git a/fortran/src/H5_ff.F90 b/fortran/src/H5_ff.F90
index 228e148..f2036ee 100644
--- a/fortran/src/H5_ff.F90
+++ b/fortran/src/H5_ff.F90
@@ -102,6 +102,7 @@ CONTAINS
             i_H5P_flags_int, &
             i_H5R_flags, &
             i_H5S_flags, &
+            i_H5S_hid_flags, &
             i_H5S_hsize_flags, &
             i_H5T_flags, &
             i_H5Z_flags, &
@@ -114,7 +115,7 @@ CONTAINS
               H5F_FLAGS_LEN, H5G_FLAGS_LEN, H5FD_FLAGS_LEN, &
               H5FD_HID_FLAGS_LEN, H5I_FLAGS_LEN, H5L_FLAGS_LEN, &
               H5O_FLAGS_LEN, H5P_FLAGS_LEN, H5P_FLAGS_INT_LEN, &
-              H5R_FLAGS_LEN, H5S_FLAGS_LEN, H5S_HSIZE_FLAGS_LEN, &
+              H5R_FLAGS_LEN, H5S_FLAGS_LEN, H5S_HID_FLAGS_LEN, H5S_HSIZE_FLAGS_LEN, &
               H5T_FLAGS_LEN, H5Z_FLAGS_LEN, H5generic_FLAGS_LEN, H5generic_haddr_FLAGS_LEN
          IMPLICIT NONE
          INTEGER i_H5D_flags(H5D_FLAGS_LEN)
@@ -132,6 +133,7 @@ CONTAINS
          INTEGER i_H5P_flags_int(H5P_FLAGS_INT_LEN)
          INTEGER i_H5R_flags(H5R_FLAGS_LEN)
          INTEGER i_H5S_flags(H5S_FLAGS_LEN)
+         INTEGER(HID_T) i_H5S_hid_flags(H5S_HID_FLAGS_LEN)
          INTEGER(HSIZE_T) i_H5S_hsize_flags(H5S_HSIZE_FLAGS_LEN)
          INTEGER i_H5T_flags(H5T_FLAGS_LEN)
          INTEGER i_H5Z_flags(H5Z_FLAGS_LEN)
@@ -163,6 +165,7 @@ CONTAINS
          H5P_flags_int, &
          H5R_flags, &
          H5S_flags, &
+         H5S_hid_flags, &
          H5S_hsize_flags, &
          H5T_flags, &
          H5Z_flags, &
diff --git a/fortran/src/H5f90global.F90 b/fortran/src/H5f90global.F90
index b84f6c2..a85ee50 100644
--- a/fortran/src/H5f90global.F90
+++ b/fortran/src/H5f90global.F90
@@ -747,25 +747,29 @@ MODULE H5GLOBAL
   !
   ! H5S flags declaration
   !
-  INTEGER, PARAMETER :: H5S_FLAGS_LEN = 19
+  INTEGER, PARAMETER :: H5S_FLAGS_LEN = 18
   INTEGER :: H5S_flags(H5S_FLAGS_LEN)
   INTEGER, PARAMETER :: H5S_HSIZE_FLAGS_LEN = 1
   INTEGER(HSIZE_T) H5S_hsize_flags(H5S_HSIZE_FLAGS_LEN)
+  INTEGER, PARAMETER :: H5S_HID_FLAGS_LEN = 1
+  INTEGER(HSIZE_T) H5S_hid_flags(H5S_HID_FLAGS_LEN)
   !DEC$if defined(BUILD_HDF5_DLL)
   !DEC$ATTRIBUTES DLLEXPORT :: /H5S_FLAGS/
+  !DEC$ATTRIBUTES DLLEXPORT :: /H5S_HID_FLAGS/
   !DEC$ATTRIBUTES DLLEXPORT :: /H5S_HSIZE_FLAGS/
   !DEC$endif
   COMMON /H5S_FLAGS/ H5S_flags
+  COMMON /H5S_HID_FLAGS/ H5S_hid_flags
   COMMON /H5S_HSIZE_FLAGS/ H5S_hsize_flags
 
   INTEGER(HSIZE_T) :: H5S_UNLIMITED_F
 
+  INTEGER(HID_T) :: H5S_ALL_F
+
   INTEGER :: H5S_SCALAR_F
   INTEGER :: H5S_SIMPLE_F
   INTEGER :: H5S_NULL_F
 
-  INTEGER :: H5S_ALL_F
-
   INTEGER :: H5S_SELECT_NOOP_F
   INTEGER :: H5S_SELECT_SET_F
   INTEGER :: H5S_SELECT_OR_F
@@ -783,29 +787,31 @@ MODULE H5GLOBAL
   INTEGER :: H5S_SEL_HYPERSLABS_F
   INTEGER :: H5S_SEL_ALL_F
 
+  EQUIVALENCE(H5S_hid_flags(1), H5S_ALL_F)
+
   EQUIVALENCE(H5S_hsize_flags(1), H5S_UNLIMITED_F)
+
   EQUIVALENCE(H5S_flags(1), H5S_SCALAR_F)
   EQUIVALENCE(H5S_flags(2), H5S_SIMPLE_F)
   EQUIVALENCE(H5S_flags(3), H5S_NULL_F)
   EQUIVALENCE(H5S_flags(4), H5S_SELECT_SET_F)
   EQUIVALENCE(H5S_flags(5), H5S_SELECT_OR_F)
-  EQUIVALENCE(H5S_flags(6), H5S_ALL_F)
-
-  EQUIVALENCE(H5S_flags(7), H5S_SELECT_NOOP_F)
-  EQUIVALENCE(H5S_flags(8), H5S_SELECT_AND_F)
-  EQUIVALENCE(H5S_flags(9), H5S_SELECT_XOR_F)
-  EQUIVALENCE(H5S_flags(10), H5S_SELECT_NOTB_F)
-  EQUIVALENCE(H5S_flags(11), H5S_SELECT_NOTA_F)
-  EQUIVALENCE(H5S_flags(12), H5S_SELECT_APPEND_F)
-  EQUIVALENCE(H5S_flags(13), H5S_SELECT_PREPEND_F)
-  EQUIVALENCE(H5S_flags(14), H5S_SELECT_INVALID_F)
-
-
-  EQUIVALENCE(H5S_flags(15), H5S_SEL_ERROR_F)
-  EQUIVALENCE(H5S_flags(16), H5S_SEL_NONE_F)
-  EQUIVALENCE(H5S_flags(17), H5S_SEL_POINTS_F)
-  EQUIVALENCE(H5S_flags(18), H5S_SEL_HYPERSLABS_F)
-  EQUIVALENCE(H5S_flags(19), H5S_SEL_ALL_F)
+
+  EQUIVALENCE(H5S_flags(6), H5S_SELECT_NOOP_F)
+  EQUIVALENCE(H5S_flags(7), H5S_SELECT_AND_F)
+  EQUIVALENCE(H5S_flags(8), H5S_SELECT_XOR_F)
+  EQUIVALENCE(H5S_flags(9), H5S_SELECT_NOTB_F)
+  EQUIVALENCE(H5S_flags(10), H5S_SELECT_NOTA_F)
+
+  EQUIVALENCE(H5S_flags(11), H5S_SELECT_APPEND_F)
+  EQUIVALENCE(H5S_flags(12), H5S_SELECT_PREPEND_F)
+  EQUIVALENCE(H5S_flags(13), H5S_SELECT_INVALID_F)
+  EQUIVALENCE(H5S_flags(14), H5S_SEL_ERROR_F)
+  EQUIVALENCE(H5S_flags(15), H5S_SEL_NONE_F)
+
+  EQUIVALENCE(H5S_flags(16), H5S_SEL_POINTS_F)
+  EQUIVALENCE(H5S_flags(17), H5S_SEL_HYPERSLABS_F)
+  EQUIVALENCE(H5S_flags(18), H5S_SEL_ALL_F)
 
   !
   ! H5T flags declaration
diff --git a/fortran/src/H5f90proto.h b/fortran/src/H5f90proto.h
index f8b4564..67f28db 100644
--- a/fortran/src/H5f90proto.h
+++ b/fortran/src/H5f90proto.h
@@ -525,12 +525,14 @@ H5_FCDLL int_f h5open_c(void);
 H5_FCDLL int_f h5close_c(void);
 H5_FCDLL int_f h5init_types_c(hid_t_f *types, hid_t_f *floatingtypes, hid_t_f *integertypes);
 H5_FCDLL int_f h5close_types_c(hid_t_f *types, int_f *lentypes, hid_t_f *floatingtypes, int_f *floatinglen, hid_t_f *integertypes, int_f *integerlen);
-H5_FCDLL int_f h5init_flags_c(int_f *h5d_flags, size_t_f *h5d_size_flags, int_f *h5e_flags, hid_t_f *h5e_hid_flags, int_f *h5f_flags,
-			      int_f *h5fd_flags, hid_t_f *h5fd_hid_flags,
-			      int_f *h5g_flags, int_f *h5i_flags, int_f *h5l_flags, int_f *h5o_flags,
-			      hid_t_f *h5p_flags, int_f *h5p_flags_int, int_f *h5r_flags, int_f *h5s_flags,
-			      hsize_t_f *h5s_hsize_flags, int_f *h5t_flags, int_f *h5z_flags, int_f *h5_generic_flags,
-                              haddr_t_f *h5_haddr_generic_flags);
+H5_FCDLL int_f h5init_flags_c( int_f *h5d_flags, size_t_f *h5d_size_flags, 
+		int_f *h5e_flags, hid_t_f *h5e_hid_flags, int_f *h5f_flags,
+                int_f *h5fd_flags, hid_t_f *h5fd_hid_flags,
+                int_f *h5g_flags, int_f *h5i_flags, int_f *h5l_flags, int_f *h5o_flags,
+                hid_t_f *h5p_flags, int_f *h5p_flags_int, int_f *h5r_flags, 
+                int_f *h5s_flags, hid_t_f *h5s_hid_flags, hsize_t_f *h5s_hsize_flags, 
+		int_f *h5t_flags, int_f *h5z_flags, int_f *h5_generic_flags,
+                haddr_t_f *h5_haddr_generic_flags);
 H5_FCDLL int_f h5init1_flags_c(int_f *h5lib_flags);
 H5_FCDLL int_f h5get_libversion_c(int_f *majnum, int_f *minnum, int_f *relnum);
 H5_FCDLL int_f h5check_version_c(int_f *majnum, int_f *minnum, int_f *relnum);
diff --git a/fortran/test/tH5T.F90 b/fortran/test/tH5T.F90
index efbceea..1a3a382 100644
--- a/fortran/test/tH5T.F90
+++ b/fortran/test/tH5T.F90
@@ -490,7 +490,7 @@ CONTAINS
      !
      ! Read part of the dataset
      !
-     CALL h5dread_f(dset_id, dt1_id, char_member_out, data_dims, error)
+     CALL h5dread_f(dset_id, dt1_id, char_member_out, data_dims, error, H5S_ALL_F, H5S_ALL_F, H5P_DEFAULT_F)
      CALL check("h5dread_f", error, total_error)
          do i = 1, dimsize
             if (char_member_out(i) .ne. char_member(i)) then
diff --git a/fortran/test/tH5T_F03.F90 b/fortran/test/tH5T_F03.F90
index c8be606..c596d31 100644
--- a/fortran/test/tH5T_F03.F90
+++ b/fortran/test/tH5T_F03.F90
@@ -249,7 +249,7 @@ SUBROUTINE test_array_compound_atomic(total_error)
   ! Read dataset from disk 
 
   f_ptr = C_LOC(rdata(1,1))
-  CALL H5Dread_f(dataset, tid1, f_ptr, error)
+  CALL H5Dread_f(dataset, tid1, f_ptr, error, H5S_ALL_F, H5S_ALL_F, H5P_DEFAULT_F)
   CALL check("H5Dread_f", error, total_error)
 
   ! Compare data read in 
-- 
cgit v0.12


From d26c3bef4d2c0c9dcf89ef203176e3dd636e2cfe Mon Sep 17 00:00:00 2001
From: Binh-Minh Ribler <bmribler@hdfgroup.org>
Date: Tue, 11 Oct 2016 00:14:25 -0500
Subject: Purpose: Fix bug HDFFR-9920 cont. Description:     Added new test
 file titerate.cpp.

---
 c++/test/CMakeLists.txt   | 1 +
 c++/test/CMakeTests.cmake | 2 ++
 2 files changed, 3 insertions(+)

diff --git a/c++/test/CMakeLists.txt b/c++/test/CMakeLists.txt
index 9d98d11..75ea500 100644
--- a/c++/test/CMakeLists.txt
+++ b/c++/test/CMakeLists.txt
@@ -20,6 +20,7 @@ set (CPP_TEST_SOURCES
     ${HDF5_CPP_TEST_SOURCE_DIR}/tfile.cpp
     ${HDF5_CPP_TEST_SOURCE_DIR}/tfilter.cpp
     ${HDF5_CPP_TEST_SOURCE_DIR}/th5s.cpp
+    ${HDF5_CPP_TEST_SOURCE_DIR}/titerate.cpp
     ${HDF5_CPP_TEST_SOURCE_DIR}/tlinks.cpp
     ${HDF5_CPP_TEST_SOURCE_DIR}/tobject.cpp
     ${HDF5_CPP_TEST_SOURCE_DIR}/trefer.cpp
diff --git a/c++/test/CMakeTests.cmake b/c++/test/CMakeTests.cmake
index 91c36b0..9bcc706 100644
--- a/c++/test/CMakeTests.cmake
+++ b/c++/test/CMakeTests.cmake
@@ -17,6 +17,7 @@ add_test (
             tattr_multi.h5
             tattr_scalar.h5
             tfattrs.h5
+            titerate.h5
 )
 
 add_test (NAME CPP_testhdf5 COMMAND $<TARGET_FILE:cpp_testhdf5>)
@@ -50,6 +51,7 @@ if (HDF5_TEST_VFD)
                   tattr_multi.h5
                   tattr_scalar.h5
                   tfattrs.h5
+                  titerate.h5
       )
       add_test (
         NAME CPP_VFD-${vfdname}-cpp_testhdf5
-- 
cgit v0.12


From ef52b96a9abb1717e6685b58fb97fd78a672c8f9 Mon Sep 17 00:00:00 2001
From: Binh-Minh Ribler <bmribler@hdfgroup.org>
Date: Tue, 11 Oct 2016 09:42:00 -0500
Subject: Description:     Removed commented out lines. Platform tested     Jam
 (only comments)

---
 c++/src/H5Classes.h | 1 -
 c++/src/H5Cpp.h     | 1 -
 2 files changed, 2 deletions(-)

diff --git a/c++/src/H5Classes.h b/c++/src/H5Classes.h
index de7cf4a..acc0b98 100644
--- a/c++/src/H5Classes.h
+++ b/c++/src/H5Classes.h
@@ -39,7 +39,6 @@ namespace H5 {
 	class FloatType;
 	class StrType;
 	class CompType;
-	//class RefType;
 	class AbstractDs;
 	class DataSet;
 	class Group;
diff --git a/c++/src/H5Cpp.h b/c++/src/H5Cpp.h
index 56b2f7f..800eb90 100644
--- a/c++/src/H5Cpp.h
+++ b/c++/src/H5Cpp.h
@@ -31,7 +31,6 @@
 #include "H5Object.h"
 #include "H5AbstractDs.h"
 #include "H5Attribute.h"
-//#include "H5CommonFG.h"
 #include "H5DataType.h"
 #include "H5AtomType.h"
 #include "H5PredType.h"
-- 
cgit v0.12


From 202cb53058177cd4daa51f333a6da4a7e83cf320 Mon Sep 17 00:00:00 2001
From: Binh-Minh Ribler <bmribler@hdfgroup.org>
Date: Wed, 12 Oct 2016 08:06:59 -0500
Subject: Description:     Added test file titerate.cpp. Platform tested:    
 Verified with bin/chkmanifest

---
 MANIFEST | 1 +
 1 file changed, 1 insertion(+)

diff --git a/MANIFEST b/MANIFEST
index 98ecdb5..da3530b 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -415,6 +415,7 @@
 ./c++/test/tfilter.cpp
 ./c++/test/th5s.cpp
 ./c++/test/th5s.h5
+./c++/test/titerate.cpp
 ./c++/test/tlinks.cpp
 ./c++/test/tobject.cpp
 ./c++/test/ttypes.cpp
-- 
cgit v0.12


From 14b1e13e80c72a65770dd9b462cb6d0eb9ed4c7e Mon Sep 17 00:00:00 2001
From: Binh-Minh Ribler <bmribler@hdfgroup.org>
Date: Wed, 12 Oct 2016 14:21:57 -0500
Subject: Description:     Fixed typo that caused daily test failed when
 --enable-deprecated-symbols     is used.  Also, removed a commented-out
 function. Platforms tested:     Linux/32 2.6 (jam)     Linux/64 (platypus)
 with --enable-deprecated-symbols

---
 c++/src/H5Location.cpp | 6 +++---
 c++/src/H5Location.h   | 3 ---
 2 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/c++/src/H5Location.cpp b/c++/src/H5Location.cpp
index 334389e..6b5c63a 100644
--- a/c++/src/H5Location.cpp
+++ b/c++/src/H5Location.cpp
@@ -1885,6 +1885,9 @@ H5G_obj_t H5Location::getObjTypeByIdx(hsize_t idx, H5std_string& type_name) cons
     return (obj_type);
 }
 
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
 //--------------------------------------------------------------------------
 // Function:    H5Location::throwException
 ///\brief       Invokes subclass' throwException
@@ -1898,9 +1901,6 @@ void H5Location::throwException(const H5std_string& func_name, const H5std_strin
    throwException(func_name, msg);
 }
 
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-#endif /* H5_NO_DEPRECATED_SYMBOLS */
-
 //--------------------------------------------------------------------------
 // Function:    f_DataType_setId - friend
 // Purpose:     This function is friend to class H5::DataType so that it
diff --git a/c++/src/H5Location.h b/c++/src/H5Location.h
index 9ab67d3..bd8075c 100644
--- a/c++/src/H5Location.h
+++ b/c++/src/H5Location.h
@@ -208,9 +208,6 @@ class H5_DLLCPP H5Location : public IdComponent {
 
 // end From CommonFG
 
-	///\brief Returns an identifier.
-	//virtual hid_t getId() const;
-
 	/// For subclasses, H5File and Group, to throw appropriate exception.
 	virtual void throwException(const H5std_string& func_name, const H5std_string& msg) const;
 
-- 
cgit v0.12


From 789c1d081aea0afdb6d893736992e140200856ab Mon Sep 17 00:00:00 2001
From: Allen Byrne <byrn@hdfgroup.org>
Date: Fri, 14 Oct 2016 12:46:38 -0500
Subject: Correct typo in variable format

---
 fortran/src/CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fortran/src/CMakeLists.txt b/fortran/src/CMakeLists.txt
index 00d0429..a74459f 100644
--- a/fortran/src/CMakeLists.txt
+++ b/fortran/src/CMakeLists.txt
@@ -73,7 +73,7 @@ if (BUILD_SHARED_LIBS AND NOT SKIP_HDF5_FORTRAN_SHARED)
   endif (WIN32)
 endif (BUILD_SHARED_LIBS AND NOT SKIP_HDF5_FORTRAN_SHARED)
 if (WIN32)
-  set (MOD_BUILD_DIR ${CMAKE_Fortran_MODULE_DIRECTORY}/static/$CMAKE_BUILD_TYPE})
+  set (MOD_BUILD_DIR ${CMAKE_Fortran_MODULE_DIRECTORY}/static/${CMAKE_BUILD_TYPE})
 else (WIN32)
   set (MOD_BUILD_DIR ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
 endif (WIN32)
-- 
cgit v0.12


From fabfa3c1f44ee43598f88edbe5b0bf7409f1ec6f Mon Sep 17 00:00:00 2001
From: Allen Byrne <byrn@hdfgroup.org>
Date: Fri, 14 Oct 2016 13:10:18 -0500
Subject: Fix typo

---
 tools/h5ls/CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/h5ls/CMakeLists.txt b/tools/h5ls/CMakeLists.txt
index 41ba23c..baa63b1 100644
--- a/tools/h5ls/CMakeLists.txt
+++ b/tools/h5ls/CMakeLists.txt
@@ -14,7 +14,7 @@ TARGET_NAMING (h5ls STATIC)
 TARGET_C_PROPERTIES (h5ls STATIC " " " ")
 target_link_libraries (h5ls  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (h5ls PROPERTIES FOLDER tools)
-set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5lsy")
+set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5ls")
 
 set (H5_DEP_EXECUTABLES
     h5ls
-- 
cgit v0.12


From 321db89a65909c02d7279fed7e8b7a3585cde8da Mon Sep 17 00:00:00 2001
From: Allen Byrne <byrn@hdfgroup.org>
Date: Fri, 14 Oct 2016 13:13:25 -0500
Subject: Remove test only tools from exports

---
 tools/h5jam/CMakeLists.txt | 2 --
 1 file changed, 2 deletions(-)

diff --git a/tools/h5jam/CMakeLists.txt b/tools/h5jam/CMakeLists.txt
index 395ef0e..edf121f 100644
--- a/tools/h5jam/CMakeLists.txt
+++ b/tools/h5jam/CMakeLists.txt
@@ -21,14 +21,12 @@ TARGET_NAMING (getub STATIC)
 TARGET_C_PROPERTIES (getub STATIC " " " ")
 target_link_libraries (getub  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (getub PROPERTIES FOLDER tools)
-set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5getub")
 
 add_executable (tellub ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/tellub.c)
 TARGET_NAMING (tellub STATIC)
 TARGET_C_PROPERTIES (tellub STATIC " " " ")
 target_link_libraries (tellub  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_target_properties (tellub PROPERTIES FOLDER tools)
-set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5tellub")
 
 add_executable (h5unjam ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/h5unjam.c)
 TARGET_NAMING (h5unjam STATIC)
-- 
cgit v0.12