mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-04-18 17:40:55 +08:00
Merge pull request #1116 in HDFFV/hdf5 from ~HDFTEST/hdf5_hft:hdf5_1_10 to develop
* commit '25f80cbbec3a7d8036325784168b029cb71cc813': (324 commits) Snapshot version 1.10 release 3 (snap3) Update document HDFFV-10433 Updated text to address issues raised. Snapshot version 1.10 release 3 (snap2) Updated version to 1.10.3-snap2 Merge corrections from develop HDFFV-10473 add note for attribute fix Correct attribute location HDFFV-9739 and cmake improvements merge from develop Fix for HDFFV-10469: set to latest format for virtual layout encoding. Update Windows test machines Fix soversion Fixed libver bounds underscore issue removed extraneous lib. ver. bound, PR comment temporary fix for HDFFV-10469 Updated version to 1.10.3-snap1 Add new file Correct number of tests Whitespace and test reclassify merge from develop HDFFV-10444 fix so numbers and merge java test changes ...
This commit is contained in:
commit
e9f476dad4
@ -21,7 +21,7 @@ set (CTEST_NIGHTLY_START_TIME "18:00:00 CST")
|
||||
set (CTEST_DROP_METHOD "http")
|
||||
if (CDASH_LOCAL)
|
||||
set (CTEST_DROP_SITE "cdash-internal.hdfgroup.org")
|
||||
set (CTEST_DROP_LOCATION "/submit.php?project=HDF5Trunk")
|
||||
set (CTEST_DROP_LOCATION "/submit.php?project=HDF5110")
|
||||
else ()
|
||||
set (CTEST_DROP_SITE "cdash.hdfgroup.org")
|
||||
set (CTEST_DROP_LOCATION "/submit.php?project=HDF5")
|
||||
|
@ -1,4 +1,4 @@
|
||||
HDF5 version 1.11.2 currently under development
|
||||
HDF5 version 1.10.3-snap4 currently under development
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
Please refer to the release_docs/INSTALL file for installation instructions.
|
||||
|
22
bin/release
22
bin/release
@ -213,17 +213,18 @@ tar2cmakezip()
|
||||
return 1
|
||||
fi
|
||||
|
||||
# step 2: add batch file for building CMake on window
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/build-VS2013-32.bat $cmziptmpdir
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/build-VS2013-64.bat $cmziptmpdir
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/build-VS2015-32.bat $cmziptmpdir
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/build-VS2015-64.bat $cmziptmpdir
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/build-VS2017-32.bat $cmziptmpdir
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/build-VS2017-64.bat $cmziptmpdir
|
||||
# step 2: add batch files for building CMake on windows
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/HDF5_1_10/build-VS2013-32.bat $cmziptmpdir
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/HDF5_1_10/build-VS2013-64.bat $cmziptmpdir
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/HDF5_1_10/build-VS2015-32.bat $cmziptmpdir
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/HDF5_1_10/build-VS2015-64.bat $cmziptmpdir
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/HDF5_1_10/build-VS2017-32.bat $cmziptmpdir
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/HDF5_1_10/build-VS2017-64.bat $cmziptmpdir
|
||||
|
||||
# step 3: add SZIP.tar.gz, ZLib.tar.gz and cmake files
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/SZip.tar.gz $cmziptmpdir
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/ZLib.tar.gz $cmziptmpdir
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/HDF5Examples-1.10.7-Source.tar.gz $cmziptmpdir
|
||||
cp $cmziptmpdir/$version/config/cmake/scripts/CTestScript.cmake $cmziptmpdir
|
||||
cp $cmziptmpdir/$version/config/cmake/scripts/HDF5config.cmake $cmziptmpdir
|
||||
cp $cmziptmpdir/$version/config/cmake/scripts/HDF5options.cmake $cmziptmpdir
|
||||
@ -240,6 +241,10 @@ tar2cmakezip()
|
||||
unix2dos -q -k $inf; \
|
||||
fi\
|
||||
done
|
||||
|
||||
|
||||
mkdir $cmziptmpdir/CMake-$HDF5_VERS
|
||||
mv $cmziptmpdir/* $cmziptmpdir/CMake-$HDF5_VERS
|
||||
# step 3: make zipball
|
||||
# -9 maximum compression
|
||||
# -y Store symbolic links as such in the zip archive
|
||||
@ -316,9 +321,12 @@ tar2cmaketgz()
|
||||
# step 3: add SZIP.tar.gz, ZLib.tar.gz and cmake files
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/SZip.tar.gz $cmgztmpdir
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/ZLib.tar.gz $cmgztmpdir
|
||||
cp /mnt/scr1/pre-release/hdf5/CMake/HDF5Examples-1.10.7-Source.tar.gz $cmgztmpdir
|
||||
cp $cmgztmpdir/$version/config/cmake/scripts/CTestScript.cmake $cmgztmpdir
|
||||
cp $cmgztmpdir/$version/config/cmake/scripts/HDF5config.cmake $cmgztmpdir
|
||||
cp $cmgztmpdir/$version/config/cmake/scripts/HDF5options.cmake $cmgztmpdir
|
||||
mkdir $cmgztmpdir/CMake-$HDF5_VERS
|
||||
mv $cmgztmpdir/* $cmgztmpdir/CMake-$HDF5_VERS
|
||||
tar czf $DEST/CMake-$HDF5_VERS.tar.gz -C $cmgztmpdir . || exit 1
|
||||
|
||||
# cleanup
|
||||
|
@ -38,7 +38,7 @@ PROJECT_NAME =
|
||||
# could be handy for archiving the generated documentation or if some version
|
||||
# control system is used.
|
||||
|
||||
PROJECT_NUMBER = "1.11.2"
|
||||
PROJECT_NUMBER = "1.10.3-snap4, currently under development"
|
||||
|
||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||
# for a project that appears at the top of each page and should give viewer a
|
||||
|
@ -34,8 +34,8 @@ cmake_minimum_required (VERSION 3.10)
|
||||
# CTEST_SOURCE_NAME - source folder
|
||||
##############################################################################
|
||||
|
||||
set (CTEST_SOURCE_VERSION "1.11.2")
|
||||
set (CTEST_SOURCE_VERSEXT "")
|
||||
set (CTEST_SOURCE_VERSION "1.10.3")
|
||||
set (CTEST_SOURCE_VERSEXT "-snap4")
|
||||
|
||||
##############################################################################
|
||||
# handle input parameters to script.
|
||||
@ -184,7 +184,7 @@ set (MODEL "Experimental")
|
||||
##### Following controls source update #####
|
||||
#set (LOCAL_UPDATE "TRUE")
|
||||
set (REPOSITORY_URL "https://git@bitbucket.hdfgroup.org/scm/hdffv/hdf5.git")
|
||||
set (REPOSITORY_BRANCH "develop")
|
||||
set (REPOSITORY_BRANCH "hdf5_1_10_2")
|
||||
|
||||
#uncomment to use a compressed source file: *.tar on linux or mac *.zip on windows
|
||||
#set(CTEST_USE_TAR_SOURCE "${CTEST_SOURCE_VERSION}")
|
||||
|
@ -12,13 +12,13 @@
|
||||
## If you do not have access to either file, you may request a copy from
|
||||
## help@hdfgroup.org.
|
||||
##
|
||||
# Add libtool shared library version numbers to the HDF5 library
|
||||
# See libtool versioning documentation online.
|
||||
# After making changes, run bin/reconfigure to update other configure related
|
||||
# files like Makefile.in.
|
||||
LT_VERS_INTERFACE = 1000
|
||||
LT_VERS_AGE = 0
|
||||
## Add libtool shared library version numbers to the HDF5 library
|
||||
## See libtool versioning documentation online.
|
||||
## After making changes, run bin/reconfigure to update other configure related
|
||||
## files like Makefile.in.
|
||||
LT_VERS_INTERFACE = 102
|
||||
LT_VERS_REVISION = 0
|
||||
LT_VERS_AGE = 1
|
||||
|
||||
## If the API changes *at all*, increment LT_VERS_INTERFACE and
|
||||
## reset LT_VERS_REVISION to 0.
|
||||
@ -39,31 +39,31 @@ LT_VERS_REVISION = 0
|
||||
## the effects of the H5_V1_x_COMPAT flag.
|
||||
##
|
||||
## Version numbers for wrapper shared library files.
|
||||
LT_CXX_VERS_INTERFACE = 1000
|
||||
LT_CXX_VERS_INTERFACE = 102
|
||||
LT_CXX_VERS_REVISION = 0
|
||||
LT_CXX_VERS_AGE = 0
|
||||
|
||||
LT_F_VERS_INTERFACE = 1000
|
||||
LT_F_VERS_REVISION = 0
|
||||
LT_F_VERS_AGE = 0
|
||||
LT_F_VERS_INTERFACE = 101
|
||||
LT_F_VERS_REVISION = 1
|
||||
LT_F_VERS_AGE = 1
|
||||
|
||||
LT_HL_VERS_INTERFACE = 1000
|
||||
LT_HL_VERS_INTERFACE = 101
|
||||
LT_HL_VERS_REVISION = 0
|
||||
LT_HL_VERS_AGE = 0
|
||||
LT_HL_VERS_AGE = 1
|
||||
|
||||
LT_HL_CXX_VERS_INTERFACE = 1000
|
||||
LT_HL_CXX_VERS_REVISION = 0
|
||||
LT_HL_CXX_VERS_AGE = 0
|
||||
LT_HL_CXX_VERS_INTERFACE = 101
|
||||
LT_HL_CXX_VERS_REVISION = 1
|
||||
LT_HL_CXX_VERS_AGE = 1
|
||||
|
||||
LT_HL_F_VERS_INTERFACE = 1000
|
||||
LT_HL_F_VERS_REVISION = 0
|
||||
LT_HL_F_VERS_INTERFACE = 100
|
||||
LT_HL_F_VERS_REVISION = 2
|
||||
LT_HL_F_VERS_AGE = 0
|
||||
|
||||
LT_JAVA_VERS_INTERFACE = 1000
|
||||
LT_JAVA_VERS_INTERFACE = 102
|
||||
LT_JAVA_VERS_REVISION = 0
|
||||
LT_JAVA_VERS_AGE = 0
|
||||
LT_JAVA_VERS_AGE = 2
|
||||
|
||||
LT_TOOLS_VERS_INTERFACE = 1000
|
||||
LT_TOOLS_VERS_INTERFACE = 101
|
||||
LT_TOOLS_VERS_REVISION = 0
|
||||
LT_TOOLS_VERS_AGE = 0
|
||||
LT_TOOLS_VERS_AGE = 1
|
||||
|
||||
|
@ -24,7 +24,7 @@ AC_PREREQ([2.69])
|
||||
## NOTE: Do not forget to change the version number here when we do a
|
||||
## release!!!
|
||||
##
|
||||
AC_INIT([HDF5], [1.11.2], [help@hdfgroup.org])
|
||||
AC_INIT([HDF5], [1.10.3-snap4], [help@hdfgroup.org])
|
||||
|
||||
AC_CONFIG_SRCDIR([src/H5.c])
|
||||
AC_CONFIG_HEADERS([src/H5config.h])
|
||||
|
@ -214,7 +214,7 @@ import hdf.hdf5lib.structs.H5O_info_t;
|
||||
* exception handlers to print out the HDF-5 error stack.
|
||||
* <hr>
|
||||
*
|
||||
* @version HDF5 1.11.2 <BR>
|
||||
* @version HDF5 1.10.3 <BR>
|
||||
* <b>See also: <a href ="./hdf.hdf5lib.HDFArray.html"> hdf.hdf5lib.HDFArray</a> </b><BR>
|
||||
* <a href ="./hdf.hdf5lib.HDF5Constants.html"> hdf.hdf5lib.HDF5Constants</a><BR>
|
||||
* <a href ="./hdf.hdf5lib.HDF5CDataTypes.html"> hdf.hdf5lib.HDF5CDataTypes</a><BR>
|
||||
@ -237,7 +237,7 @@ public class H5 implements java.io.Serializable {
|
||||
*
|
||||
* Make sure to update the versions number when a different library is used.
|
||||
*/
|
||||
public final static int LIB_VERSION[] = { 1, 11, 2 };
|
||||
public final static int LIB_VERSION[] = { 1, 10, 3 };
|
||||
|
||||
public final static String H5PATH_PROPERTY_KEY = "hdf.hdf5lib.H5.hdf5lib";
|
||||
|
||||
|
@ -162,7 +162,7 @@ public class TestH5 {
|
||||
*/
|
||||
@Test
|
||||
public void testH5get_libversion() {
|
||||
int libversion[] = { 1, 11, 2 };
|
||||
int libversion[] = { 1, 10, 3 };
|
||||
|
||||
try {
|
||||
H5.H5get_libversion(libversion);
|
||||
@ -184,7 +184,7 @@ public class TestH5 {
|
||||
*/
|
||||
@Test
|
||||
public void testH5check_version() {
|
||||
int majnum = 1, minnum = 11, relnum = 2;
|
||||
int majnum = 1, minnum = 10, relnum = 3;
|
||||
|
||||
try {
|
||||
H5.H5check_version(majnum, minnum, relnum);
|
||||
|
@ -57,4 +57,4 @@ HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
|
||||
minor: Can't get value
|
||||
#003: (file name) line (number) in H5FD_get_class(): can't find object for ID
|
||||
major: Object atom
|
||||
minor: Unable to find atom information (already closed?)
|
||||
minor: Unable to find atom information (already closed?)
|
@ -1,4 +1,4 @@
|
||||
HDF5 version 1.11.2 currently under development
|
||||
HDF5 version 1.10.3-snap4 currently under development
|
||||
================================================================================
|
||||
|
||||
|
||||
@ -61,6 +61,7 @@ New Features
|
||||
----------------
|
||||
-
|
||||
|
||||
|
||||
C++ Library:
|
||||
------------
|
||||
-
|
||||
@ -201,6 +202,7 @@ Bug Fixes since HDF5-1.10.2 release
|
||||
|
||||
Testing
|
||||
-------
|
||||
-
|
||||
|
||||
Supported Platforms
|
||||
===================
|
||||
@ -249,6 +251,9 @@ Supported Platforms
|
||||
64-bit gfortran GNU Fortran (GCC) 7.1.0
|
||||
(swallow/kite) Intel icc/icpc/ifort version 17.0.2
|
||||
|
||||
Mac OS Sierra 10.12.6 Apple LLVM version 8.1.0 (clang/clang++-802.0.42)
|
||||
64-bit gfortran GNU Fortran (GCC) 7.1.0
|
||||
(swallow/kite) Intel icc/icpc/ifort version 17.0.2
|
||||
|
||||
Tested Configuration Features Summary
|
||||
=====================================
|
||||
@ -274,15 +279,13 @@ Windows 7 x64 Cygwin n y/n n y y y
|
||||
Windows 10 y y/y n y y y
|
||||
Windows 10 x64 y y/y n y y y
|
||||
Mac OS X Mountain Lion 10.8.5 64-bit n y/y n y y y
|
||||
Mac OS X Mavericks 10.9.5 64-bit n y/y n y y ?
|
||||
Mac OS X Yosemite 10.10.5 64-bit n y/y n y y ?
|
||||
Mac OS X El Capitan 10.11.6 64-bit n y/y n y y ?
|
||||
CentOS 6.7 Linux 2.6.18 x86_64 GNU n y/y n y y y
|
||||
CentOS 6.7 Linux 2.6.18 x86_64 Intel n y/y n y y y
|
||||
CentOS 6.7 Linux 2.6.32 x86_64 PGI n y/y n y y y
|
||||
Mac OS X Mavericks 10.9.5 64-bit n y/y n y y y
|
||||
Mac OS X Yosemite 10.10.5 64-bit n y/y n y y y
|
||||
Mac OS X El Capitan 10.11.6 64-bit n y/y n y y y
|
||||
CentOS 7.2 Linux 2.6.32 x86_64 PGI n y/y n y y y
|
||||
CentOS 7.2 Linux 2.6.32 x86_64 GNU y y/y y y y y
|
||||
CentOS 7.2 Linux 2.6.32 x86_64 Intel n y/y n y y y
|
||||
Linux 2.6.32-573.18.1.el6.ppc64 n y/n n y y y
|
||||
Linux 2.6.32-573.18.1.el6.ppc64 n y/y n y y y
|
||||
|
||||
|
||||
Platform Shared Shared Shared Thread-
|
||||
@ -299,10 +302,8 @@ Mac OS X Mountain Lion 10.8.5 64-bit y n y y
|
||||
Mac OS X Mavericks 10.9.5 64-bit y n y y
|
||||
Mac OS X Yosemite 10.10.5 64-bit y n y y
|
||||
Mac OS X El Capitan 10.11.6 64-bit y n y y
|
||||
CentOS 6.7 Linux 2.6.18 x86_64 GNU y y y y
|
||||
CentOS 6.7 Linux 2.6.18 x86_64 Intel y y y n
|
||||
CentOS 6.7 Linux 2.6.32 x86_64 PGI y y y n
|
||||
CentOS 7.2 Linux 2.6.32 x86_64 GNU y y y n
|
||||
CentOS 7.2 Linux 2.6.32 x86_64 PGI y y y n
|
||||
CentOS 7.2 Linux 2.6.32 x86_64 GNU y y y y
|
||||
CentOS 7.2 Linux 2.6.32 x86_64 Intel y y y n
|
||||
Linux 2.6.32-573.18.1.el6.ppc64 y y y n
|
||||
|
||||
@ -371,6 +372,12 @@ Known Problems
|
||||
images, but since this is a collective operation, a deadlock is possible
|
||||
if one or more processes do not participate.
|
||||
|
||||
Three tests fail with OpenMPI 3.0.0/GCC-7.2.0-2.29:
|
||||
testphdf5 (ecdsetw, selnone, cchunk1, cchunk3, cchunk4, and actualio)
|
||||
t_shapesame (sscontig2)
|
||||
t_pflush1/fails on exit
|
||||
The first two tests fail attempting collective writes.
|
||||
|
||||
Known problems in previous releases can be found in the HISTORY*.txt files
|
||||
in the HDF5 source. Please report any new problems found to
|
||||
help@hdfgroup.org.
|
||||
|
@ -1931,7 +1931,7 @@ H5D__chunk_file_cb(void H5_ATTR_UNUSED *elem, const H5T_t H5_ATTR_UNUSED *type,
|
||||
coords_in_chunk[u] = coords[u] - (scaled[u] * fm->layout->u.chunk.dim[u]);
|
||||
|
||||
/* Add point to file selection for chunk */
|
||||
if(H5S_select_elements(chunk_info->fspace, H5S_SELECT_APPEND, (size_t)1, coords_in_chunk) < 0)
|
||||
if(H5S_select_elements(chunk_info->fspace, H5S_SELECT_APPEND, (hsize_t)1, coords_in_chunk) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTSELECT, FAIL, "unable to select element")
|
||||
|
||||
/* Increment the number of elemented selected in chunk */
|
||||
@ -2011,7 +2011,7 @@ H5D__chunk_mem_cb(void H5_ATTR_UNUSED *elem, const H5T_t H5_ATTR_UNUSED *type, u
|
||||
} /* end else */
|
||||
|
||||
/* Move memory selection iterator to next element in selection */
|
||||
if(H5S_SELECT_ITER_NEXT(&fm->mem_iter, (size_t)1) < 0)
|
||||
if(H5S_SELECT_ITER_NEXT(&fm->mem_iter, (hsize_t)1) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTNEXT, FAIL, "unable to move to next iterator location")
|
||||
|
||||
done:
|
||||
|
@ -2506,7 +2506,7 @@ H5D__vlen_get_buf_size(void H5_ATTR_UNUSED *elem, hid_t type_id,
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_NOSPACE, FAIL, "can't resize tbuf")
|
||||
|
||||
/* Select point to read in */
|
||||
if(H5S_select_elements(vlen_bufsize->fspace, H5S_SELECT_SET, (size_t)1, point) < 0)
|
||||
if(H5S_select_elements(vlen_bufsize->fspace, H5S_SELECT_SET, (hsize_t)1, point) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTCREATE, FAIL, "can't select point")
|
||||
|
||||
/* Read in the point (with the custom VL memory allocator) */
|
||||
|
@ -2630,6 +2630,7 @@ H5D__chunk_redistribute_shared_chunks(const H5D_io_info_t *io_info, const H5D_ty
|
||||
int *send_displacements = NULL;
|
||||
int scatter_recvcount_int;
|
||||
int mpi_rank, mpi_size, mpi_code;
|
||||
hid_t fapl_id = -1; /* File access property list for H5S_encode() */
|
||||
herr_t ret_value = SUCCEED;
|
||||
|
||||
FUNC_ENTER_STATIC
|
||||
@ -2644,6 +2645,9 @@ H5D__chunk_redistribute_shared_chunks(const H5D_io_info_t *io_info, const H5D_ty
|
||||
if ((mpi_size = H5F_mpi_get_size(io_info->dset->oloc.file)) < 0)
|
||||
HGOTO_ERROR(H5E_IO, H5E_MPI, FAIL, "unable to obtain mpi size")
|
||||
|
||||
if((fapl_id = H5F_get_access_plist(io_info->dset->oloc.file, FALSE)) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get fapl")
|
||||
|
||||
if (*local_chunk_array_num_entries)
|
||||
if (NULL == (send_requests = (MPI_Request *) H5MM_malloc(*local_chunk_array_num_entries * sizeof(MPI_Request))))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "couldn't allocate send requests buffer")
|
||||
@ -2749,7 +2753,7 @@ H5D__chunk_redistribute_shared_chunks(const H5D_io_info_t *io_info, const H5D_ty
|
||||
/* Determine size of serialized chunk file dataspace, plus the size of
|
||||
* the data being written
|
||||
*/
|
||||
if (H5S_encode(chunk_info->fspace, &mod_data_p, &mod_data_size) < 0)
|
||||
if (H5S_encode(chunk_info->fspace, &mod_data_p, &mod_data_size, fapl_id) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTENCODE, FAIL, "unable to get encoded dataspace size")
|
||||
|
||||
if ((iter_nelmts = H5S_GET_SELECT_NPOINTS(chunk_info->mspace)) < 0)
|
||||
@ -2762,7 +2766,7 @@ H5D__chunk_redistribute_shared_chunks(const H5D_io_info_t *io_info, const H5D_ty
|
||||
|
||||
/* Serialize the chunk's file dataspace into the buffer */
|
||||
mod_data_p = mod_data[num_send_requests];
|
||||
if (H5S_encode(chunk_info->fspace, &mod_data_p, &mod_data_size) < 0)
|
||||
if (H5S_encode(chunk_info->fspace, &mod_data_p, &mod_data_size, fapl_id) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTENCODE, FAIL, "unable to encode dataspace")
|
||||
|
||||
/* Intialize iterator for memory selection */
|
||||
|
@ -417,6 +417,11 @@ H5D__virtual_store_layout(H5F_t *f, H5O_layout_t *layout)
|
||||
hsize_t tmp_nentries; /* Temp. variable for # of VDS entries */
|
||||
uint32_t chksum; /* Checksum for heap data */
|
||||
size_t i; /* Local index variable */
|
||||
H5P_genplist_t *fapl_plist; /* The file access property list */
|
||||
hid_t new_fapl_id; /* The file access property list ID */
|
||||
H5F_libver_t low_bound = H5F_LIBVER_V110; /* Set the low bound in fapl to latest */
|
||||
H5F_libver_t high_bound = H5F_LIBVER_V110; /* Set the high bound in fapl to latest */
|
||||
H5F_t *tmp_f = NULL; /* Pointer to faked file structure */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_PACKAGE
|
||||
@ -428,6 +433,24 @@ H5D__virtual_store_layout(H5F_t *f, H5O_layout_t *layout)
|
||||
|
||||
/* Create block if # of used entries > 0 */
|
||||
if(layout->storage.u.virt.list_nused > 0) {
|
||||
|
||||
/* Make a copy of the default file access property list */
|
||||
if(NULL == (fapl_plist = (H5P_genplist_t *)H5I_object(H5P_LST_FILE_ACCESS_ID_g)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
|
||||
|
||||
/* Set latest format in fapl_plist for virtual layout encoding */
|
||||
if(H5P_set(fapl_plist, H5F_ACS_LIBVER_LOW_BOUND_NAME, &low_bound) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set 'low' bound for library format versions")
|
||||
if(H5P_set(fapl_plist, H5F_ACS_LIBVER_HIGH_BOUND_NAME, &high_bound) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set 'high' bound for library format versions")
|
||||
/* Copy and return the fapl id */
|
||||
if((new_fapl_id = H5P_copy_plist(fapl_plist, FALSE)) < 0)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_CANTINIT, FAIL, "can't copy file access property list")
|
||||
|
||||
/* Allocate "fake" file structure with the fapl setting */
|
||||
if(NULL == (tmp_f = H5F_fake_alloc((uint8_t)0, new_fapl_id)))
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTALLOC, FAIL, "can't allocate fake file struct")
|
||||
|
||||
/* Allocate array for caching results of strlen */
|
||||
if(NULL == (str_size = (size_t *)H5MM_malloc(2 * layout->storage.u.virt.list_nused * sizeof(size_t))))
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_RESOURCE, FAIL, "unable to allocate string length array")
|
||||
@ -457,12 +480,12 @@ H5D__virtual_store_layout(H5F_t *f, H5O_layout_t *layout)
|
||||
block_size += str_size[(2 * i) + 1];
|
||||
|
||||
/* Source selection */
|
||||
if((select_serial_size = H5S_SELECT_SERIAL_SIZE(layout->storage.u.virt.list[i].source_select)) < 0)
|
||||
if((select_serial_size = H5S_SELECT_SERIAL_SIZE(layout->storage.u.virt.list[i].source_select, tmp_f)) < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTENCODE, FAIL, "unable to check dataspace selection size")
|
||||
block_size += (size_t)select_serial_size;
|
||||
|
||||
/* Virtual dataset selection */
|
||||
if((select_serial_size = H5S_SELECT_SERIAL_SIZE(layout->storage.u.virt.list[i].source_dset.virtual_select)) < 0)
|
||||
if((select_serial_size = H5S_SELECT_SERIAL_SIZE(layout->storage.u.virt.list[i].source_dset.virtual_select, tmp_f)) < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTENCODE, FAIL, "unable to check dataspace selection size")
|
||||
block_size += (size_t)select_serial_size;
|
||||
} /* end for */
|
||||
@ -499,11 +522,11 @@ H5D__virtual_store_layout(H5F_t *f, H5O_layout_t *layout)
|
||||
heap_block_p += str_size[(2 * i) + 1];
|
||||
|
||||
/* Source selection */
|
||||
if(H5S_SELECT_SERIALIZE(layout->storage.u.virt.list[i].source_select, &heap_block_p) < 0)
|
||||
if(H5S_SELECT_SERIALIZE(layout->storage.u.virt.list[i].source_select, &heap_block_p, tmp_f) < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, FAIL, "unable to serialize source selection")
|
||||
|
||||
/* Virtual selection */
|
||||
if(H5S_SELECT_SERIALIZE(layout->storage.u.virt.list[i].source_dset.virtual_select, &heap_block_p) < 0)
|
||||
if(H5S_SELECT_SERIALIZE(layout->storage.u.virt.list[i].source_dset.virtual_select, &heap_block_p, tmp_f) < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, FAIL, "unable to serialize virtual selection")
|
||||
} /* end for */
|
||||
|
||||
@ -517,9 +540,14 @@ H5D__virtual_store_layout(H5F_t *f, H5O_layout_t *layout)
|
||||
} /* end if */
|
||||
|
||||
done:
|
||||
/* Release fake file structure */
|
||||
if(tmp_f && H5F_fake_free(tmp_f) < 0)
|
||||
HDONE_ERROR(H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release fake file struct")
|
||||
|
||||
heap_block = (uint8_t *)H5MM_xfree(heap_block);
|
||||
str_size = (size_t *)H5MM_xfree(str_size);
|
||||
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5D__virtual_store_layout() */
|
||||
|
||||
|
@ -149,7 +149,7 @@ done:
|
||||
* Purpose: Enable switching between latest or non-latest format while
|
||||
* a file is open.
|
||||
* This is deprecated starting release 1.10.2 and is modified
|
||||
* to call the private H5F_set_libver_bounds() to set the
|
||||
* to call the private H5F__set_libver_bounds() to set the
|
||||
* bounds.
|
||||
*
|
||||
* Before release 1.10.2, the library supports only two
|
||||
|
@ -18,6 +18,8 @@
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Fpkg.h" /* File access */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5Pprivate.h" /* Property lists */
|
||||
|
||||
/* PRIVATE PROTOTYPES */
|
||||
|
||||
@ -40,9 +42,10 @@
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
H5F_t *
|
||||
H5F_fake_alloc(uint8_t sizeof_size)
|
||||
H5F_fake_alloc(uint8_t sizeof_size, hid_t fapl_id)
|
||||
{
|
||||
H5F_t *f = NULL; /* Pointer to fake file struct */
|
||||
H5P_genplist_t *plist; /* Property list */
|
||||
H5F_t *ret_value = NULL; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(NULL)
|
||||
@ -59,6 +62,16 @@ H5F_fake_alloc(uint8_t sizeof_size)
|
||||
else
|
||||
f->shared->sizeof_size = sizeof_size;
|
||||
|
||||
/* Set low/high bounds according to the setting in fapl_id */
|
||||
/* See H5F_new() in H5Fint.c */
|
||||
if(NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not file access property list")
|
||||
|
||||
if(H5P_get(plist, H5F_ACS_LIBVER_LOW_BOUND_NAME, &(f->shared->low_bound)) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get 'low' bound for library format versions")
|
||||
if(H5P_get(plist, H5F_ACS_LIBVER_HIGH_BOUND_NAME, &(f->shared->high_bound)) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get 'high' bound for library format versions")
|
||||
|
||||
/* Set return value */
|
||||
ret_value = f;
|
||||
|
||||
|
@ -2762,7 +2762,7 @@ H5F_set_store_msg_crt_idx(H5F_t *f, hbool_t flag)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5F_set_libver_bounds()
|
||||
* Function: H5F__set_libver_bounds()
|
||||
*
|
||||
* Purpose: Set the file's low and high bound to the input parameters
|
||||
* 'low' and 'high' respectively.
|
||||
@ -2818,7 +2818,7 @@ H5F__set_libver_bounds(H5F_t *f, H5F_libver_t low, H5F_libver_t high)
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5F_set_libver_bounds() */
|
||||
} /* H5F__set_libver_bounds() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
|
@ -821,7 +821,7 @@ H5_DLL void H5F_addr_decode_len(size_t addr_len, const uint8_t **pp, haddr_t *ad
|
||||
H5_DLL void H5F_sfile_assert_num(unsigned n);
|
||||
|
||||
/* Routines for creating & destroying "fake" file structures */
|
||||
H5_DLL H5F_t *H5F_fake_alloc(uint8_t sizeof_size);
|
||||
H5_DLL H5F_t *H5F_fake_alloc(uint8_t sizeof_size, hid_t fapl_id);
|
||||
H5_DLL herr_t H5F_fake_free(H5F_t *f);
|
||||
|
||||
/* Superblock related routines */
|
||||
|
@ -548,8 +548,10 @@ done:
|
||||
static herr_t
|
||||
H5O__layout_encode(H5F_t *f, hbool_t H5_ATTR_UNUSED disable_shared, uint8_t *p, const void *_mesg)
|
||||
{
|
||||
const H5O_layout_t *mesg = (const H5O_layout_t *) _mesg;
|
||||
unsigned u;
|
||||
const H5O_layout_t *mesg = (const H5O_layout_t *) _mesg;
|
||||
uint8_t *heap_block = NULL;
|
||||
size_t *str_size = NULL;
|
||||
unsigned u;
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_STATIC
|
||||
@ -685,6 +687,10 @@ H5O__layout_encode(H5F_t *f, hbool_t H5_ATTR_UNUSED disable_shared, uint8_t *p,
|
||||
} /* end switch */
|
||||
|
||||
done:
|
||||
|
||||
heap_block = (uint8_t *)H5MM_xfree(heap_block);
|
||||
str_size = (size_t *)H5MM_xfree(str_size);
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5O__layout_encode() */
|
||||
|
||||
|
@ -840,6 +840,10 @@ herr_t
|
||||
H5Pencode(hid_t plist_id, void *buf, size_t *nalloc)
|
||||
{
|
||||
H5P_genplist_t *plist; /* Property list to query */
|
||||
H5P_genplist_t *fapl_plist;
|
||||
hid_t new_fapl_id;
|
||||
H5F_libver_t low_bound = H5F_LIBVER_V110;
|
||||
H5F_libver_t high_bound = H5F_LIBVER_V110;
|
||||
herr_t ret_value = SUCCEED; /* return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -850,7 +854,7 @@ H5Pencode(hid_t plist_id, void *buf, size_t *nalloc)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
|
||||
|
||||
/* Call the internal encode routine */
|
||||
if((ret_value = H5P__encode(plist, TRUE, buf, nalloc)) < 0)
|
||||
if((ret_value = H5P__encode(plist, TRUE, buf, nalloc, H5P_FILE_ACCESS_DEFAULT)) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTENCODE, FAIL, "unable to encode property list");
|
||||
|
||||
done:
|
||||
|
@ -121,7 +121,7 @@ static herr_t H5P__encode_chunk_cache_nbytes(const void *value, void **_pp,
|
||||
static herr_t H5P__decode_chunk_cache_nbytes(const void **_pp, void *_value);
|
||||
|
||||
/* Property list callbacks */
|
||||
static herr_t H5P__dacc_vds_view_enc(const void *value, void **pp, size_t *size);
|
||||
static herr_t H5P__dacc_vds_view_enc(const void *value, void **pp, size_t *size, void *udata);
|
||||
static herr_t H5P__dacc_vds_view_dec(const void **pp, void *value);
|
||||
static herr_t H5P__dapl_vds_file_pref_set(hid_t prop_id, const char* name, size_t size, void* value);
|
||||
static herr_t H5P__dapl_vds_file_pref_get(hid_t prop_id, const char* name, size_t size, void* value);
|
||||
@ -135,7 +135,7 @@ static herr_t H5P__dapl_vds_file_pref_close(const char* name, size_t size, void*
|
||||
/* Property list callbacks */
|
||||
static herr_t H5P__dapl_efile_pref_set(hid_t prop_id, const char* name, size_t size, void* value);
|
||||
static herr_t H5P__dapl_efile_pref_get(hid_t prop_id, const char* name, size_t size, void* value);
|
||||
static herr_t H5P__dapl_efile_pref_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__dapl_efile_pref_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__dapl_efile_pref_dec(const void **_pp, void *value);
|
||||
static herr_t H5P__dapl_efile_pref_del(hid_t prop_id, const char* name, size_t size, void* value);
|
||||
static herr_t H5P__dapl_efile_pref_copy(const char* name, size_t size, void* value);
|
||||
@ -562,7 +562,7 @@ H5P__dapl_efile_pref_get(hid_t H5_ATTR_UNUSED prop_id, const char H5_ATTR_UNUSED
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__dapl_efile_pref_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__dapl_efile_pref_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const char *efile_pref = *(const char * const *)value;
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -1157,7 +1157,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__dacc_vds_view_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__dacc_vds_view_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5D_vds_view_t *view = (const H5D_vds_view_t *)value; /* Create local alias for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
|
@ -147,7 +147,7 @@ static herr_t H5P__dcrt_reg_prop(H5P_genclass_t *pclass);
|
||||
/* Property callbacks */
|
||||
static herr_t H5P__dcrt_layout_set(hid_t prop_id, const char *name, size_t size, void *value);
|
||||
static herr_t H5P__dcrt_layout_get(hid_t prop_id, const char *name, size_t size, void *value);
|
||||
static herr_t H5P__dcrt_layout_enc(const void *value, void **pp, size_t *size);
|
||||
static herr_t H5P__dcrt_layout_enc(const void *value, void **pp, size_t *size, void *udata);
|
||||
static herr_t H5P__dcrt_layout_dec(const void **pp, void *value);
|
||||
static herr_t H5P__dcrt_layout_del(hid_t prop_id, const char *name, size_t size, void *value);
|
||||
static herr_t H5P__dcrt_layout_copy(const char *name, size_t size, void *value);
|
||||
@ -155,14 +155,14 @@ static int H5P__dcrt_layout_cmp(const void *value1, const void *value2, size_t s
|
||||
static herr_t H5P__dcrt_layout_close(const char *name, size_t size, void *value);
|
||||
static herr_t H5P__dcrt_fill_value_set(hid_t prop_id, const char *name, size_t size, void *value);
|
||||
static herr_t H5P__dcrt_fill_value_get(hid_t prop_id, const char *name, size_t size, void *value);
|
||||
static herr_t H5P__dcrt_fill_value_enc(const void *value, void **pp, size_t *size);
|
||||
static herr_t H5P__dcrt_fill_value_enc(const void *value, void **pp, size_t *size, void *udata);
|
||||
static herr_t H5P__dcrt_fill_value_dec(const void **pp, void *value);
|
||||
static herr_t H5P__dcrt_fill_value_del(hid_t prop_id, const char *name, size_t size, void *value);
|
||||
static herr_t H5P__dcrt_fill_value_copy(const char *name, size_t size, void *value);
|
||||
static herr_t H5P__dcrt_fill_value_close(const char *name, size_t size, void *value);
|
||||
static herr_t H5P__dcrt_ext_file_list_set(hid_t prop_id, const char *name, size_t size, void *value);
|
||||
static herr_t H5P__dcrt_ext_file_list_get(hid_t prop_id, const char *name, size_t size, void *value);
|
||||
static herr_t H5P__dcrt_ext_file_list_enc(const void *value, void **pp, size_t *size);
|
||||
static herr_t H5P__dcrt_ext_file_list_enc(const void *value, void **pp, size_t *size, void *udata);
|
||||
static herr_t H5P__dcrt_ext_file_list_dec(const void **pp, void *value);
|
||||
static herr_t H5P__dcrt_ext_file_list_del(hid_t prop_id, const char *name, size_t size, void *value);
|
||||
static herr_t H5P__dcrt_ext_file_list_copy(const char *name, size_t size, void *value);
|
||||
@ -367,21 +367,41 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__dcrt_layout_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__dcrt_layout_enc(const void *value, void **_pp, size_t *size, void *_udata)
|
||||
{
|
||||
const H5O_layout_t *layout = (const H5O_layout_t *)value; /* Create local aliases for values */
|
||||
H5P_enc_cb_info_t *udata = (H5P_enc_cb_info_t *)_udata; /* User data for encode callback */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
uint8_t *tmp_p;
|
||||
size_t tmp_size;
|
||||
size_t u; /* Local index variable */
|
||||
H5P_genplist_t *fapl_plist; /* The file access property list */
|
||||
hid_t new_fapl_id; /* The file access property list ID */
|
||||
H5F_libver_t low_bound = H5F_LIBVER_V110; /* Set the low bound in fapl to latest */
|
||||
H5F_libver_t high_bound = H5F_LIBVER_V110; /* Set the high bound in fapl to latest */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
|
||||
FUNC_ENTER_STATIC
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(layout);
|
||||
HDassert(size);
|
||||
|
||||
/* Make a copy of the default file access property list */
|
||||
if(NULL == (fapl_plist = (H5P_genplist_t *)H5I_object(H5P_LST_FILE_ACCESS_ID_g)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
|
||||
|
||||
/* Set latest format in fapl_plist */
|
||||
/* This will eventually be used by VDS to encode datasets via H5S_encode() */
|
||||
if(H5P_set(fapl_plist, H5F_ACS_LIBVER_LOW_BOUND_NAME, &low_bound) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set 'low' bound for library format versions")
|
||||
if(H5P_set(fapl_plist, H5F_ACS_LIBVER_HIGH_BOUND_NAME, &high_bound) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set 'high' bound for library format versions")
|
||||
|
||||
if((new_fapl_id = H5P_copy_plist(fapl_plist, FALSE)) < 0)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_CANTINIT, FAIL, "can't copy file access property list")
|
||||
|
||||
if(NULL != *pp) {
|
||||
/* Encode layout type */
|
||||
*(*pp)++ = (uint8_t)layout->type;
|
||||
@ -427,14 +447,15 @@ H5P__dcrt_layout_enc(const void *value, void **_pp, size_t *size)
|
||||
* list before we get here. */
|
||||
tmp_size = (size_t)-1;
|
||||
tmp_p = *pp;
|
||||
if(H5S_encode(layout->storage.u.virt.list[u].source_select, pp, &tmp_size) < 0)
|
||||
|
||||
if(H5S_encode(layout->storage.u.virt.list[u].source_select, pp, &tmp_size, new_fapl_id) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTENCODE, FAIL, "unable to serialize source selection")
|
||||
*size += (size_t)(*pp - tmp_p);
|
||||
|
||||
/* Virtual dataset selection. Same notes as above apply. */
|
||||
tmp_size = (size_t)-1;
|
||||
tmp_p = *pp;
|
||||
if(H5S_encode(layout->storage.u.virt.list[u].source_dset.virtual_select, pp, &tmp_size) < 0)
|
||||
if(H5S_encode(layout->storage.u.virt.list[u].source_dset.virtual_select, pp, &tmp_size, new_fapl_id) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTENCODE, FAIL, "unable to serialize virtual selection")
|
||||
*size += (size_t)(*pp - tmp_p);
|
||||
} /* end for */
|
||||
@ -467,14 +488,14 @@ H5P__dcrt_layout_enc(const void *value, void **_pp, size_t *size)
|
||||
/* Source selection */
|
||||
tmp_size = (size_t)0;
|
||||
tmp_p = NULL;
|
||||
if(H5S_encode(layout->storage.u.virt.list[u].source_select, &tmp_p, &tmp_size) < 0)
|
||||
if(H5S_encode(layout->storage.u.virt.list[u].source_select, &tmp_p, &tmp_size, new_fapl_id) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTENCODE, FAIL, "unable to serialize source selection")
|
||||
*size += tmp_size;
|
||||
|
||||
/* Virtual dataset selection */
|
||||
tmp_size = (size_t)0;
|
||||
tmp_p = NULL;
|
||||
if(H5S_encode(layout->storage.u.virt.list[u].source_dset.virtual_select, &tmp_p, &tmp_size) < 0)
|
||||
if(H5S_encode(layout->storage.u.virt.list[u].source_dset.virtual_select, &tmp_p, &tmp_size, new_fapl_id) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTENCODE, FAIL, "unable to serialize virtual selection")
|
||||
*size += tmp_size;
|
||||
} /* end for */
|
||||
@ -980,7 +1001,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__dcrt_fill_value_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__dcrt_fill_value_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5O_fill_t *fill = (const H5O_fill_t *)value; /* Create local aliases for values */
|
||||
size_t dt_size = 0; /* Size of encoded datatype */
|
||||
@ -1383,7 +1404,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__dcrt_ext_file_list_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__dcrt_ext_file_list_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5O_efl_t *efl = (const H5O_efl_t *)value; /* Create local aliases for values */
|
||||
size_t len = 0; /* String length of slot name */
|
||||
|
@ -172,21 +172,21 @@
|
||||
static herr_t H5P__dxfr_reg_prop(H5P_genclass_t *pclass);
|
||||
|
||||
/* Property list callbacks */
|
||||
static herr_t H5P__dxfr_bkgr_buf_type_enc(const void *value, void **pp, size_t *size);
|
||||
static herr_t H5P__dxfr_bkgr_buf_type_enc(const void *value, void **pp, size_t *size, void *udata);
|
||||
static herr_t H5P__dxfr_bkgr_buf_type_dec(const void **pp, void *value);
|
||||
static herr_t H5P__dxfr_btree_split_ratio_enc(const void *value, void **pp, size_t *size);
|
||||
static herr_t H5P__dxfr_btree_split_ratio_enc(const void *value, void **pp, size_t *size, void *udata);
|
||||
static herr_t H5P__dxfr_btree_split_ratio_dec(const void **pp, void *value);
|
||||
static herr_t H5P__dxfr_io_xfer_mode_enc(const void *value, void **pp, size_t *size);
|
||||
static herr_t H5P__dxfr_io_xfer_mode_enc(const void *value, void **pp, size_t *size, void *udata);
|
||||
static herr_t H5P__dxfr_io_xfer_mode_dec(const void **pp, void *value);
|
||||
static herr_t H5P__dxfr_mpio_collective_opt_enc(const void *value, void **pp, size_t *size);
|
||||
static herr_t H5P__dxfr_mpio_collective_opt_enc(const void *value, void **pp, size_t *size, void *udata);
|
||||
static herr_t H5P__dxfr_mpio_collective_opt_dec(const void **pp, void *value);
|
||||
static herr_t H5P__dxfr_mpio_chunk_opt_hard_enc(const void *value, void **pp, size_t *size);
|
||||
static herr_t H5P__dxfr_mpio_chunk_opt_hard_enc(const void *value, void **pp, size_t *size, void *udata);
|
||||
static herr_t H5P__dxfr_mpio_chunk_opt_hard_dec(const void **pp, void *value);
|
||||
static herr_t H5P__dxfr_edc_enc(const void *value, void **pp, size_t *size);
|
||||
static herr_t H5P__dxfr_edc_enc(const void *value, void **pp, size_t *size, void *udata);
|
||||
static herr_t H5P__dxfr_edc_dec(const void **pp, void *value);
|
||||
static herr_t H5P__dxfr_xform_set(hid_t prop_id, const char* name, size_t size, void* value);
|
||||
static herr_t H5P__dxfr_xform_get(hid_t prop_id, const char* name, size_t size, void* value);
|
||||
static herr_t H5P__dxfr_xform_enc(const void *value, void **pp, size_t *size);
|
||||
static herr_t H5P__dxfr_xform_enc(const void *value, void **pp, size_t *size, void *udata);
|
||||
static herr_t H5P__dxfr_xform_dec(const void **pp, void *value);
|
||||
static herr_t H5P__dxfr_xform_del(hid_t prop_id, const char* name, size_t size, void* value);
|
||||
static herr_t H5P__dxfr_xform_copy(const char* name, size_t size, void* value);
|
||||
@ -421,7 +421,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__dxfr_bkgr_buf_type_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__dxfr_bkgr_buf_type_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5T_bkg_t *bkgr_buf_type = (const H5T_bkg_t *)value; /* Create local alias for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -494,7 +494,7 @@ H5P__dxfr_bkgr_buf_type_dec(const void **_pp, void *_value)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__dxfr_btree_split_ratio_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__dxfr_btree_split_ratio_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const double *btree_split_ratio = (const double *)value; /* Create local alias for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -655,7 +655,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__dxfr_xform_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__dxfr_xform_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5Z_data_xform_t *data_xform_prop = *(const H5Z_data_xform_t * const *)value; /* Create local alias for values */
|
||||
const char *pexp = NULL; /* Pointer to transform expression */
|
||||
@ -1743,7 +1743,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__dxfr_io_xfer_mode_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__dxfr_io_xfer_mode_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5FD_mpio_xfer_t *xfer_mode = (const H5FD_mpio_xfer_t *)value; /* Create local alias for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -1816,7 +1816,7 @@ H5P__dxfr_io_xfer_mode_dec(const void **_pp, void *_value)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__dxfr_mpio_collective_opt_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__dxfr_mpio_collective_opt_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5FD_mpio_collective_opt_t *coll_opt = (const H5FD_mpio_collective_opt_t *)value; /* Create local alias for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -1889,7 +1889,7 @@ H5P__dxfr_mpio_collective_opt_dec(const void **_pp, void *_value)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__dxfr_mpio_chunk_opt_hard_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__dxfr_mpio_chunk_opt_hard_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5FD_mpio_chunk_opt_t *chunk_opt = (const H5FD_mpio_chunk_opt_t *)value; /* Create local alias for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -2074,7 +2074,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__dxfr_edc_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__dxfr_edc_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5Z_EDC_t *check = (const H5Z_EDC_t *)value; /* Create local alias for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
|
@ -49,9 +49,10 @@
|
||||
|
||||
/* Typedef for iterator when encoding a property list */
|
||||
typedef struct {
|
||||
hbool_t encode; /* Whether the property list should be encoded */
|
||||
size_t *enc_size_ptr; /* Pointer to size of encoded buffer */
|
||||
void **pp; /* Pointer to encoding buffer pointer */
|
||||
hbool_t encode; /* Whether the property list should be encoded */
|
||||
size_t *enc_size_ptr; /* Pointer to size of encoded buffer */
|
||||
void **pp; /* Pointer to encoding buffer pointer */
|
||||
hid_t fapl_id; /* File access property list */
|
||||
} H5P_enc_iter_ud_t;
|
||||
|
||||
|
||||
@ -90,7 +91,7 @@ typedef struct {
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5P__encode_size_t(const void *value, void **_pp, size_t *size)
|
||||
H5P__encode_size_t(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
uint64_t enc_value = (uint64_t)*(const size_t *)value; /* Property value to encode */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -132,7 +133,7 @@ H5P__encode_size_t(const void *value, void **_pp, size_t *size)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5P__encode_hsize_t(const void *value, void **_pp, size_t *size)
|
||||
H5P__encode_hsize_t(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
uint64_t enc_value = (uint64_t)*(const hsize_t *)value; /* Property value to encode */
|
||||
unsigned enc_size = H5VM_limit_enc_size(enc_value); /* Size of encoded property */
|
||||
@ -173,7 +174,7 @@ H5P__encode_hsize_t(const void *value, void **_pp, size_t *size)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5P__encode_unsigned(const void *value, void **_pp, size_t *size)
|
||||
H5P__encode_unsigned(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
|
||||
@ -212,7 +213,7 @@ H5P__encode_unsigned(const void *value, void **_pp, size_t *size)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5P__encode_uint8_t(const void *value, void **_pp, size_t *size)
|
||||
H5P__encode_uint8_t(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
|
||||
@ -248,7 +249,7 @@ H5P__encode_uint8_t(const void *value, void **_pp, size_t *size)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5P__encode_hbool_t(const void *value, void **_pp, size_t *size)
|
||||
H5P__encode_hbool_t(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
|
||||
@ -283,7 +284,7 @@ H5P__encode_hbool_t(const void *value, void **_pp, size_t *size)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5P__encode_double(const void *value, void **_pp, size_t *size)
|
||||
H5P__encode_double(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
|
||||
@ -332,7 +333,8 @@ static int
|
||||
H5P__encode_cb(H5P_genprop_t *prop, void *_udata)
|
||||
{
|
||||
H5P_enc_iter_ud_t *udata = (H5P_enc_iter_ud_t *)_udata; /* Pointer to user data */
|
||||
int ret_value = H5_ITER_CONT; /* Return value */
|
||||
H5P_enc_cb_info_t cb_udata; /* User data for property iteration callback */
|
||||
int ret_value = H5_ITER_CONT; /* Return value */
|
||||
|
||||
FUNC_ENTER_STATIC
|
||||
|
||||
@ -355,7 +357,8 @@ H5P__encode_cb(H5P_genprop_t *prop, void *_udata)
|
||||
|
||||
/* Encode (or not, if *(udata->pp) is NULL) the property value */
|
||||
prop_value_len = 0;
|
||||
if((prop->encode)(prop->value, udata->pp, &prop_value_len) < 0)
|
||||
cb_udata.fapl_id = udata->fapl_id;
|
||||
if((prop->encode)(prop->value, udata->pp, &prop_value_len, &cb_udata) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTENCODE, H5_ITER_ERROR, "property encoding routine failed")
|
||||
*(udata->enc_size_ptr) += prop_value_len;
|
||||
} /* end if */
|
||||
@ -390,7 +393,7 @@ done:
|
||||
--------------------------------------------------------------------------*/
|
||||
herr_t
|
||||
H5P__encode(const H5P_genplist_t *plist, hbool_t enc_all_prop, void *buf,
|
||||
size_t *nalloc)
|
||||
size_t *nalloc, hid_t fapl_id)
|
||||
{
|
||||
H5P_enc_iter_ud_t udata; /* User data for property iteration callback */
|
||||
uint8_t *p = (uint8_t *)buf; /* Temporary pointer to encoding buffer */
|
||||
@ -425,6 +428,7 @@ H5P__encode(const H5P_genplist_t *plist, hbool_t enc_all_prop, void *buf,
|
||||
udata.encode = encode;
|
||||
udata.enc_size_ptr = &encode_size;
|
||||
udata.pp = (void **)&p;
|
||||
udata.fapl_id = fapl_id;
|
||||
|
||||
/* Iterate over all properties in property list, encoding them */
|
||||
idx = 0;
|
||||
|
@ -297,18 +297,18 @@ static int H5P__facc_file_image_info_cmp(const void *value1, const void *value2,
|
||||
static herr_t H5P__facc_file_image_info_close(const char *name, size_t size, void *value);
|
||||
|
||||
/* encode & decode callbacks */
|
||||
static herr_t H5P__facc_cache_config_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__facc_cache_config_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__facc_cache_config_dec(const void **_pp, void *value);
|
||||
static int H5P__facc_cache_config_cmp(const void *value1, const void *value2, size_t size);
|
||||
static herr_t H5P__facc_fclose_degree_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__facc_fclose_degree_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__facc_fclose_degree_dec(const void **pp, void *value);
|
||||
static herr_t H5P__facc_multi_type_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__facc_multi_type_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__facc_multi_type_dec(const void **_pp, void *value);
|
||||
static herr_t H5P__facc_libver_type_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__facc_libver_type_dec(const void **_pp, void *value);
|
||||
|
||||
/* Metadata cache log location property callbacks */
|
||||
static herr_t H5P_facc_mdc_log_location_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P_facc_mdc_log_location_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P_facc_mdc_log_location_dec(const void **_pp, void *value);
|
||||
static herr_t H5P_facc_mdc_log_location_del(hid_t prop_id, const char *name, size_t size, void *value);
|
||||
static herr_t H5P_facc_mdc_log_location_copy(const char *name, size_t size, void *value);
|
||||
@ -317,7 +317,7 @@ static herr_t H5P_facc_mdc_log_location_close(const char *name, size_t size, voi
|
||||
|
||||
/* Metadata cache image property callbacks */
|
||||
static int H5P__facc_cache_image_config_cmp(const void *_config1, const void *_config2, size_t H5_ATTR_UNUSED size);
|
||||
static herr_t H5P__facc_cache_image_config_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__facc_cache_image_config_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__facc_cache_image_config_dec(const void **_pp, void *_value);
|
||||
|
||||
|
||||
@ -3019,7 +3019,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__facc_cache_image_config_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__facc_cache_image_config_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5AC_cache_image_config_t *config = (const H5AC_cache_image_config_t *)value; /* Create local aliases for value */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -3445,7 +3445,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__facc_cache_config_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__facc_cache_config_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5AC_cache_config_t *config = (const H5AC_cache_config_t *)value; /* Create local aliases for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -3725,7 +3725,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__facc_fclose_degree_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__facc_fclose_degree_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5F_close_degree_t *fclose_degree = (const H5F_close_degree_t *)value; /* Create local alias for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -3798,7 +3798,7 @@ H5P__facc_fclose_degree_dec(const void **_pp, void *_value)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__facc_multi_type_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__facc_multi_type_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5FD_mem_t *type = (const H5FD_mem_t *)value; /* Create local alias for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -4298,7 +4298,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P_facc_mdc_log_location_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P_facc_mdc_log_location_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const char *log_location = *(const char * const *)value;
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -4598,7 +4598,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5P__encode_coll_md_read_flag_t(const void *value, void **_pp, size_t *size)
|
||||
H5P__encode_coll_md_read_flag_t(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5P_coll_md_read_flag_t *coll_md_read_flag = (const H5P_coll_md_read_flag_t *)value;
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
|
@ -132,13 +132,13 @@
|
||||
static herr_t H5P_fcrt_reg_prop(H5P_genclass_t *pclass);
|
||||
|
||||
/* property callbacks */
|
||||
static herr_t H5P__fcrt_btree_rank_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__fcrt_btree_rank_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__fcrt_btree_rank_dec(const void **_pp, void *value);
|
||||
static herr_t H5P__fcrt_shmsg_index_types_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__fcrt_shmsg_index_types_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__fcrt_shmsg_index_types_dec(const void **_pp, void *value);
|
||||
static herr_t H5P__fcrt_shmsg_index_minsize_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__fcrt_shmsg_index_minsize_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__fcrt_shmsg_index_minsize_dec(const void **_pp, void *value);
|
||||
static herr_t H5P__fcrt_fspace_strategy_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__fcrt_fspace_strategy_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__fcrt_fspace_strategy_dec(const void **_pp, void *_value);
|
||||
|
||||
|
||||
@ -722,7 +722,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__fcrt_btree_rank_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__fcrt_btree_rank_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const unsigned *btree_k = (const unsigned *)value; /* Create local alias for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -1013,7 +1013,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__fcrt_shmsg_index_types_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__fcrt_shmsg_index_types_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const unsigned *type_flags = (const unsigned *)value; /* Create local alias for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -1106,7 +1106,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__fcrt_shmsg_index_minsize_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__fcrt_shmsg_index_minsize_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const unsigned *minsizes = (const unsigned *)value; /* Create local alias for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -1388,7 +1388,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__fcrt_fspace_strategy_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__fcrt_fspace_strategy_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5F_fspace_strategy_t *strategy = (const H5F_fspace_strategy_t *)value; /* Create local alias for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
|
@ -69,9 +69,9 @@
|
||||
static herr_t H5P__gcrt_reg_prop(H5P_genclass_t *pclass);
|
||||
|
||||
/* Property callbacks */
|
||||
static herr_t H5P__gcrt_group_info_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__gcrt_group_info_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__gcrt_group_info_dec(const void **_pp, void *value);
|
||||
static herr_t H5P__gcrt_link_info_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__gcrt_link_info_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__gcrt_link_info_dec(const void **_pp, void *value);
|
||||
|
||||
|
||||
@ -546,7 +546,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__gcrt_group_info_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__gcrt_group_info_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5O_ginfo_t *ginfo = (const H5O_ginfo_t *)value; /* Create local aliases for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
@ -634,7 +634,7 @@ H5P__gcrt_group_info_dec(const void **_pp, void *_value)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__gcrt_link_info_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__gcrt_link_info_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5O_linfo_t *linfo = (const H5O_linfo_t *)value; /* Create local aliases for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
|
@ -114,7 +114,7 @@ static herr_t H5P__lacc_reg_prop(H5P_genclass_t *pclass);
|
||||
/* Property list callbacks */
|
||||
static herr_t H5P__lacc_elink_pref_set(hid_t prop_id, const char* name, size_t size, void* value);
|
||||
static herr_t H5P__lacc_elink_pref_get(hid_t prop_id, const char* name, size_t size, void* value);
|
||||
static herr_t H5P__lacc_elink_pref_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__lacc_elink_pref_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__lacc_elink_pref_dec(const void **_pp, void *value);
|
||||
static herr_t H5P__lacc_elink_pref_del(hid_t prop_id, const char* name, size_t size, void* value);
|
||||
static herr_t H5P__lacc_elink_pref_copy(const char* name, size_t size, void* value);
|
||||
@ -122,7 +122,7 @@ static int H5P__lacc_elink_pref_cmp(const void *value1, const void *value2, size
|
||||
static herr_t H5P__lacc_elink_pref_close(const char* name, size_t size, void* value);
|
||||
static herr_t H5P__lacc_elink_fapl_set(hid_t prop_id, const char* name, size_t size, void* value);
|
||||
static herr_t H5P__lacc_elink_fapl_get(hid_t prop_id, const char* name, size_t size, void* value);
|
||||
static herr_t H5P__lacc_elink_fapl_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__lacc_elink_fapl_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__lacc_elink_fapl_dec(const void **_pp, void *value);
|
||||
static herr_t H5P__lacc_elink_fapl_del(hid_t prop_id, const char* name, size_t size, void* value);
|
||||
static herr_t H5P__lacc_elink_fapl_copy(const char* name, size_t size, void* value);
|
||||
@ -338,13 +338,14 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__lacc_elink_fapl_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__lacc_elink_fapl_enc(const void *value, void **_pp, size_t *size, void *_udata)
|
||||
{
|
||||
const hid_t *elink_fapl = (const hid_t *)value; /* Property to encode */
|
||||
const hid_t *elink_fapl = (const hid_t *)value; /* Property to encode */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
H5P_enc_cb_info_t *udata = (H5P_enc_cb_info_t *)_udata; /* User data for encode callback */
|
||||
H5P_genplist_t *fapl_plist; /* Pointer to property list */
|
||||
hbool_t non_default_fapl = FALSE; /* Whether the FAPL is non-default */
|
||||
size_t fapl_size = 0; /* FAPL's encoded size */
|
||||
size_t fapl_size = 0; /* FAPL's encoded size */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_STATIC
|
||||
@ -364,7 +365,7 @@ H5P__lacc_elink_fapl_enc(const void *value, void **_pp, size_t *size)
|
||||
/* Encode the property list, if non-default */
|
||||
/* (if *pp == NULL, will only compute the size) */
|
||||
if(non_default_fapl) {
|
||||
if(H5P__encode(fapl_plist, TRUE, NULL, &fapl_size) < 0)
|
||||
if(H5P__encode(fapl_plist, TRUE, NULL, &fapl_size, udata->fapl_id) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTENCODE, FAIL, "can't encode property list")
|
||||
|
||||
if(*pp) {
|
||||
@ -379,7 +380,7 @@ H5P__lacc_elink_fapl_enc(const void *value, void **_pp, size_t *size)
|
||||
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
|
||||
|
||||
/* encode the plist */
|
||||
if(H5P__encode(fapl_plist, TRUE, *pp, &fapl_size) < 0)
|
||||
if(H5P__encode(fapl_plist, TRUE, *pp, &fapl_size, udata->fapl_id) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTENCODE, FAIL, "can't encode property list")
|
||||
|
||||
*pp += fapl_size;
|
||||
@ -688,7 +689,7 @@ H5P__lacc_elink_pref_get(hid_t H5_ATTR_UNUSED prop_id, const char H5_ATTR_UNUSED
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__lacc_elink_pref_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__lacc_elink_pref_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const char *elink_pref = *(const char * const *)value;
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
|
@ -90,7 +90,7 @@
|
||||
static herr_t H5P__ocrt_reg_prop(H5P_genclass_t *pclass);
|
||||
|
||||
/* Property callbacks */
|
||||
static herr_t H5P__ocrt_pipeline_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__ocrt_pipeline_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__ocrt_pipeline_dec(const void **_pp, void *value);
|
||||
static herr_t H5P__ocrt_pipeline_set(hid_t prop_id, const char *name, size_t size, void *value);
|
||||
static herr_t H5P__ocrt_pipeline_get(hid_t prop_id, const char *name, size_t size, void *value);
|
||||
@ -1459,7 +1459,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__ocrt_pipeline_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__ocrt_pipeline_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5O_pline_t *pline = (const H5O_pline_t *)value;
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
|
16
src/H5Ppkg.h
16
src/H5Ppkg.h
@ -176,21 +176,21 @@ H5_DLL hid_t H5P__new_plist_of_type(H5P_plist_type_t type);
|
||||
|
||||
/* Encode/decode routines */
|
||||
H5_DLL herr_t H5P__encode(const H5P_genplist_t *plist, hbool_t enc_all_prop,
|
||||
void *buf, size_t *nalloc);
|
||||
void *buf, size_t *nalloc, hid_t fapl_id);
|
||||
H5_DLL hid_t H5P__decode(const void *buf);
|
||||
H5_DLL herr_t H5P__encode_hsize_t(const void *value, void **_pp, size_t *size);
|
||||
H5_DLL herr_t H5P__encode_size_t(const void *value, void **_pp, size_t *size);
|
||||
H5_DLL herr_t H5P__encode_unsigned(const void *value, void **_pp, size_t *size);
|
||||
H5_DLL herr_t H5P__encode_uint8_t(const void *value, void **_pp, size_t *size);
|
||||
H5_DLL herr_t H5P__encode_hbool_t(const void *value, void **_pp, size_t *size);
|
||||
H5_DLL herr_t H5P__encode_double(const void *value, void **_pp, size_t *size);
|
||||
H5_DLL herr_t H5P__encode_hsize_t(const void *value, void **_pp, size_t *size, void *udata);
|
||||
H5_DLL herr_t H5P__encode_size_t(const void *value, void **_pp, size_t *size, void *udata);
|
||||
H5_DLL herr_t H5P__encode_unsigned(const void *value, void **_pp, size_t *size, void *udata);
|
||||
H5_DLL herr_t H5P__encode_uint8_t(const void *value, void **_pp, size_t *size, void *udata);
|
||||
H5_DLL herr_t H5P__encode_hbool_t(const void *value, void **_pp, size_t *size, void *udata);
|
||||
H5_DLL herr_t H5P__encode_double(const void *value, void **_pp, size_t *size, void *udat);
|
||||
H5_DLL herr_t H5P__decode_hsize_t(const void **_pp, void *value);
|
||||
H5_DLL herr_t H5P__decode_size_t(const void **_pp, void *value);
|
||||
H5_DLL herr_t H5P__decode_unsigned(const void **_pp, void *value);
|
||||
H5_DLL herr_t H5P__decode_uint8_t(const void **_pp, void *value);
|
||||
H5_DLL herr_t H5P__decode_hbool_t(const void **_pp, void *value);
|
||||
H5_DLL herr_t H5P__decode_double(const void **_pp, void *value);
|
||||
H5_DLL herr_t H5P__encode_coll_md_read_flag_t(const void *value, void **_pp, size_t *size);
|
||||
H5_DLL herr_t H5P__encode_coll_md_read_flag_t(const void *value, void **_pp, size_t *size, void *udata);
|
||||
H5_DLL herr_t H5P__decode_coll_md_read_flag_t(const void **_pp, void *value);
|
||||
|
||||
/* Private OCPL routines */
|
||||
|
@ -84,6 +84,16 @@ typedef enum H5P_plist_type_t {
|
||||
/* Function pointer for library classes with properties to register */
|
||||
typedef herr_t (*H5P_reg_prop_func_t)(H5P_genclass_t *pclass);
|
||||
|
||||
/* Move encode/decode callback typedefs from H5Ppublic.h: not exposed to user */
|
||||
/* Add a parameter to encode callback */
|
||||
typedef herr_t (*H5P_prp_encode_func_t)(const void *value, void **buf, size_t *size, void *udata);
|
||||
typedef herr_t (*H5P_prp_decode_func_t)(const void **buf, void *value);
|
||||
|
||||
/* User data passed to encode callback */
|
||||
typedef struct H5P_enc_cb_info_t {
|
||||
hid_t fapl_id; /* File access property list */
|
||||
} H5P_enc_cb_info_t;
|
||||
|
||||
/*
|
||||
* Each library property list class has a variable of this type that contains
|
||||
* class variables and methods used to initialize the class.
|
||||
|
@ -116,8 +116,6 @@ typedef herr_t (*H5P_prp_cb2_t)(hid_t prop_id, const char *name, size_t size, vo
|
||||
typedef H5P_prp_cb1_t H5P_prp_create_func_t;
|
||||
typedef H5P_prp_cb2_t H5P_prp_set_func_t;
|
||||
typedef H5P_prp_cb2_t H5P_prp_get_func_t;
|
||||
typedef herr_t (*H5P_prp_encode_func_t)(const void *value, void **buf, size_t *size);
|
||||
typedef herr_t (*H5P_prp_decode_func_t)(const void **buf, void *value);
|
||||
typedef H5P_prp_cb2_t H5P_prp_delete_func_t;
|
||||
typedef H5P_prp_cb1_t H5P_prp_copy_func_t;
|
||||
typedef int (*H5P_prp_compare_func_t)(const void *value1, const void *value2, size_t size);
|
||||
|
@ -69,7 +69,7 @@
|
||||
static herr_t H5P__strcrt_reg_prop(H5P_genclass_t *pclass);
|
||||
|
||||
/* encode & decode callbacks */
|
||||
static herr_t H5P__strcrt_char_encoding_enc(const void *value, void **_pp, size_t *size);
|
||||
static herr_t H5P__strcrt_char_encoding_enc(const void *value, void **_pp, size_t *size, void *udata);
|
||||
static herr_t H5P__strcrt_char_encoding_dec(const void **_pp, void *value);
|
||||
|
||||
|
||||
@ -227,7 +227,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5P__strcrt_char_encoding_enc(const void *value, void **_pp, size_t *size)
|
||||
H5P__strcrt_char_encoding_enc(const void *value, void **_pp, size_t *size, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5T_cset_t *encoding = (const H5T_cset_t *)value; /* Create local alias for values */
|
||||
uint8_t **pp = (uint8_t **)_pp;
|
||||
|
@ -290,7 +290,7 @@ H5R__create(void *_ref, H5G_loc_t *loc, const char *name, H5R_type_t ref_type,
|
||||
HDmemset(ref, 0, H5R_DSET_REG_REF_BUF_SIZE);
|
||||
|
||||
/* Get the amount of space required to serialize the selection */
|
||||
if ((buf_size = H5S_SELECT_SERIAL_SIZE(space)) < 0)
|
||||
if ((buf_size = H5S_SELECT_SERIAL_SIZE(space, loc->oloc->file)) < 0)
|
||||
HGOTO_ERROR(H5E_REFERENCE, H5E_CANTINIT, FAIL, "Invalid amount of space for serializing selection")
|
||||
|
||||
/* Increase buffer size to allow for the dataset OID */
|
||||
@ -306,7 +306,7 @@ H5R__create(void *_ref, H5G_loc_t *loc, const char *name, H5R_type_t ref_type,
|
||||
H5F_addr_encode(loc->oloc->file, &p, obj_loc.oloc->addr);
|
||||
|
||||
/* Serialize the selection into heap buffer */
|
||||
if (H5S_SELECT_SERIALIZE(space, &p) < 0)
|
||||
if (H5S_SELECT_SERIALIZE(space, &p, loc->oloc->file) < 0)
|
||||
HGOTO_ERROR(H5E_REFERENCE, H5E_CANTCOPY, FAIL, "Unable to serialize selection")
|
||||
|
||||
/* Save the serialized buffer for later */
|
||||
|
14
src/H5S.c
14
src/H5S.c
@ -1604,7 +1604,7 @@ H5Sencode(hid_t obj_id, void *buf, size_t *nalloc)
|
||||
if (NULL == (dspace = (H5S_t *)H5I_object_verify(obj_id, H5I_DATASPACE)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace")
|
||||
|
||||
if(H5S_encode(dspace, (unsigned char **)&buf, nalloc)<0)
|
||||
if(H5S_encode(dspace, (unsigned char **)&buf, nalloc, H5P_FILE_ACCESS_DEFAULT)<0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTENCODE, FAIL, "can't encode dataspace")
|
||||
|
||||
done:
|
||||
@ -1629,7 +1629,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5S_encode(H5S_t *obj, unsigned char **p, size_t *nalloc)
|
||||
H5S_encode(H5S_t *obj, unsigned char **p, size_t *nalloc, hid_t fapl_id)
|
||||
{
|
||||
H5F_t *f = NULL; /* Fake file structure*/
|
||||
size_t extent_size; /* Size of serialized dataspace extent */
|
||||
@ -1640,7 +1640,7 @@ H5S_encode(H5S_t *obj, unsigned char **p, size_t *nalloc)
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
/* Allocate "fake" file structure */
|
||||
if(NULL == (f = H5F_fake_alloc((uint8_t)0)))
|
||||
if(NULL == (f = H5F_fake_alloc((uint8_t)0, fapl_id)))
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTALLOC, FAIL, "can't allocate fake file struct")
|
||||
|
||||
/* Find out the size of buffer needed for extent */
|
||||
@ -1648,7 +1648,7 @@ H5S_encode(H5S_t *obj, unsigned char **p, size_t *nalloc)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_BADSIZE, FAIL, "can't find dataspace size")
|
||||
|
||||
/* Find out the size of buffer needed for selection */
|
||||
if((sselect_size = H5S_SELECT_SERIAL_SIZE(obj)) < 0)
|
||||
if((sselect_size = H5S_SELECT_SERIAL_SIZE(obj, f)) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_BADSIZE, FAIL, "can't find dataspace selection size")
|
||||
H5_CHECKED_ASSIGN(select_size, size_t, sselect_size, hssize_t);
|
||||
|
||||
@ -1678,7 +1678,7 @@ H5S_encode(H5S_t *obj, unsigned char **p, size_t *nalloc)
|
||||
|
||||
/* Encode the selection part of dataspace. */
|
||||
*p = pp;
|
||||
if(H5S_SELECT_SERIALIZE(obj, p) < 0)
|
||||
if(H5S_SELECT_SERIALIZE(obj, p, f) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTENCODE, FAIL, "can't encode select space")
|
||||
} /* end else */
|
||||
|
||||
@ -1772,8 +1772,8 @@ H5S_decode(const unsigned char **p)
|
||||
sizeof_size = *pp++;
|
||||
|
||||
/* Allocate "fake" file structure */
|
||||
if(NULL == (f = H5F_fake_alloc(sizeof_size)))
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTALLOC, NULL, "can't allocate fake file struct")
|
||||
if(NULL == (f = H5F_fake_alloc(sizeof_size, H5P_FILE_ACCESS_DEFAULT)))
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTALLOC, NULL, "can't allocate fake file struct")
|
||||
|
||||
/* Decode size of extent information */
|
||||
UINT32DECODE(pp, extent_size);
|
||||
|
24
src/H5Sall.c
24
src/H5Sall.c
@ -36,8 +36,8 @@ static herr_t H5S__all_get_seq_list(const H5S_t *space, unsigned flags,
|
||||
size_t *nseq, size_t *nbytes, hsize_t *off, size_t *len);
|
||||
static herr_t H5S__all_release(H5S_t *space);
|
||||
static htri_t H5S__all_is_valid(const H5S_t *space);
|
||||
static hssize_t H5S__all_serial_size(const H5S_t *space);
|
||||
static herr_t H5S__all_serialize(const H5S_t *space, uint8_t **p);
|
||||
static hssize_t H5S__all_serial_size(const H5S_t *space, H5F_t *f);
|
||||
static herr_t H5S__all_serialize(const H5S_t *space, uint8_t **p, H5F_t *f);
|
||||
static herr_t H5S__all_deserialize(H5S_t *space, uint32_t version, uint8_t flags,
|
||||
const uint8_t **p);
|
||||
static herr_t H5S__all_bounds(const H5S_t *space, hsize_t *start, hsize_t *end);
|
||||
@ -56,7 +56,7 @@ static herr_t H5S__all_iter_coords(const H5S_sel_iter_t *iter, hsize_t *coords);
|
||||
static herr_t H5S__all_iter_block(const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end);
|
||||
static hsize_t H5S__all_iter_nelmts(const H5S_sel_iter_t *iter);
|
||||
static htri_t H5S__all_iter_has_next_block(const H5S_sel_iter_t *iter);
|
||||
static herr_t H5S__all_iter_next(H5S_sel_iter_t *sel_iter, size_t nelem);
|
||||
static herr_t H5S__all_iter_next(H5S_sel_iter_t *sel_iter, hsize_t nelem);
|
||||
static herr_t H5S__all_iter_next_block(H5S_sel_iter_t *sel_iter);
|
||||
static herr_t H5S__all_iter_release(H5S_sel_iter_t *sel_iter);
|
||||
|
||||
@ -268,7 +268,7 @@ H5S__all_iter_has_next_block(const H5S_sel_iter_t H5_ATTR_UNUSED *iter)
|
||||
USAGE
|
||||
herr_t H5S__all_iter_next(iter, nelem)
|
||||
H5S_sel_iter_t *iter; IN: Pointer to selection iterator
|
||||
size_t nelem; IN: Number of elements to advance by
|
||||
hsize_t nelem; IN: Number of elements to advance by
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
DESCRIPTION
|
||||
@ -279,7 +279,7 @@ H5S__all_iter_has_next_block(const H5S_sel_iter_t H5_ATTR_UNUSED *iter)
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static herr_t
|
||||
H5S__all_iter_next(H5S_sel_iter_t *iter, size_t nelem)
|
||||
H5S__all_iter_next(H5S_sel_iter_t *iter, hsize_t nelem)
|
||||
{
|
||||
FUNC_ENTER_STATIC_NOERR
|
||||
|
||||
@ -457,8 +457,9 @@ H5S__all_is_valid(const H5S_t H5_ATTR_UNUSED *space)
|
||||
Determine the number of bytes needed to store the serialized "all"
|
||||
selection information.
|
||||
USAGE
|
||||
hssize_t H5S__all_serial_size(space)
|
||||
hssize_t H5S_all_serial_size(space, f)
|
||||
H5S_t *space; IN: Dataspace pointer to query
|
||||
H5F_t *f; IN: File pointer
|
||||
RETURNS
|
||||
The number of bytes required on success, negative on an error.
|
||||
DESCRIPTION
|
||||
@ -470,7 +471,7 @@ H5S__all_is_valid(const H5S_t H5_ATTR_UNUSED *space)
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static hssize_t
|
||||
H5S__all_serial_size(const H5S_t H5_ATTR_UNUSED *space)
|
||||
H5S__all_serial_size (const H5S_t H5_ATTR_UNUSED *space, H5F_t H5_ATTR_UNUSED *f)
|
||||
{
|
||||
FUNC_ENTER_STATIC_NOERR
|
||||
|
||||
@ -490,11 +491,12 @@ H5S__all_serial_size(const H5S_t H5_ATTR_UNUSED *space)
|
||||
PURPOSE
|
||||
Serialize the current selection into a user-provided buffer.
|
||||
USAGE
|
||||
herr_t H5S_all_serialize(space, p)
|
||||
herr_t H5S__all_serialize(space, p, f)
|
||||
const H5S_t *space; IN: Dataspace with selection to serialize
|
||||
uint8_t **p; OUT: Pointer to buffer to put serialized
|
||||
selection. Will be advanced to end of
|
||||
serialized selection.
|
||||
H5F_t *f; IN: File pointer
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
DESCRIPTION
|
||||
@ -506,7 +508,7 @@ H5S__all_serial_size(const H5S_t H5_ATTR_UNUSED *space)
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static herr_t
|
||||
H5S__all_serialize(const H5S_t *space, uint8_t **p)
|
||||
H5S__all_serialize(const H5S_t *space, uint8_t **p, H5F_t H5_ATTR_UNUSED *f)
|
||||
{
|
||||
uint8_t *pp = (*p); /* Local pointer for decoding */
|
||||
|
||||
@ -518,8 +520,8 @@ H5S__all_serialize(const H5S_t *space, uint8_t **p)
|
||||
HDassert(pp);
|
||||
|
||||
/* Store the preamble information */
|
||||
UINT32ENCODE(pp, (uint32_t)H5S_GET_SELECT_TYPE(space)); /* Store the type of selection */
|
||||
UINT32ENCODE(pp, (uint32_t)1); /* Store the version number */
|
||||
UINT32ENCODE(pp, (uint32_t)H5S_GET_SELECT_TYPE(space)); /* Store the type of selection */
|
||||
UINT32ENCODE(pp, (uint32_t)H5S_ALL_VERSION_1); /* Store the version number */
|
||||
UINT32ENCODE(pp, (uint32_t)0); /* Store the un-used padding */
|
||||
UINT32ENCODE(pp, (uint32_t)0); /* Store the additional information length */
|
||||
|
||||
|
375
src/H5Shyper.c
375
src/H5Shyper.c
@ -28,7 +28,12 @@
|
||||
#include "H5Spkg.h" /* Dataspace functions */
|
||||
#include "H5VMprivate.h" /* Vector functions */
|
||||
|
||||
/* Local Macros */
|
||||
/* Format version bounds for dataspace hyperslab selection */
|
||||
const unsigned H5O_sds_hyper_ver_bounds[] = {
|
||||
H5S_HYPER_VERSION_1, /* H5F_LIBVER_EARLIEST */
|
||||
H5S_HYPER_VERSION_1, /* H5F_LIBVER_V18 */
|
||||
H5S_HYPER_VERSION_2 /* H5F_LIBVER_LATEST */
|
||||
};
|
||||
|
||||
/* Local datatypes */
|
||||
|
||||
@ -80,8 +85,8 @@ static herr_t H5S__hyper_get_seq_list(const H5S_t *space, unsigned flags,
|
||||
size_t *nseq, size_t *nbytes, hsize_t *off, size_t *len);
|
||||
static herr_t H5S__hyper_release(H5S_t *space);
|
||||
static htri_t H5S__hyper_is_valid(const H5S_t *space);
|
||||
static hssize_t H5S__hyper_serial_size(const H5S_t *space);
|
||||
static herr_t H5S__hyper_serialize(const H5S_t *space, uint8_t **p);
|
||||
static hssize_t H5S__hyper_serial_size(const H5S_t *space, H5F_t *f);
|
||||
static herr_t H5S__hyper_serialize(const H5S_t *space, uint8_t **p, H5F_t *f);
|
||||
static herr_t H5S__hyper_deserialize(H5S_t *space, uint32_t version, uint8_t flags,
|
||||
const uint8_t **p);
|
||||
static herr_t H5S__hyper_bounds(const H5S_t *space, hsize_t *start, hsize_t *end);
|
||||
@ -102,10 +107,9 @@ static herr_t H5S__hyper_iter_coords(const H5S_sel_iter_t *iter, hsize_t *coords
|
||||
static herr_t H5S__hyper_iter_block(const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end);
|
||||
static hsize_t H5S__hyper_iter_nelmts(const H5S_sel_iter_t *iter);
|
||||
static htri_t H5S__hyper_iter_has_next_block(const H5S_sel_iter_t *sel_iter);
|
||||
static herr_t H5S__hyper_iter_next(H5S_sel_iter_t *sel_iter, size_t nelem);
|
||||
static herr_t H5S__hyper_iter_next(H5S_sel_iter_t *sel_iter, hsize_t nelem);
|
||||
static herr_t H5S__hyper_iter_next_block(H5S_sel_iter_t *sel_iter);
|
||||
static herr_t H5S__hyper_iter_release(H5S_sel_iter_t *sel_iter);
|
||||
|
||||
/* Static function for optimizing hyperslab */
|
||||
static hbool_t H5S__hyper_rebuild_helper(const H5S_hyper_span_t *span,
|
||||
H5S_hyper_dim_t span_slab_info[], unsigned rank);
|
||||
@ -684,7 +688,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5S__hyper_iter_next(H5S_sel_iter_t *iter, size_t nelem)
|
||||
H5S__hyper_iter_next(H5S_sel_iter_t *iter, hsize_t nelem)
|
||||
{
|
||||
unsigned ndims; /* Number of dimensions of dataset */
|
||||
int fast_dim; /* Rank of the fastest changing dimension for the dataspace */
|
||||
@ -731,17 +735,17 @@ H5S__hyper_iter_next(H5S_sel_iter_t *iter, size_t nelem)
|
||||
/* Loop through, advancing the offset & counts, until all the nelements are accounted for */
|
||||
while(nelem > 0) {
|
||||
/* Start with the fastest changing dimension */
|
||||
temp_dim = fast_dim;
|
||||
while(temp_dim >= 0) {
|
||||
if(temp_dim == fast_dim) {
|
||||
size_t actual_elem; /* Actual # of elements advanced on each iteration through loop */
|
||||
temp_dim=fast_dim;
|
||||
while(temp_dim>=0) {
|
||||
if(temp_dim==fast_dim) {
|
||||
hsize_t actual_elem; /* Actual # of elements advanced on each iteration through loop */
|
||||
hsize_t block_elem; /* Number of elements left in a block */
|
||||
|
||||
/* Compute the number of elements left in block */
|
||||
block_elem = tdiminfo[temp_dim].block - iter_offset[temp_dim];
|
||||
|
||||
/* Compute the number of actual elements to advance */
|
||||
actual_elem = (size_t)MIN(nelem, block_elem);
|
||||
actual_elem=MIN(nelem,block_elem);
|
||||
|
||||
/* Move the iterator over as many elements as possible */
|
||||
iter_offset[temp_dim] += actual_elem;
|
||||
@ -804,8 +808,8 @@ H5S__hyper_iter_next(H5S_sel_iter_t *iter, size_t nelem)
|
||||
curr_span = ispan[curr_dim];
|
||||
|
||||
/* Increment absolute position */
|
||||
if(curr_dim == fast_dim) {
|
||||
size_t actual_elem; /* Actual # of elements advanced on each iteration through loop */
|
||||
if(curr_dim==fast_dim) {
|
||||
hsize_t actual_elem; /* Actual # of elements advanced on each iteration through loop */
|
||||
hsize_t span_elem; /* Number of elements left in a span */
|
||||
|
||||
/* Compute the number of elements left in block */
|
||||
@ -1944,6 +1948,132 @@ done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* end H5Sget_select_hyper_nblocks() */
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
NAME
|
||||
H5S_hyper_set_offset_size
|
||||
PURPOSE
|
||||
Determine the offset size (4 or 8 bytes) to use for encoding hyperslab selection info
|
||||
USAGE
|
||||
hssize_t H5S_hyper_set_offset_size(space, block_count, bounds_end, version, offset_size)
|
||||
const H5S_t *space: IN: The maximum size of the hyperslab selection info
|
||||
hsize_t block_count: IN: The number of blocks in the selection
|
||||
hsize_t bounds_end: IN: The selection high bounds
|
||||
uint32_t version: IN: The version used for encoding
|
||||
uint8_t *offset_size: OUT: The offset size
|
||||
|
||||
RETURNS
|
||||
The offset size
|
||||
DESCRIPTION
|
||||
Determine the offset size for encoding hyperslab selection info based on the
|
||||
the input parameter "version". This is for release 1.10.
|
||||
GLOBAL VARIABLES
|
||||
COMMENTS, BUGS, ASSUMPTIONS
|
||||
EXAMPLES
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static herr_t
|
||||
H5S_hyper_set_offset_size(const H5S_t *space, hsize_t block_count, hsize_t bounds_end[], uint32_t version, uint8_t *offset_size)
|
||||
{
|
||||
herr_t ret_value = SUCCEED;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
switch(version) {
|
||||
case H5S_HYPER_VERSION_1:
|
||||
*offset_size = H5S_INFO_SIZE_4;
|
||||
break;
|
||||
|
||||
case H5S_HYPER_VERSION_2:
|
||||
*offset_size = H5S_INFO_SIZE_8;
|
||||
break;
|
||||
|
||||
default:
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't determine hyper offset size")
|
||||
break;
|
||||
}
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5S_hyper_set_offset_size() */
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
NAME
|
||||
H5S_hyper_set_version
|
||||
PURPOSE
|
||||
Determine the version to use for encoding hyperslab selection info
|
||||
See tables 2 & 3 in the RFC: H5Sencode/H5Sdecode Format Change
|
||||
USAGE
|
||||
hssize_t H5S_hyper_set_version(space, block_count, bounds_end, f, version)
|
||||
const H5S_t *space: IN: The dataspace
|
||||
hsize_t block_count: IN: The number of blocks in the selection
|
||||
hsize_t bounds_end: IN: The selection high bounds
|
||||
H5F_t *f: IN: The file pointer
|
||||
uint32_t *version: OUT: The version to use for encoding
|
||||
|
||||
RETURNS
|
||||
The version to use
|
||||
DESCRIPTION
|
||||
Determine the version to use for encoding hyperslab selection info based
|
||||
on whether the number of blocks or the selection high bounds exceeds (2^32 - 1).
|
||||
GLOBAL VARIABLES
|
||||
COMMENTS, BUGS, ASSUMPTIONS
|
||||
EXAMPLES
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static herr_t
|
||||
H5S_hyper_set_version(const H5S_t *space, hsize_t block_count, hsize_t bounds_end[], H5F_t *f, uint32_t *version)
|
||||
{
|
||||
hbool_t count_up_version = FALSE; /* Whether number of blocks exceed (2^32 - 1) */
|
||||
hbool_t bound_up_version = FALSE; /* Whether high bounds exceed (2^32 - 1) */
|
||||
unsigned u; /* Local index veriable */
|
||||
uint32_t tmp_version; /* Temporay version */
|
||||
herr_t ret_value = SUCCEED; /* return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
/* Determine whether the number of blocks or the high bounds in the selection exceed (2^32 - 1) */
|
||||
if(block_count > H5S_UINT32_MAX)
|
||||
count_up_version = TRUE;
|
||||
else {
|
||||
for(u = 0; u < space->extent.rank; u++)
|
||||
if(bounds_end[u] > H5S_UINT32_MAX)
|
||||
bound_up_version = TRUE;
|
||||
}
|
||||
|
||||
/* Use version 2 for unlimited selection */
|
||||
if(space->select.sel_info.hslab->unlim_dim >= 0)
|
||||
tmp_version = H5S_HYPER_VERSION_2;
|
||||
else if(H5S__hyper_is_regular(space)) {
|
||||
|
||||
/* If exceed (2^32 -1) */
|
||||
if(count_up_version || bound_up_version)
|
||||
tmp_version = H5S_HYPER_VERSION_2;
|
||||
else
|
||||
/* block_count < 4: version 1 */
|
||||
/* block_count >= 4: determined by low bound */
|
||||
tmp_version = (block_count < 4) ? H5S_HYPER_VERSION_1 : H5O_sds_hyper_ver_bounds[H5F_LOW_BOUND(f)];
|
||||
|
||||
} else {
|
||||
/* Fail for irregular hyperslab if exceeds 32 bits */
|
||||
if(count_up_version)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_BADVALUE, FAIL, "The number of blocks in hyperslab selection exceeds 2^32")
|
||||
else if(bound_up_version)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_BADVALUE, FAIL, "The end of bounding box in hyperslab selection exceeds 2^32")
|
||||
tmp_version = H5S_HYPER_VERSION_1;
|
||||
}
|
||||
|
||||
/* Version bounds check */
|
||||
if(tmp_version > H5O_sds_hyper_ver_bounds[H5F_HIGH_BOUND(f)])
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "Dataspace hyperslab selection version out of bounds")
|
||||
|
||||
*version = tmp_version;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5S_hyper_set_version() */
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
NAME
|
||||
@ -1952,8 +2082,9 @@ done:
|
||||
Determine the number of bytes needed to store the serialized hyperslab
|
||||
selection information.
|
||||
USAGE
|
||||
hssize_t H5S__hyper_serial_size(space)
|
||||
hssize_t H5S_hyper_serial_size(space, H5F_t *f)
|
||||
H5S_t *space; IN: Dataspace pointer to query
|
||||
H5F_t *f; IN: File pointer
|
||||
RETURNS
|
||||
The number of bytes required on success, negative on an error.
|
||||
DESCRIPTION
|
||||
@ -1965,39 +2096,25 @@ done:
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static hssize_t
|
||||
H5S__hyper_serial_size(const H5S_t *space)
|
||||
H5S__hyper_serial_size(const H5S_t *space, H5F_t *f)
|
||||
{
|
||||
hsize_t block_count; /* block counter for regular hyperslabs */
|
||||
unsigned u; /* Counter */
|
||||
hssize_t ret_value = -1; /* return value */
|
||||
hsize_t block_count = 0; /* block counter for regular hyperslabs */
|
||||
hsize_t bounds_start[H5S_MAX_RANK]; /* Selection bounds */
|
||||
hsize_t bounds_end[H5S_MAX_RANK]; /* Selection bounds */
|
||||
uint32_t version; /* Version number */
|
||||
uint8_t offset_size; /* Offset size */
|
||||
unsigned u; /* Local index variable */
|
||||
hssize_t ret_value = -1; /* return value */
|
||||
|
||||
FUNC_ENTER_STATIC_NOERR
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
HDassert(space);
|
||||
|
||||
/* Check for version (right now, an unlimited dimension is the only thing
|
||||
* that would bump the version) */
|
||||
if(space->select.sel_info.hslab->unlim_dim >= 0)
|
||||
/* Version 2 */
|
||||
/* Size required is always:
|
||||
* <type (4 bytes)> + <version (4 bytes)> + <flags (1 byte)> +
|
||||
* <length (4 bytes)> + <rank (4 bytes)> +
|
||||
* (4 (start/stride/count/block) * <rank> * <value (8 bytes)>) =
|
||||
* 17 + (4 * rank * 8) bytes
|
||||
*/
|
||||
ret_value = (hssize_t)17 + ((hssize_t)4 * (hssize_t)space->extent.rank
|
||||
* (hssize_t)8);
|
||||
else {
|
||||
/* Version 1 */
|
||||
/* Basic number of bytes required to serialize hyperslab selection:
|
||||
* <type (4 bytes)> + <version (4 bytes)> + <padding (4 bytes)> +
|
||||
* <length (4 bytes)> + <rank (4 bytes)> + <# of blocks (4 bytes)>
|
||||
* = 24 bytes
|
||||
*/
|
||||
ret_value = 24;
|
||||
|
||||
/* Check for a "regular" hyperslab selection */
|
||||
if(space->select.sel_info.hslab->diminfo_valid) {
|
||||
/* Get bounding box for the selection */
|
||||
HDmemset(bounds_end, 0, sizeof(bounds_end));
|
||||
if(space->select.sel_info.hslab->unlim_dim < 0) { /* ! H5S_UNLIMITED */
|
||||
/* Determine the number of blocks */
|
||||
if(H5S__hyper_is_regular(space)) {
|
||||
/* Check each dimension */
|
||||
for(block_count = 1, u = 0; u < space->extent.rank; u++)
|
||||
block_count *= space->select.sel_info.hslab->opt_diminfo[u].count;
|
||||
@ -2006,10 +2123,45 @@ H5S__hyper_serial_size(const H5S_t *space)
|
||||
/* Spin through hyperslab spans, adding 8 * rank bytes for each block */
|
||||
block_count = H5S__hyper_span_nblocks(space->select.sel_info.hslab->span_lst);
|
||||
|
||||
/* Get bounding box for the selection */
|
||||
if(H5S__hyper_bounds(space, bounds_start, bounds_end) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't get selection bounds")
|
||||
}
|
||||
|
||||
/* Determine the version */
|
||||
if(H5S_hyper_set_version(space, block_count, bounds_end, f, &version) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't determine hyper version")
|
||||
|
||||
/* Determine the offset size */
|
||||
if(H5S_hyper_set_offset_size(space, block_count, bounds_end, version, &offset_size) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't determine hyper version")
|
||||
|
||||
if(version == H5S_HYPER_VERSION_2) {
|
||||
/* Version 2 */
|
||||
/* Size required is always:
|
||||
* <type (4 bytes)> + <version (4 bytes)> + <flags (1 byte)> +
|
||||
* <length (4 bytes)> + <rank (4 bytes)> +
|
||||
* (4 (start/stride/count/block) * <offset_size (8 bytes)> * <rank>) =
|
||||
* 17 + (4 * 8 * rank) bytes
|
||||
*/
|
||||
HDassert(offset_size == 8);
|
||||
ret_value = (hssize_t)17 + ((hssize_t)4 * (hssize_t)8 * (hssize_t)space->extent.rank);
|
||||
} else {
|
||||
HDassert(version == H5S_HYPER_VERSION_1);
|
||||
HDassert(offset_size == 4);
|
||||
/* Version 1 */
|
||||
/* Basic number of bytes required to serialize hyperslab selection:
|
||||
* <type (4 bytes)> + <version (4 bytes)> + <padding (4 bytes)> +
|
||||
* <length (4 bytes)> + <rank (4 bytes)> + <# of blocks (4 bytes)> +
|
||||
* (2 (starting/ending offset) * <offset_size (4 bytes)> * <rank> * <# of blocks) =
|
||||
* = 24 bytes + (2 * 4 * rank * block_count)
|
||||
*/
|
||||
ret_value = 24;
|
||||
H5_CHECK_OVERFLOW((8 * space->extent.rank * block_count), hsize_t, hssize_t);
|
||||
ret_value += (hssize_t)(8 * block_count * space->extent.rank);
|
||||
ret_value += (hssize_t)(8 * space->extent.rank * block_count);
|
||||
} /* end else */
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5S__hyper_serial_size() */
|
||||
|
||||
@ -2101,11 +2253,12 @@ H5S__hyper_serialize_helper(const H5S_hyper_span_info_t *spans,
|
||||
PURPOSE
|
||||
Serialize the current selection into a user-provided buffer.
|
||||
USAGE
|
||||
herr_t H5S_hyper_serialize(space, p)
|
||||
herr_t H5S__hyper_serialize(space, p)
|
||||
const H5S_t *space; IN: Dataspace with selection to serialize
|
||||
uint8_t **p; OUT: Pointer to buffer to put serialized
|
||||
selection. Will be advanced to end of
|
||||
serialized selection.
|
||||
H5F_t *f; IN: File pointer
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
DESCRIPTION
|
||||
@ -2117,16 +2270,30 @@ H5S__hyper_serialize_helper(const H5S_hyper_span_info_t *spans,
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static herr_t
|
||||
H5S__hyper_serialize(const H5S_t *space, uint8_t **p)
|
||||
H5S__hyper_serialize(const H5S_t *space, uint8_t **p, H5F_t *f)
|
||||
{
|
||||
uint8_t *pp; /* Local pointer for decoding */
|
||||
uint8_t *lenp; /* Pointer to length location for later storage */
|
||||
uint32_t len = 0; /* Number of bytes used */
|
||||
const H5S_hyper_dim_t *diminfo; /* Alias for dataspace's diminfo information */
|
||||
uint8_t *pp = (*p); /* Local pointer for decoding */
|
||||
hsize_t tmp_count[H5O_LAYOUT_NDIMS]; /* Temporary hyperslab counts */
|
||||
hsize_t offset[H5O_LAYOUT_NDIMS]; /* Offset of element in dataspace */
|
||||
hsize_t start[H5O_LAYOUT_NDIMS]; /* Location of start of hyperslab */
|
||||
hsize_t end[H5O_LAYOUT_NDIMS]; /* Location of end of hyperslab */
|
||||
hsize_t temp_off; /* Offset in a given dimension */
|
||||
uint8_t *lenp; /* pointer to length location for later storage */
|
||||
uint32_t len = 0; /* number of bytes used */
|
||||
uint32_t version; /* Version number */
|
||||
uint8_t flags = 0; /* Flags for message */
|
||||
hsize_t block_count; /* Block counter for regular hyperslabs */
|
||||
hsize_t block_count; /* block counter for regular hyperslabs */
|
||||
unsigned fast_dim; /* Rank of the fastest changing dimension for the dataspace */
|
||||
unsigned ndims; /* Rank of the dataspace */
|
||||
unsigned u; /* Local counting variable */
|
||||
int done; /* Whether we are done with the iteration */
|
||||
uint8_t offset_size;
|
||||
hsize_t bounds_start[H5S_MAX_RANK];
|
||||
hsize_t bounds_end[H5S_MAX_RANK];
|
||||
herr_t ret_value = SUCCEED; /* return value */
|
||||
|
||||
FUNC_ENTER_STATIC_NOERR
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
/* Sanity checks */
|
||||
HDassert(space);
|
||||
@ -2134,62 +2301,76 @@ H5S__hyper_serialize(const H5S_t *space, uint8_t **p)
|
||||
pp = (*p);
|
||||
HDassert(pp);
|
||||
|
||||
/* Calculate version */
|
||||
if(space->select.sel_info.hslab->unlim_dim >= 0) {
|
||||
version = 2;
|
||||
flags |= H5S_SELECT_FLAG_UNLIM;
|
||||
} /* end if */
|
||||
else
|
||||
version = 1;
|
||||
/* Set some convienence values */
|
||||
ndims = space->extent.rank;
|
||||
diminfo = space->select.sel_info.hslab->opt_diminfo;
|
||||
|
||||
if(space->select.sel_info.hslab->unlim_dim < 0) { /* ! H5S_UNLIMITED */
|
||||
/* Calculate the # of blocks */
|
||||
if(H5S__hyper_is_regular(space)) {
|
||||
/* Check each dimension */
|
||||
for(block_count = 1, u = 0; u < ndims; u++)
|
||||
block_count *= diminfo[u].count;
|
||||
} /* end if */
|
||||
else
|
||||
/* Spin through hyperslab spans, adding 8 * rank bytes for each block */
|
||||
block_count = H5S__hyper_span_nblocks(space->select.sel_info.hslab->span_lst);
|
||||
|
||||
/* Get bounding box */
|
||||
if(H5S__hyper_bounds(space, bounds_start, bounds_end) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't get selection bounds")
|
||||
}
|
||||
|
||||
/* Determine the version to use */
|
||||
if(H5S_hyper_set_version(space, block_count, bounds_end, f, &version) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't determine hyper version")
|
||||
|
||||
/* Determine the size of offset info */
|
||||
if(H5S_hyper_set_offset_size(space, block_count, bounds_end, version, &offset_size) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't determine hyper version")
|
||||
|
||||
if(H5S__hyper_is_regular(space) && version == H5S_HYPER_VERSION_2)
|
||||
flags |= H5S_HYPER_REGULAR;
|
||||
|
||||
/* Store the preamble information */
|
||||
UINT32ENCODE(pp, (uint32_t)H5S_GET_SELECT_TYPE(space)); /* Store the type of selection */
|
||||
UINT32ENCODE(pp, version); /* Store the version number */
|
||||
if(version >= 2)
|
||||
*(pp)++ = flags; /* Store the flags */
|
||||
|
||||
if(version == 2)
|
||||
*(pp)++ = flags; /* Store the flags */
|
||||
else
|
||||
UINT32ENCODE(pp, (uint32_t)0); /* Store the un-used padding */
|
||||
lenp = pp; /* keep the pointer to the length location for later */
|
||||
pp += 4; /* skip over space for length */
|
||||
lenp = pp; /* keep the pointer to the length location for later */
|
||||
pp += 4; /* skip over space for length */
|
||||
|
||||
len += 4; /* ndims */
|
||||
|
||||
/* Encode number of dimensions */
|
||||
UINT32ENCODE(pp, (uint32_t)space->extent.rank);
|
||||
len += 4;
|
||||
UINT32ENCODE(pp, (uint32_t)ndims);
|
||||
|
||||
/* If there is an unlimited dimension, only encode opt_unlim_diminfo */
|
||||
if(flags & H5S_SELECT_FLAG_UNLIM) {
|
||||
/* If flags indicates a regular hyperslab or unlimited dimension, encode opt_diminfo */
|
||||
if(flags & H5S_HYPER_REGULAR) {
|
||||
unsigned i;
|
||||
|
||||
HDassert(H5S_UNLIMITED == HSIZE_UNDEF);
|
||||
HDassert(version == H5S_HYPER_VERSION_2);
|
||||
|
||||
/* Iterate over dimensions */
|
||||
/* Encode start/stride/block/count */
|
||||
for(i = 0; i < space->extent.rank; i++) {
|
||||
/* Encode start/stride/block/count */
|
||||
UINT64ENCODE(pp, space->select.sel_info.hslab->opt_diminfo[i].start);
|
||||
UINT64ENCODE(pp, space->select.sel_info.hslab->opt_diminfo[i].stride);
|
||||
UINT64ENCODE(pp, space->select.sel_info.hslab->opt_diminfo[i].count);
|
||||
UINT64ENCODE(pp, space->select.sel_info.hslab->opt_diminfo[i].block);
|
||||
UINT64ENCODE(pp, diminfo[i].start);
|
||||
UINT64ENCODE(pp, diminfo[i].stride);
|
||||
UINT64ENCODE(pp, diminfo[i].count);
|
||||
UINT64ENCODE(pp, diminfo[i].block);
|
||||
} /* end for */
|
||||
len += (4 * space->extent.rank * 8);
|
||||
} /* end if */
|
||||
/* Check for a "regular" hyperslab selection */
|
||||
else if(space->select.sel_info.hslab->diminfo_valid) {
|
||||
const H5S_hyper_dim_t *diminfo; /* Alias for dataspace's diminfo information */
|
||||
hsize_t offset[H5O_LAYOUT_NDIMS]; /* Offset of element in dataspace */
|
||||
hsize_t tmp_count[H5O_LAYOUT_NDIMS]; /* Temporary hyperslab counts */
|
||||
unsigned fast_dim; /* Rank of the fastest changing dimension for the dataspace */
|
||||
unsigned ndims; /* Rank of the dataspace */
|
||||
unsigned u; /* Local counting variable */
|
||||
hbool_t done; /* Whether we are done with the iteration */
|
||||
else if(H5S__hyper_is_regular(space)) {
|
||||
HDassert(version == H5S_HYPER_VERSION_1);
|
||||
|
||||
/* Set some convenience values */
|
||||
ndims = space->extent.rank;
|
||||
/* Set some convienence values */
|
||||
fast_dim = ndims - 1;
|
||||
diminfo = space->select.sel_info.hslab->opt_diminfo;
|
||||
|
||||
/* Check each dimension */
|
||||
for(block_count = 1, u = 0; u < ndims; u++)
|
||||
block_count *= diminfo[u].count;
|
||||
|
||||
/* Encode number of hyperslabs */
|
||||
H5_CHECK_OVERFLOW(block_count, hsize_t, uint32_t);
|
||||
UINT32ENCODE(pp, (uint32_t)block_count);
|
||||
@ -2265,18 +2446,16 @@ H5S__hyper_serialize(const H5S_t *space, uint8_t **p)
|
||||
} /* end while */
|
||||
} /* end if */
|
||||
else {
|
||||
hsize_t start[H5O_LAYOUT_NDIMS]; /* Location of start of hyperslab */
|
||||
hsize_t end[H5O_LAYOUT_NDIMS]; /* Location of end of hyperslab */
|
||||
|
||||
HDassert(version == H5S_HYPER_VERSION_1);
|
||||
/* Encode number of hyperslabs */
|
||||
block_count = H5S__hyper_span_nblocks(space->select.sel_info.hslab->span_lst);
|
||||
H5_CHECK_OVERFLOW(block_count, hsize_t, uint32_t);
|
||||
UINT32ENCODE(pp, (uint32_t)block_count);
|
||||
len += 4;
|
||||
|
||||
len+=4; /* block_count */
|
||||
|
||||
/* Add 8 bytes times the rank for each hyperslab selected */
|
||||
H5_CHECK_OVERFLOW((8 * space->extent.rank * block_count), hsize_t, size_t);
|
||||
len += (uint32_t)(8 * space->extent.rank * block_count);
|
||||
H5_CHECK_OVERFLOW((8 * ndims * block_count), hsize_t, size_t);
|
||||
len += (uint32_t)(8 * ndims * block_count);
|
||||
|
||||
/* Encode each hyperslab in selection */
|
||||
H5S__hyper_serialize_helper(space->select.sel_info.hslab->span_lst, start, end, (hsize_t)0, &pp);
|
||||
@ -2288,8 +2467,9 @@ H5S__hyper_serialize(const H5S_t *space, uint8_t **p)
|
||||
/* Update encoding pointer */
|
||||
*p = pp;
|
||||
|
||||
FUNC_LEAVE_NOAPI(SUCCEED)
|
||||
} /* end H5S__hyper_serialize() */
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5S_hyper_serialize() */
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
@ -2339,8 +2519,7 @@ H5S__hyper_deserialize(H5S_t *space, uint32_t H5_ATTR_UNUSED version, uint8_t fl
|
||||
/* (The header and rank have already beed decoded) */
|
||||
rank = space->extent.rank; /* Retrieve rank from space */
|
||||
|
||||
/* If there is an unlimited dimension, only encode opt_unlim_diminfo */
|
||||
if(flags & H5S_SELECT_FLAG_UNLIM) {
|
||||
if(flags & H5S_HYPER_REGULAR) {
|
||||
hsize_t stride[H5O_LAYOUT_NDIMS]; /* Hyperslab stride information */
|
||||
hsize_t count[H5O_LAYOUT_NDIMS]; /* Hyperslab count information */
|
||||
|
||||
@ -7473,7 +7652,7 @@ H5S_select_hyperslab (H5S_t *space, H5S_seloper_t op,
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, "unsupported operation with unlimited selection")
|
||||
|
||||
/* Get bounds of existing selection */
|
||||
if(H5S_hyper_bounds(space, bounds_start, bounds_end) < 0)
|
||||
if(H5S__hyper_bounds(space, bounds_start, bounds_end) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't get selection bounds")
|
||||
|
||||
/* Patch count and block to remove unlimited and include the
|
||||
|
@ -37,8 +37,8 @@ static herr_t H5S_none_get_seq_list(const H5S_t *space, unsigned flags,
|
||||
size_t *nseq, size_t *nbytes, hsize_t *off, size_t *len);
|
||||
static herr_t H5S_none_release(H5S_t *space);
|
||||
static htri_t H5S_none_is_valid(const H5S_t *space);
|
||||
static hssize_t H5S_none_serial_size(const H5S_t *space);
|
||||
static herr_t H5S_none_serialize(const H5S_t *space, uint8_t **p);
|
||||
static hssize_t H5S_none_serial_size(const H5S_t *space, H5F_t *f);
|
||||
static herr_t H5S_none_serialize(const H5S_t *space, uint8_t **p, H5F_t *f);
|
||||
static herr_t H5S_none_deserialize(H5S_t *space, uint32_t version, uint8_t flags,
|
||||
const uint8_t **p);
|
||||
static herr_t H5S_none_bounds(const H5S_t *space, hsize_t *start, hsize_t *end);
|
||||
@ -57,7 +57,7 @@ static herr_t H5S_none_iter_coords(const H5S_sel_iter_t *iter, hsize_t *coords);
|
||||
static herr_t H5S_none_iter_block(const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end);
|
||||
static hsize_t H5S_none_iter_nelmts(const H5S_sel_iter_t *iter);
|
||||
static htri_t H5S_none_iter_has_next_block(const H5S_sel_iter_t *iter);
|
||||
static herr_t H5S_none_iter_next(H5S_sel_iter_t *sel_iter, size_t nelem);
|
||||
static herr_t H5S_none_iter_next(H5S_sel_iter_t *sel_iter, hsize_t nelem);
|
||||
static herr_t H5S_none_iter_next_block(H5S_sel_iter_t *sel_iter);
|
||||
static herr_t H5S_none_iter_release(H5S_sel_iter_t *sel_iter);
|
||||
|
||||
@ -251,7 +251,7 @@ H5S_none_iter_has_next_block(const H5S_sel_iter_t H5_ATTR_UNUSED *iter)
|
||||
USAGE
|
||||
herr_t H5S_none_iter_next(iter, nelem)
|
||||
H5S_sel_iter_t *iter; IN: Pointer to selection iterator
|
||||
size_t nelem; IN: Number of elements to advance by
|
||||
hsize_t nelem; IN: Number of elements to advance by
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
DESCRIPTION
|
||||
@ -262,7 +262,7 @@ H5S_none_iter_has_next_block(const H5S_sel_iter_t H5_ATTR_UNUSED *iter)
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static herr_t
|
||||
H5S_none_iter_next(H5S_sel_iter_t H5_ATTR_UNUSED *iter, size_t H5_ATTR_UNUSED nelem)
|
||||
H5S_none_iter_next(H5S_sel_iter_t H5_ATTR_UNUSED *iter, hsize_t H5_ATTR_UNUSED nelem)
|
||||
{
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
@ -433,8 +433,9 @@ H5S_none_is_valid(const H5S_t H5_ATTR_UNUSED *space)
|
||||
Determine the number of bytes needed to store the serialized "none"
|
||||
selection information.
|
||||
USAGE
|
||||
hssize_t H5S_none_serial_size(space)
|
||||
hssize_t H5S_none_serial_size(space, f)
|
||||
H5S_t *space; IN: Dataspace pointer to query
|
||||
H5F_t *f; IN: File pointer
|
||||
RETURNS
|
||||
The number of bytes required on success, negative on an error.
|
||||
DESCRIPTION
|
||||
@ -446,7 +447,7 @@ H5S_none_is_valid(const H5S_t H5_ATTR_UNUSED *space)
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static hssize_t
|
||||
H5S_none_serial_size(const H5S_t H5_ATTR_UNUSED *space)
|
||||
H5S_none_serial_size(const H5S_t H5_ATTR_UNUSED *space, H5F_t H5_ATTR_UNUSED *f)
|
||||
{
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
@ -466,11 +467,12 @@ H5S_none_serial_size(const H5S_t H5_ATTR_UNUSED *space)
|
||||
PURPOSE
|
||||
Serialize the current selection into a user-provided buffer.
|
||||
USAGE
|
||||
herr_t H5S_none_serialize(space, p)
|
||||
herr_t H5S_none_serialize(space, p, f)
|
||||
const H5S_t *space; IN: Dataspace with selection to serialize
|
||||
uint8_t **p; OUT: Pointer to buffer to put serialized
|
||||
selection. Will be advanced to end of
|
||||
serialized selection.
|
||||
H5F_t *f; IN: File pointer
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
DESCRIPTION
|
||||
@ -482,7 +484,7 @@ H5S_none_serial_size(const H5S_t H5_ATTR_UNUSED *space)
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static herr_t
|
||||
H5S_none_serialize(const H5S_t *space, uint8_t **p)
|
||||
H5S_none_serialize(const H5S_t *space, uint8_t **p, H5F_t H5_ATTR_UNUSED *f)
|
||||
{
|
||||
uint8_t *pp = (*p); /* Local pointer for decoding */
|
||||
|
||||
@ -494,8 +496,8 @@ H5S_none_serialize(const H5S_t *space, uint8_t **p)
|
||||
HDassert(pp);
|
||||
|
||||
/* Store the preamble information */
|
||||
UINT32ENCODE(pp, (uint32_t)H5S_GET_SELECT_TYPE(space)); /* Store the type of selection */
|
||||
UINT32ENCODE(pp, (uint32_t)1); /* Store the version number */
|
||||
UINT32ENCODE(pp, (uint32_t)H5S_GET_SELECT_TYPE(space)); /* Store the type of selection */
|
||||
UINT32ENCODE(pp, (uint32_t)H5S_NONE_VERSION_1); /* Store the version number */
|
||||
UINT32ENCODE(pp, (uint32_t)0); /* Store the un-used padding */
|
||||
UINT32ENCODE(pp, (uint32_t)0); /* Store the additional information length */
|
||||
|
||||
|
33
src/H5Spkg.h
33
src/H5Spkg.h
@ -33,8 +33,28 @@
|
||||
#define H5S_VALID_PERM 0x02
|
||||
|
||||
/* Flags for serialization of selections */
|
||||
#define H5S_SELECT_FLAG_UNLIM 0x01
|
||||
#define H5S_SELECT_FLAG_BITS (H5S_SELECT_FLAG_UNLIM)
|
||||
#define H5S_HYPER_REGULAR 0x01
|
||||
#define H5S_SELECT_FLAG_BITS (H5S_HYPER_REGULAR)
|
||||
|
||||
/* Versions for H5S_SEL_HYPER selection info */
|
||||
#define H5S_HYPER_VERSION_1 1
|
||||
#define H5S_HYPER_VERSION_2 2
|
||||
|
||||
/* Versions for H5S_SEL_POINTS selection info */
|
||||
#define H5S_POINT_VERSION_1 1
|
||||
|
||||
/* Versions for H5S_SEL_NONE selection info */
|
||||
#define H5S_NONE_VERSION_1 1
|
||||
|
||||
/* Versions for H5S_SEL_ALL selection info */
|
||||
#define H5S_ALL_VERSION_1 1
|
||||
|
||||
/* Size of point/offset info for H5S_SEL_POINTS/H5S_SEL_HYPER */
|
||||
#define H5S_INFO_SIZE_4 0x04 /* 4 bytes: 32 bits */
|
||||
#define H5S_INFO_SIZE_8 0x08 /* 8 bytes: 64 bits */
|
||||
#define H5S_SELECT_INFO_SIZE_BITS (H5S_INFO_SIZE_4|H5S_INFO_SIZE_8)
|
||||
|
||||
#define H5S_UINT32_MAX 4294967295 /* 2^32 - 1 */
|
||||
|
||||
/* Length of stack-allocated sequences for "project intersect" routines */
|
||||
#define H5S_PROJECT_INTERSECT_NSEQS 256
|
||||
@ -139,9 +159,9 @@ typedef herr_t (*H5S_sel_release_func_t)(H5S_t *space);
|
||||
/* Method to determine if current selection is valid for dataspace */
|
||||
typedef htri_t (*H5S_sel_is_valid_func_t)(const H5S_t *space);
|
||||
/* Method to determine number of bytes required to store current selection */
|
||||
typedef hssize_t (*H5S_sel_serial_size_func_t)(const H5S_t *space);
|
||||
typedef hssize_t (*H5S_sel_serial_size_func_t)(const H5S_t *space, H5F_t *f);
|
||||
/* Method to store current selection in "serialized" form (a byte sequence suitable for storing on disk) */
|
||||
typedef herr_t (*H5S_sel_serialize_func_t)(const H5S_t *space, uint8_t **p);
|
||||
typedef herr_t (*H5S_sel_serialize_func_t)(const H5S_t *space, uint8_t **p, H5F_t *f);
|
||||
/* Method to create selection from "serialized" form (a byte sequence suitable for storing on disk) */
|
||||
typedef herr_t (*H5S_sel_deserialize_func_t)(H5S_t *space, uint32_t version, uint8_t flags,
|
||||
const uint8_t **p);
|
||||
@ -225,7 +245,7 @@ typedef hsize_t (*H5S_sel_iter_nelmts_func_t)(const H5S_sel_iter_t *iter);
|
||||
/* Method to determine if there are more blocks left in the current selection */
|
||||
typedef htri_t (*H5S_sel_iter_has_next_block_func_t)(const H5S_sel_iter_t *iter);
|
||||
/* Method to move selection iterator to the next element in the selection */
|
||||
typedef herr_t (*H5S_sel_iter_next_func_t)(H5S_sel_iter_t *iter, size_t nelem);
|
||||
typedef herr_t (*H5S_sel_iter_next_func_t)(H5S_sel_iter_t *iter, hsize_t nelem);
|
||||
/* Method to move selection iterator to the next block in the selection */
|
||||
typedef herr_t (*H5S_sel_iter_next_block_func_t)(H5S_sel_iter_t *iter);
|
||||
/* Method to release iterator for current selection */
|
||||
@ -265,8 +285,9 @@ H5_DLLVAR const H5S_select_class_t H5S_sel_none[1];
|
||||
*/
|
||||
H5_DLLVAR const H5S_select_class_t H5S_sel_point[1];
|
||||
|
||||
/* Array of versions for Dataspace */
|
||||
/* Array of versions for Dataspace and hyperslab selections */
|
||||
H5_DLLVAR const unsigned H5O_sdspace_ver_bounds[H5F_LIBVER_NBOUNDS];
|
||||
H5_DLLVAR const unsigned H5O_sds_hyper_ver_bounds[H5F_LIBVER_NBOUNDS];
|
||||
|
||||
/* Extent functions */
|
||||
H5_DLL herr_t H5S_extent_release(H5S_extent_t *extent);
|
||||
|
197
src/H5Spoint.c
197
src/H5Spoint.c
@ -38,8 +38,8 @@ static herr_t H5S_point_get_seq_list(const H5S_t *space, unsigned flags,
|
||||
size_t *nseq, size_t *nbytes, hsize_t *off, size_t *len);
|
||||
static herr_t H5S_point_release(H5S_t *space);
|
||||
static htri_t H5S_point_is_valid(const H5S_t *space);
|
||||
static hssize_t H5S_point_serial_size(const H5S_t *space);
|
||||
static herr_t H5S_point_serialize(const H5S_t *space, uint8_t **p);
|
||||
static hssize_t H5S_point_serial_size(const H5S_t *space, H5F_t *f);
|
||||
static herr_t H5S_point_serialize(const H5S_t *space, uint8_t **p, H5F_t *f);
|
||||
static herr_t H5S_point_deserialize(H5S_t *space, uint32_t version, uint8_t flags,
|
||||
const uint8_t **p);
|
||||
static herr_t H5S_point_bounds(const H5S_t *space, hsize_t *start, hsize_t *end);
|
||||
@ -58,7 +58,7 @@ static herr_t H5S_point_iter_coords(const H5S_sel_iter_t *iter, hsize_t *coords)
|
||||
static herr_t H5S_point_iter_block(const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end);
|
||||
static hsize_t H5S_point_iter_nelmts(const H5S_sel_iter_t *iter);
|
||||
static htri_t H5S_point_iter_has_next_block(const H5S_sel_iter_t *iter);
|
||||
static herr_t H5S_point_iter_next(H5S_sel_iter_t *sel_iter, size_t nelem);
|
||||
static herr_t H5S_point_iter_next(H5S_sel_iter_t *sel_iter, hsize_t nelem);
|
||||
static herr_t H5S_point_iter_next_block(H5S_sel_iter_t *sel_iter);
|
||||
static herr_t H5S_point_iter_release(H5S_sel_iter_t *sel_iter);
|
||||
|
||||
@ -278,7 +278,7 @@ done:
|
||||
USAGE
|
||||
herr_t H5S_point_iter_next(iter, nelem)
|
||||
H5S_sel_iter_t *iter; IN: Pointer to selection iterator
|
||||
size_t nelem; IN: Number of elements to advance by
|
||||
hsize_t nelem; IN: Number of elements to advance by
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
DESCRIPTION
|
||||
@ -289,7 +289,7 @@ done:
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static herr_t
|
||||
H5S_point_iter_next(H5S_sel_iter_t *iter, size_t nelem)
|
||||
H5S_point_iter_next(H5S_sel_iter_t *iter, hsize_t nelem)
|
||||
{
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
@ -376,7 +376,7 @@ H5S_point_iter_release (H5S_sel_iter_t H5_ATTR_UNUSED * iter)
|
||||
USAGE
|
||||
herr_t H5S_point_add(space, num_elem, coord)
|
||||
H5S_t *space; IN: Dataspace of selection to modify
|
||||
size_t num_elem; IN: Number of elements in COORD array.
|
||||
hsize_t num_elem; IN: Number of elements in COORD array.
|
||||
const hsize_t *coord[]; IN: The location of each element selected
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
@ -388,7 +388,7 @@ H5S_point_iter_release (H5S_sel_iter_t H5_ATTR_UNUSED * iter)
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static herr_t
|
||||
H5S_point_add(H5S_t *space, H5S_seloper_t op, size_t num_elem, const hsize_t *coord)
|
||||
H5S_point_add(H5S_t *space, H5S_seloper_t op, hsize_t num_elem, const hsize_t *coord)
|
||||
{
|
||||
H5S_pnt_node_t *top = NULL, *curr = NULL, *new_node = NULL; /* Point selection nodes */
|
||||
unsigned u; /* Counter */
|
||||
@ -527,7 +527,7 @@ H5S_point_release (H5S_t *space)
|
||||
herr_t H5S_select_elements(dsid, op, num_elem, coord)
|
||||
hid_t dsid; IN: Dataspace ID of selection to modify
|
||||
H5S_seloper_t op; IN: Operation to perform on current selection
|
||||
size_t num_elem; IN: Number of elements in COORD array.
|
||||
hsize_t num_elem; IN: Number of elements in COORD array.
|
||||
const hsize_t *coord; IN: The location of each element selected
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
@ -549,7 +549,7 @@ H5S_point_release (H5S_t *space)
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
herr_t
|
||||
H5S_select_elements(H5S_t *space, H5S_seloper_t op, size_t num_elem,
|
||||
H5S_select_elements(H5S_t *space, H5S_seloper_t op, hsize_t num_elem,
|
||||
const hsize_t *coord)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* return value */
|
||||
@ -752,6 +752,93 @@ done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* H5Sget_select_elem_npoints() */
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
NAME
|
||||
H5S_point_set_version
|
||||
PURPOSE
|
||||
Determine the version to use for encoding points selection info
|
||||
USAGE
|
||||
hssize_t H5S_point_set_version(space, bounds_end, f, version)
|
||||
const H5S_t *space; IN: The dataspace
|
||||
hsize_t bounds_end: IN: The selection high bounds
|
||||
H5F_t *f: IN: The file pointer
|
||||
uint32_t *version: OUT: The version to use for encoding
|
||||
RETURNS
|
||||
The version to use
|
||||
DESCRIPTION
|
||||
Determine the version to use for encoding points selection info:
|
||||
For 1.10, return 1
|
||||
|
||||
GLOBAL VARIABLES
|
||||
COMMENTS, BUGS, ASSUMPTIONS
|
||||
EXAMPLES
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static herr_t
|
||||
H5S_point_set_version(const H5S_t *space, hsize_t bounds_end[], H5F_t *f, uint32_t *version)
|
||||
{
|
||||
hbool_t exceed = FALSE;
|
||||
unsigned u;
|
||||
herr_t ret_value = SUCCEED; /* return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
*version = H5S_POINT_VERSION_1;
|
||||
|
||||
/* Determine whether the number of points or the high bounds in the selection exceed (2^32 - 1) */
|
||||
for(u = 0; u < space->extent.rank; u++)
|
||||
if(bounds_end[u] > H5S_UINT32_MAX) {
|
||||
exceed = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if(space->select.num_elem > H5S_UINT32_MAX)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_BADVALUE, FAIL, "The number of points in point selection exceeds 2^32")
|
||||
else if(exceed)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_BADVALUE, FAIL, "The end of bounding box in point selection exceeds 2^32")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5S_point_set_version() */
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
NAME
|
||||
H5S_point_set_info_size
|
||||
PURPOSE
|
||||
Determine the size of point info to use for encoding selection info
|
||||
USAGE
|
||||
hssize_t H5S_point_set_info_size(space, bounds_end, version, point_size)
|
||||
const H5S_t *space: IN: Dataspace ID of selection to query
|
||||
hsize_t bounds_end[]: IN: The selection high bounds
|
||||
uint32_t version: IN: The version used for encoding
|
||||
uint8_t *point_size: OUT: The size of point info
|
||||
RETURNS
|
||||
The size of the points selection info
|
||||
DESCRIPTION
|
||||
Determine the size for encoding points selection info:
|
||||
For 1.10, return 4
|
||||
|
||||
GLOBAL VARIABLES
|
||||
COMMENTS, BUGS, ASSUMPTIONS
|
||||
EXAMPLES
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static herr_t
|
||||
H5S_point_set_info_size(const H5S_t *space, hsize_t H5_ATTR_UNUSED bounds_end[], uint32_t H5_ATTR_UNUSED version, uint8_t H5_ATTR_UNUSED *point_size)
|
||||
{
|
||||
hsize_t max_size = 0;
|
||||
unsigned u;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
HDassert(version == H5S_POINT_VERSION_1);
|
||||
|
||||
*point_size = H5S_INFO_SIZE_4;
|
||||
|
||||
FUNC_LEAVE_NOAPI(SUCCEED)
|
||||
} /* H5S_point_set_info_size() */
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
NAME
|
||||
@ -760,8 +847,9 @@ done:
|
||||
Determine the number of bytes needed to store the serialized point selection
|
||||
information.
|
||||
USAGE
|
||||
hssize_t H5S_point_serial_size(space)
|
||||
hssize_t H5S_point_serial_size(space, f)
|
||||
H5S_t *space; IN: Dataspace pointer to query
|
||||
H5F_t *f; IN: File pointer
|
||||
RETURNS
|
||||
The number of bytes required on success, negative on an error.
|
||||
DESCRIPTION
|
||||
@ -773,29 +861,54 @@ done:
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static hssize_t
|
||||
H5S_point_serial_size (const H5S_t *space)
|
||||
H5S_point_serial_size (const H5S_t *space, H5F_t *f)
|
||||
{
|
||||
H5S_pnt_node_t *curr; /* Point information nodes */
|
||||
hsize_t bounds_start[H5S_MAX_RANK];
|
||||
hsize_t bounds_end[H5S_MAX_RANK];
|
||||
uint32_t version; /* Version number */
|
||||
uint8_t point_size; /* Size of point info */
|
||||
hssize_t ret_value = -1; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
HDassert(space);
|
||||
|
||||
/* Basic number of bytes required to serialize point selection:
|
||||
/* Get bounding box for the selection */
|
||||
HDmemset(bounds_end, 0, sizeof(bounds_end));
|
||||
if(H5S_point_bounds(space, bounds_start, bounds_end) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't get selection bounds")
|
||||
|
||||
/* Determine the version */
|
||||
if(H5S_point_set_version(space, bounds_end, f, &version) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't determine hyper version")
|
||||
|
||||
/* Determine the size of point info */
|
||||
if(H5S_point_set_info_size(space, bounds_end, version, &point_size) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't determine hyper version")
|
||||
|
||||
HDassert(version == H5S_POINT_VERSION_1);
|
||||
HDassert(point_size == H5S_INFO_SIZE_4);
|
||||
|
||||
/* Basic number of bytes required to serialize point selection: */
|
||||
/*
|
||||
* <type (4 bytes)> + <version (4 bytes)> + <padding (4 bytes)> +
|
||||
* <length (4 bytes)> + <rank (4 bytes)> + <# of points (4 bytes)> = 24 bytes
|
||||
* <length (4 bytes)> + <rank (4 bytes)>
|
||||
*/
|
||||
ret_value = 24;
|
||||
ret_value=20;
|
||||
|
||||
/* <num points (depend on point_size)> */
|
||||
ret_value += point_size;
|
||||
|
||||
/* Count points in selection */
|
||||
curr=space->select.sel_info.pnt_lst->head;
|
||||
while(curr!=NULL) {
|
||||
/* Add 4 bytes times the rank for each element selected */
|
||||
ret_value+=4*space->extent.rank;
|
||||
curr=curr->next;
|
||||
/* Add <point_size> bytes times the rank for each element selected */
|
||||
ret_value += point_size * space->extent.rank;
|
||||
curr = curr->next;
|
||||
} /* end while */
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5S_point_serial_size() */
|
||||
|
||||
@ -806,11 +919,12 @@ H5S_point_serial_size (const H5S_t *space)
|
||||
PURPOSE
|
||||
Serialize the current selection into a user-provided buffer.
|
||||
USAGE
|
||||
herr_t H5S_point_serialize(space, p)
|
||||
herr_t H5S_point_serialize(space, p, f)
|
||||
const H5S_t *space; IN: Dataspace with selection to serialize
|
||||
uint8_t **p; OUT: Pointer to buffer to put serialized
|
||||
selection. Will be advanced to end of
|
||||
serialized selection.
|
||||
H5F_t *f; IN: File pointer
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
DESCRIPTION
|
||||
@ -822,41 +936,63 @@ H5S_point_serial_size (const H5S_t *space)
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
static herr_t
|
||||
H5S_point_serialize (const H5S_t *space, uint8_t **p)
|
||||
H5S_point_serialize (const H5S_t *space, uint8_t **p, H5F_t *f)
|
||||
{
|
||||
H5S_pnt_node_t *curr; /* Point information nodes */
|
||||
uint8_t *pp = (*p); /* Local pointer for decoding */
|
||||
uint8_t *lenp; /* pointer to length location for later storage */
|
||||
uint32_t len=0; /* number of bytes used */
|
||||
unsigned u; /* local counting variable */
|
||||
uint32_t version; /* Version number */
|
||||
uint8_t point_size; /* Size of point info */
|
||||
hsize_t bounds_start[H5S_MAX_RANK];
|
||||
hsize_t bounds_end[H5S_MAX_RANK];
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
/* Check args */
|
||||
HDassert(space);
|
||||
HDassert(p);
|
||||
HDassert(pp);
|
||||
|
||||
/* Get bounding box for the selection */
|
||||
HDmemset(bounds_end, 0, sizeof(bounds_end));
|
||||
if(H5S_point_bounds(space, bounds_start, bounds_end) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't get selection bounds")
|
||||
|
||||
/* Determine the version */
|
||||
if(H5S_point_set_version(space, bounds_end, f, &version) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't determine hyper version")
|
||||
|
||||
/* Determine the size of point info */
|
||||
if(H5S_point_set_info_size(space, bounds_end, version, &point_size) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't determine hyper version")
|
||||
|
||||
HDassert(point_size == H5S_INFO_SIZE_4);
|
||||
HDassert(version == H5S_POINT_VERSION_1);
|
||||
|
||||
/* Store the preamble information */
|
||||
UINT32ENCODE(pp, (uint32_t)H5S_GET_SELECT_TYPE(space)); /* Store the type of selection */
|
||||
UINT32ENCODE(pp, (uint32_t)1); /* Store the version number */
|
||||
UINT32ENCODE(pp, version); /* Store the version number */
|
||||
|
||||
UINT32ENCODE(pp, (uint32_t)0); /* Store the un-used padding */
|
||||
lenp = pp; /* Keep the pointer to the length location for later */
|
||||
pp += 4; /* Skip over space for length */
|
||||
lenp = pp; /* Keep the pointer to the length location for later */
|
||||
pp += 4; /* Skip over space for length */
|
||||
len += 8; /* Add in advance # of bytes for num of dimensions and num elements */
|
||||
|
||||
/* Encode number of dimensions */
|
||||
UINT32ENCODE(pp, (uint32_t)space->extent.rank);
|
||||
len+=4;
|
||||
|
||||
|
||||
/* Encode number of elements */
|
||||
UINT32ENCODE(pp, (uint32_t)space->select.num_elem);
|
||||
len+=4;
|
||||
|
||||
/* Encode each point in selection */
|
||||
curr=space->select.sel_info.pnt_lst->head;
|
||||
while(curr!=NULL) {
|
||||
/* Add 4 bytes times the rank for each element selected */
|
||||
len+=4*space->extent.rank;
|
||||
len += 4 * space->extent.rank;
|
||||
|
||||
/* Encode each point */
|
||||
for(u=0; u<space->extent.rank; u++)
|
||||
@ -871,7 +1007,8 @@ H5S_point_serialize (const H5S_t *space, uint8_t **p)
|
||||
/* Update encoding pointer */
|
||||
*p = pp;
|
||||
|
||||
FUNC_LEAVE_NOAPI(SUCCEED)
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5S_point_serialize() */
|
||||
|
||||
|
||||
@ -906,7 +1043,7 @@ H5S_point_deserialize(H5S_t *space, uint32_t H5_ATTR_UNUSED version, uint8_t H5_
|
||||
H5S_seloper_t op = H5S_SELECT_SET; /* Selection operation */
|
||||
hsize_t *coord = NULL, *tcoord; /* Pointer to array of elements */
|
||||
const uint8_t *pp = (*p); /* Local pointer for decoding */
|
||||
size_t num_elem = 0; /* Number of elements in selection */
|
||||
hsize_t num_elem = 0; /* Number of elements in selection */
|
||||
unsigned rank; /* Rank of points */
|
||||
unsigned i, j; /* local counting variables */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -1620,7 +1757,7 @@ H5Sselect_elements(hid_t spaceid, H5S_seloper_t op, size_t num_elem,
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "unsupported operation attempted")
|
||||
|
||||
/* Call the real element selection routine */
|
||||
if((ret_value = H5S_select_elements(space, op, num_elem, coord)) < 0)
|
||||
if((ret_value = H5S_select_elements(space, op, (hsize_t)num_elem, coord)) < 0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't select elements")
|
||||
|
||||
done:
|
||||
|
@ -148,8 +148,9 @@ typedef struct H5S_sel_iter_op_t {
|
||||
#define H5S_GET_SELECT_TYPE(S) ((S)->select.type->type)
|
||||
#define H5S_SELECT_GET_SEQ_LIST(S,FLAGS,ITER,MAXSEQ,MAXBYTES,NSEQ,NBYTES,OFF,LEN) ((*(S)->select.type->get_seq_list)(S,FLAGS,ITER,MAXSEQ,MAXBYTES,NSEQ,NBYTES,OFF,LEN))
|
||||
#define H5S_SELECT_VALID(S) ((*(S)->select.type->is_valid)(S))
|
||||
#define H5S_SELECT_SERIAL_SIZE(S) ((*(S)->select.type->serial_size)(S))
|
||||
#define H5S_SELECT_SERIALIZE(S,BUF) ((*(S)->select.type->serialize)(S,BUF))
|
||||
#define H5S_SELECT_RELEASE(S) ((*(S)->select.type->release)(S))
|
||||
#define H5S_SELECT_SERIAL_SIZE(S,F) ((*(S)->select.type->serial_size)(S,F))
|
||||
#define H5S_SELECT_SERIALIZE(S,BUF,F) ((*(S)->select.type->serialize)(S,BUF,F))
|
||||
#define H5S_SELECT_BOUNDS(S,START,END) ((*(S)->select.type->bounds)(S,START,END))
|
||||
#define H5S_SELECT_OFFSET(S, OFFSET) ((*(S)->select.type->offset)(S, OFFSET))
|
||||
#define H5S_SELECT_IS_CONTIGUOUS(S) ((*(S)->select.type->is_contiguous)(S))
|
||||
@ -173,8 +174,9 @@ typedef struct H5S_sel_iter_op_t {
|
||||
#define H5S_GET_SELECT_TYPE(S) (H5S_get_select_type(S))
|
||||
#define H5S_SELECT_GET_SEQ_LIST(S,FLAGS,ITER,MAXSEQ,MAXBYTES,NSEQ,NBYTES,OFF,LEN) (H5S_select_get_seq_list(S,FLAGS,ITER,MAXSEQ,MAXBYTES,NSEQ,NBYTES,OFF,LEN))
|
||||
#define H5S_SELECT_VALID(S) (H5S_select_valid(S))
|
||||
#define H5S_SELECT_SERIAL_SIZE(S) (H5S_select_serial_size(S))
|
||||
#define H5S_SELECT_SERIALIZE(S,BUF) (H5S_select_serialize(S,BUF))
|
||||
#define H5S_SELECT_RELEASE(S) (H5S_select_release(S))
|
||||
#define H5S_SELECT_SERIAL_SIZE(S,F) (H5S_select_serial_size(S,F))
|
||||
#define H5S_SELECT_SERIALIZE(S,BUF,F) (H5S_select_serialize(S,BUF,F))
|
||||
#define H5S_SELECT_BOUNDS(S,START,END) (H5S_get_select_bounds(S,START,END))
|
||||
#define H5S_SELECT_OFFSET(S, OFFSET) (H5S_get_select_offset(S, OFFSET))
|
||||
#define H5S_SELECT_IS_CONTIGUOUS(S) (H5S_select_is_contiguous(S))
|
||||
@ -193,7 +195,6 @@ typedef struct H5S_sel_iter_op_t {
|
||||
#endif /* H5S_MODULE */
|
||||
/* Handle these callbacks in a special way, since they have prologs that need to be executed */
|
||||
#define H5S_SELECT_COPY(DST,SRC,SHARE) (H5S_select_copy(DST,SRC,SHARE))
|
||||
#define H5S_SELECT_RELEASE(S) (H5S_select_release(S))
|
||||
#define H5S_SELECT_DESERIALIZE(S,BUF) (H5S_select_deserialize(S,BUF))
|
||||
|
||||
|
||||
@ -219,7 +220,7 @@ H5_DLL herr_t H5S_get_validated_dataspace(hid_t space_id, const H5S_t **space/*o
|
||||
H5_DLL H5S_t *H5S_create_simple(unsigned rank, const hsize_t dims[/*rank*/],
|
||||
const hsize_t maxdims[/*rank*/]);
|
||||
H5_DLL herr_t H5S_set_version(H5F_t *f, H5S_t *ds);
|
||||
H5_DLL herr_t H5S_encode(H5S_t *obj, unsigned char **p, size_t *nalloc);
|
||||
H5_DLL herr_t H5S_encode(H5S_t *obj, unsigned char **p, size_t *nalloc, hid_t fapl_id);
|
||||
H5_DLL H5S_t *H5S_decode(const unsigned char **p);
|
||||
H5_DLL herr_t H5S_debug(H5F_t *f, const void *_mesg, FILE *stream, int indent,
|
||||
int fwidth);
|
||||
@ -254,8 +255,8 @@ H5_DLL herr_t H5S_select_release(H5S_t *ds);
|
||||
H5_DLL herr_t H5S_select_get_seq_list(const H5S_t *space, unsigned flags,
|
||||
H5S_sel_iter_t *iter, size_t maxseq, size_t maxbytes,
|
||||
size_t *nseq, size_t *nbytes, hsize_t *off, size_t *len);
|
||||
H5_DLL hssize_t H5S_select_serial_size(const H5S_t *space);
|
||||
H5_DLL herr_t H5S_select_serialize(const H5S_t *space, uint8_t **p);
|
||||
H5_DLL hssize_t H5S_select_serial_size(const H5S_t *space, H5F_t *f);
|
||||
H5_DLL herr_t H5S_select_serialize(const H5S_t *space, uint8_t **p, H5F_t *f);
|
||||
H5_DLL htri_t H5S_select_is_contiguous(const H5S_t *space);
|
||||
H5_DLL htri_t H5S_select_is_single(const H5S_t *space);
|
||||
H5_DLL htri_t H5S_select_is_regular(const H5S_t *space);
|
||||
@ -275,7 +276,7 @@ H5_DLL herr_t H5S_select_none(H5S_t *space);
|
||||
|
||||
/* Operations on point selections */
|
||||
H5_DLL herr_t H5S_select_elements(H5S_t *space, H5S_seloper_t op,
|
||||
size_t num_elem, const hsize_t *coord);
|
||||
hsize_t num_elem, const hsize_t *coord);
|
||||
|
||||
/* Operations on hyperslab selections */
|
||||
H5_DLL herr_t H5S_select_hyperslab(H5S_t *space, H5S_seloper_t op, const hsize_t start[],
|
||||
@ -305,7 +306,7 @@ H5_DLL hsize_t H5S_hyper_get_first_inc_block(const H5S_t *space,
|
||||
H5_DLL herr_t H5S_select_iter_init(H5S_sel_iter_t *iter, const H5S_t *space, size_t elmt_size);
|
||||
H5_DLL herr_t H5S_select_iter_coords(const H5S_sel_iter_t *sel_iter, hsize_t *coords);
|
||||
H5_DLL hsize_t H5S_select_iter_nelmts(const H5S_sel_iter_t *sel_iter);
|
||||
H5_DLL herr_t H5S_select_iter_next(H5S_sel_iter_t *sel_iter, size_t nelem);
|
||||
H5_DLL herr_t H5S_select_iter_next(H5S_sel_iter_t *sel_iter, hsize_t nelem);
|
||||
H5_DLL herr_t H5S_select_iter_release(H5S_sel_iter_t *sel_iter);
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
|
@ -223,7 +223,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
hssize_t
|
||||
H5S_select_serial_size(const H5S_t *space)
|
||||
H5S_select_serial_size(const H5S_t *space, H5F_t *f)
|
||||
{
|
||||
hssize_t ret_value = -1; /* Return value */
|
||||
|
||||
@ -232,7 +232,7 @@ H5S_select_serial_size(const H5S_t *space)
|
||||
HDassert(space);
|
||||
|
||||
/* Call the selection type's serial_size function */
|
||||
ret_value=(*space->select.type->serial_size)(space);
|
||||
ret_value=(*space->select.type->serial_size)(space, f);
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5S_select_serial_size() */
|
||||
@ -249,6 +249,7 @@ H5S_select_serial_size(const H5S_t *space)
|
||||
uint8_t **p; OUT: Pointer to buffer to put serialized
|
||||
selection. Will be advanced to end of
|
||||
serialized selection.
|
||||
H5F_t *f; IN: File pointer
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
DESCRIPTION
|
||||
@ -263,7 +264,7 @@ H5S_select_serial_size(const H5S_t *space)
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
herr_t
|
||||
H5S_select_serialize(const H5S_t *space, uint8_t **p)
|
||||
H5S_select_serialize(const H5S_t *space, uint8_t **p, H5F_t *f)
|
||||
{
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
|
||||
@ -273,7 +274,7 @@ H5S_select_serialize(const H5S_t *space, uint8_t **p)
|
||||
HDassert(p);
|
||||
|
||||
/* Call the selection type's serialize function */
|
||||
ret_value=(*space->select.type->serialize)(space,p);
|
||||
ret_value=(*space->select.type->serialize)(space,p,f);
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5S_select_serialize() */
|
||||
@ -1222,7 +1223,7 @@ H5S_select_iter_has_next_block(const H5S_sel_iter_t *iter)
|
||||
USAGE
|
||||
herr_t H5S_select_iter_next(iter, nelem)
|
||||
H5S_sel_iter_t *iter; IN/OUT: Selection iterator to change
|
||||
size_t nelem; IN: Number of elements to advance by
|
||||
hsize_t nelem; IN: Number of elements to advance by
|
||||
RETURNS
|
||||
Non-negative on success, negative on failure.
|
||||
DESCRIPTION
|
||||
@ -1237,7 +1238,7 @@ H5S_select_iter_has_next_block(const H5S_sel_iter_t *iter)
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
herr_t
|
||||
H5S_select_iter_next(H5S_sel_iter_t *iter, size_t nelem)
|
||||
H5S_select_iter_next(H5S_sel_iter_t *iter, hsize_t nelem)
|
||||
{
|
||||
herr_t ret_value = FAIL; /* Return value */
|
||||
|
||||
|
@ -2961,7 +2961,7 @@ H5T_encode(H5T_t *obj, unsigned char *buf, size_t *nalloc)
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
/* Allocate "fake" file structure */
|
||||
if(NULL == (f = H5F_fake_alloc((uint8_t)0)))
|
||||
if(NULL == (f = H5F_fake_alloc((uint8_t)0, H5P_FILE_ACCESS_DEFAULT)))
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTALLOC, FAIL, "can't allocate fake file struct")
|
||||
|
||||
/* Find out the size of buffer needed */
|
||||
@ -3016,7 +3016,7 @@ H5T_decode(size_t buf_size, const unsigned char *buf)
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
/* Allocate "fake" file structure */
|
||||
if(NULL == (f = H5F_fake_alloc((uint8_t)0)))
|
||||
if(NULL == (f = H5F_fake_alloc((uint8_t)0, H5P_FILE_ACCESS_DEFAULT)))
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTALLOC, NULL, "can't allocate fake file struct")
|
||||
|
||||
/* Decode the type of the information */
|
||||
|
@ -92,11 +92,11 @@ extern "C" {
|
||||
|
||||
/* Version numbers */
|
||||
#define H5_VERS_MAJOR 1 /* For major interface/format changes */
|
||||
#define H5_VERS_MINOR 11 /* For minor interface/format changes */
|
||||
#define H5_VERS_RELEASE 2 /* For tweaks, bug-fixes, or development */
|
||||
#define H5_VERS_SUBRELEASE "" /* For pre-releases like snap0 */
|
||||
#define H5_VERS_MINOR 10 /* For minor interface/format changes */
|
||||
#define H5_VERS_RELEASE 3 /* For tweaks, bug-fixes, or development */
|
||||
#define H5_VERS_SUBRELEASE "snap4" /* For pre-releases like snap0 */
|
||||
/* Empty string for real releases. */
|
||||
#define H5_VERS_INFO "HDF5 library version: 1.11.2" /* Full version string */
|
||||
#define H5_VERS_INFO "HDF5 library version: 1.10.3-snap4" /* Full version string */
|
||||
|
||||
#define H5check() H5check_version(H5_VERS_MAJOR,H5_VERS_MINOR, \
|
||||
H5_VERS_RELEASE)
|
||||
|
@ -4967,7 +4967,7 @@ test_libver_bounds_real(H5F_libver_t libver_create, unsigned oh_vers_create,
|
||||
#define VERBFNAME "tverbounds_dspace.h5"
|
||||
#define VERBDSNAME "dataset 1"
|
||||
#define SPACE1_DIM1 3
|
||||
static void
|
||||
static int
|
||||
test_libver_bounds_open(void)
|
||||
{
|
||||
hid_t file = -1; /* File ID */
|
||||
|
194
test/th5s.c
194
test/th5s.c
@ -93,6 +93,10 @@ struct space4_struct {
|
||||
char c2;
|
||||
} space4_data={'v',987123,-3.14F,'g'}; /* Test data for 4th dataspace */
|
||||
|
||||
|
||||
/* Used in test_h5s_encode_irregular_exceed32() and test_h5s_encode_points_exceed32() */
|
||||
#define POWER32 4294967296 /* 2^32 */
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_h5s_basic(): Test basic H5S (dataspace) code.
|
||||
@ -2502,6 +2506,188 @@ test_versionbounds(void)
|
||||
} /* end test_versionbounds() */
|
||||
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_h5s_encode_regular_exceed32():
|
||||
** Test to verify HDFFV-9947 is fixed.
|
||||
** Verify that selection encoding that exceeds (2^32 - 1)
|
||||
** (32 bit integer limit) is correctly encoded.
|
||||
**
|
||||
** Note: See encoding changes for 1.10 in
|
||||
** "RFC: H5Sencode/H5Sdecode Format Change".
|
||||
**
|
||||
****************************************************************/
|
||||
static void
|
||||
test_h5s_encode_regular_exceed32(void)
|
||||
{
|
||||
hid_t sid; /* Dataspace ID */
|
||||
hid_t decoded_sid; /* Dataspace ID from H5Sdecode */
|
||||
size_t sbuf_size=0; /* Buffer size for H5Sencode */
|
||||
unsigned char *sbuf=NULL; /* Buffer for H5Sencode */
|
||||
hssize_t num; /* Number of elements in the dataspace selection */
|
||||
hssize_t decoded_num; /* Number of elements in the dataspace selection from H5Sdeocde */
|
||||
hsize_t numparticles = 8388608;
|
||||
unsigned num_dsets = 513;
|
||||
hsize_t total_particles = numparticles * num_dsets;
|
||||
hsize_t vdsdims[1] = {total_particles};
|
||||
hsize_t start, count, block;
|
||||
herr_t ret; /* Generic return value */
|
||||
|
||||
MESSAGE(5, ("Testing Dataspace encoding regular hyperslabs that exceeds 32 bits\n"));
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Test encoding and decoding of simple dataspace and hyperslab selection.
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
sid = H5Screate_simple(1, vdsdims, NULL);
|
||||
CHECK(sid, FAIL, "H5Screate_simple");
|
||||
|
||||
start = 0;
|
||||
block = total_particles;
|
||||
count = 1;
|
||||
|
||||
ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, &start, NULL, &count, &block);
|
||||
CHECK(ret, FAIL, "H5Sselect_hyperslab");
|
||||
|
||||
/* Encode simple data space in a buffer */
|
||||
ret = H5Sencode(sid, NULL, &sbuf_size);
|
||||
CHECK(ret, FAIL, "H5Sencode2");
|
||||
|
||||
if(sbuf_size > 0) {
|
||||
sbuf = (unsigned char*)HDcalloc((size_t)1, sbuf_size);
|
||||
CHECK(sbuf, NULL, "H5Sencode");
|
||||
}
|
||||
|
||||
/* The version used for encoding should be 2 */
|
||||
ret = H5Sencode(sid, sbuf, &sbuf_size);
|
||||
CHECK(ret, FAIL, "H5Sencode");
|
||||
VERIFY((uint32_t)sbuf[35], 2, "Version for regular hyperslab that exceeds 32 bits");
|
||||
|
||||
/* Decode from the dataspace buffer and return an object handle */
|
||||
decoded_sid = H5Sdecode(sbuf);
|
||||
CHECK(decoded_sid, FAIL, "H5Sdecode");
|
||||
|
||||
/* Verify the decoded dataspace */
|
||||
decoded_num = H5Sget_select_npoints(decoded_sid);
|
||||
CHECK(decoded_num, FAIL, "H5Sget_select_npoints");
|
||||
|
||||
num = H5Sget_select_npoints(sid);
|
||||
CHECK(num, FAIL, "H5Sget_select_npoints");
|
||||
|
||||
VERIFY(num, decoded_num, "H5Sget_select_npoints");
|
||||
|
||||
ret = H5Sclose(decoded_sid);
|
||||
CHECK(ret, FAIL, "H5Sclose");
|
||||
|
||||
if(sbuf)
|
||||
HDfree(sbuf);
|
||||
|
||||
ret = H5Sclose(sid);
|
||||
CHECK(ret, FAIL, "H5Sclose");
|
||||
|
||||
} /* test_h5s_encode_regular_exceed32() */
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_h5s_encode_irregular_exceed32():
|
||||
** This test verifies that 1.10 H5Sencode() will fail for
|
||||
** irregular hyperslab selection that exceeds 32 bits.
|
||||
**
|
||||
** Note: See encoding changes for 1.10 in
|
||||
** "RFC: H5Sencode/H5Sdecode Format Change".
|
||||
**
|
||||
****************************************************************/
|
||||
static void
|
||||
test_h5s_encode_irregular_exceed32(void)
|
||||
{
|
||||
hid_t sid; /* Dataspace ID */
|
||||
hsize_t numparticles = 8388608;
|
||||
unsigned num_dsets = 513;
|
||||
hsize_t total_particles = numparticles * num_dsets;
|
||||
hsize_t vdsdims[1] = {total_particles}; /* Dimension size */
|
||||
hsize_t start, stride, count, block; /* Selection info */
|
||||
size_t sbuf_size=0; /* Buffer size for H5Sencode */
|
||||
htri_t is_regular; /* Is this a regular hyperslab */
|
||||
herr_t ret; /* Generic return value */
|
||||
|
||||
/* Output message about test being performed */
|
||||
MESSAGE(5, ("Testing Dataspace encoding irregular hyperslab that exceeds 32 bits\n"));
|
||||
|
||||
sid = H5Screate_simple(1, vdsdims, NULL);
|
||||
CHECK(sid, FAIL, "H5Screate_simple");
|
||||
|
||||
start = 0;
|
||||
block = total_particles;
|
||||
count = 1;
|
||||
|
||||
ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, &start, NULL, &count, &block);
|
||||
CHECK(ret, FAIL, "H5Sselect_hyperslab");
|
||||
|
||||
start = 8;
|
||||
count = 5;
|
||||
block = 2;
|
||||
stride = POWER32;
|
||||
|
||||
ret = H5Sselect_hyperslab(sid, H5S_SELECT_OR, &start, &stride, &count, &block);
|
||||
CHECK(ret, FAIL, "H5Sselect_hyperslab");
|
||||
|
||||
/* Should be irregular hyperslab */
|
||||
is_regular = H5Sis_regular_hyperslab(sid);
|
||||
VERIFY(is_regular, FALSE, "H5Sis_regular_hyperslab");
|
||||
|
||||
/* Should fail because selection exceeds 32 bits */
|
||||
ret = H5Sencode(sid, NULL, &sbuf_size);
|
||||
VERIFY(ret, FAIL, "H5Sencode");
|
||||
|
||||
ret = H5Sclose(sid);
|
||||
CHECK(ret, FAIL, "H5Sclose");
|
||||
|
||||
} /* test_h5s_encode_irregular_exceed32() */
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_h5s_encode_points_exceed32():
|
||||
** This test verifies that 1.10 H5Sencode() will fail for
|
||||
** point selection that exceeds 32 bits.
|
||||
**
|
||||
** Note: See encoding changes for 1.10 in
|
||||
** "RFC: H5Sencode/H5Sdecode Format Change".
|
||||
**
|
||||
****************************************************************/
|
||||
static void
|
||||
test_h5s_encode_points_exceed32(void)
|
||||
{
|
||||
hid_t sid; /* Dataspace ID */
|
||||
hsize_t numparticles = 8388608;
|
||||
unsigned num_dsets = 513;
|
||||
hsize_t total_particles = numparticles * num_dsets;
|
||||
hsize_t vdsdims[1] = {total_particles}; /* Dimension size */
|
||||
hsize_t coord[4]; /* The point coordinates */
|
||||
size_t sbuf_size=0; /* Buffer size for H5Sencode */
|
||||
herr_t ret; /* Generic return value */
|
||||
|
||||
/* Output message about test being performed */
|
||||
MESSAGE(5, ("Testing Dataspace encoding points selection that exceeds 32 bits\n"));
|
||||
|
||||
sid = H5Screate_simple(1, vdsdims, NULL);
|
||||
CHECK(sid, FAIL, "H5Screate_simple");
|
||||
|
||||
coord[0] = 5;
|
||||
coord[1] = 15;
|
||||
coord[2] = POWER32;
|
||||
coord[3] = 19;
|
||||
ret = H5Sselect_elements(sid, H5S_SELECT_SET, (size_t)4, coord);
|
||||
CHECK(ret, FAIL, "H5Sselect_elements");
|
||||
|
||||
/* Should fail because selection exceeds 32 bits */
|
||||
ret = H5Sencode(sid, NULL, &sbuf_size);
|
||||
VERIFY(ret, FAIL, "H5Sencode");
|
||||
|
||||
ret = H5Sclose(sid);
|
||||
CHECK(ret, FAIL, "H5Sclose");
|
||||
|
||||
} /* test_h5s_encode_points_exceed32() */
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_h5s(): Main H5S (dataspace) testing routine.
|
||||
@ -2517,8 +2703,12 @@ test_h5s(void)
|
||||
test_h5s_null(); /* Test Null dataspace H5S code */
|
||||
test_h5s_zero_dim(); /* Test dataspace with zero dimension size */
|
||||
test_h5s_encode(); /* Test encoding and decoding */
|
||||
test_h5s_scalar_write(); /* Test scalar H5S writing code */
|
||||
test_h5s_scalar_read(); /* Test scalar H5S reading code */
|
||||
test_h5s_encode_regular_exceed32(); /* Test encoding regular hyperslab selection that exceeds 32 bits */
|
||||
test_h5s_encode_irregular_exceed32(); /* Testing encoding irregular hyperslab selection that exceeds 32 bits */
|
||||
test_h5s_encode_points_exceed32(); /* Testing encoding point selection that exceeds 32 bits */
|
||||
|
||||
test_h5s_scalar_write(); /* Test scalar H5S writing code */
|
||||
test_h5s_scalar_read(); /* Test scalar H5S reading code */
|
||||
|
||||
test_h5s_compound_scalar_write(); /* Test compound datatype scalar H5S writing code */
|
||||
test_h5s_compound_scalar_read(); /* Test compound datatype scalar H5S reading code */
|
||||
|
178
test/trefer.c
178
test/trefer.c
@ -490,46 +490,70 @@ test_reference_obj(void)
|
||||
** test_reference_region(): Test basic H5R (reference) object reference code.
|
||||
** Tests references to various kinds of objects
|
||||
**
|
||||
** Add test to verify that dataspace selection exceeding
|
||||
** 32 bits is correctly encoded and referenced.
|
||||
**
|
||||
** Note: The "new_format" parameter is added to create the file with
|
||||
** either the old or latest format. This is done so that the
|
||||
** 1.10 encoding of dataspace selection for H5R_DATASET_REGION
|
||||
** in the internal library will be done according to the file
|
||||
** format setting in fapl.
|
||||
** See encoding changes for 1.10 in
|
||||
** "RFC: H5Sencode/H5Sdecode Format Change".
|
||||
**
|
||||
****************************************************************/
|
||||
static void
|
||||
test_reference_region(void)
|
||||
test_reference_region(hbool_t new_format)
|
||||
{
|
||||
hid_t fid1; /* HDF5 File IDs */
|
||||
hid_t dset1, /* Dataset ID */
|
||||
dset2; /* Dereferenced dataset ID */
|
||||
hid_t sid1, /* Dataspace ID #1 */
|
||||
sid2; /* Dataspace ID #2 */
|
||||
hid_t dapl_id; /* Dataset access property list */
|
||||
hsize_t dims1[] = {SPACE1_DIM1},
|
||||
dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
|
||||
hsize_t start[SPACE2_RANK]; /* Starting location of hyperslab */
|
||||
hsize_t stride[SPACE2_RANK]; /* Stride of hyperslab */
|
||||
hsize_t count[SPACE2_RANK]; /* Element count of hyperslab */
|
||||
hsize_t block[SPACE2_RANK]; /* Block size of hyperslab */
|
||||
hsize_t coord1[POINT1_NPOINTS][SPACE2_RANK]; /* Coordinates for point selection */
|
||||
hsize_t * coords; /* Coordinate buffer */
|
||||
hsize_t low[SPACE2_RANK]; /* Selection bounds */
|
||||
hsize_t high[SPACE2_RANK]; /* Selection bounds */
|
||||
hdset_reg_ref_t *wbuf, /* buffer to write to disk */
|
||||
*rbuf; /* buffer read from disk */
|
||||
hdset_reg_ref_t nvrbuf[3]={{0},{101},{255}}; /* buffer with non-valid refs */
|
||||
uint8_t *dwbuf, /* Buffer for writing numeric data to disk */
|
||||
*drbuf; /* Buffer for reading numeric data from disk */
|
||||
uint8_t *tu8; /* Temporary pointer to uint8 data */
|
||||
H5O_type_t obj_type; /* Type of object */
|
||||
int i, j; /* counting variables */
|
||||
hssize_t hssize_ret; /* hssize_t return value */
|
||||
htri_t tri_ret; /* htri_t return value */
|
||||
herr_t ret; /* Generic return value */
|
||||
haddr_t addr = HADDR_UNDEF; /* test for undefined reference */
|
||||
hid_t dset_NA; /* Dataset id for undefined reference */
|
||||
hid_t space_NA; /* Dataspace id for undefined reference */
|
||||
hsize_t dims_NA[1] = {1}; /* Dims array for undefined reference */
|
||||
hdset_reg_ref_t wdata_NA[1], /* Write buffer */
|
||||
rdata_NA[1]; /* Read buffer */
|
||||
hid_t fid1; /* HDF5 File IDs */
|
||||
hid_t fapl = -1; /* File access property list */
|
||||
hid_t dset1, /* Dataset ID */
|
||||
dset2, /* Dereferenced dataset ID */
|
||||
dset3; /* Dereferenced dataset ID */
|
||||
hid_t sid1, /* Dataspace ID #1 */
|
||||
sid2, /* Dataspace ID #2 */
|
||||
sid3; /* Dataspace ID #3 */
|
||||
hid_t dapl_id; /* Dataset access property list */
|
||||
hsize_t dims1[] = {SPACE1_DIM1},
|
||||
dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
|
||||
hsize_t start[SPACE2_RANK]; /* Starting location of hyperslab */
|
||||
hsize_t stride[SPACE2_RANK]; /* Stride of hyperslab */
|
||||
hsize_t count[SPACE2_RANK]; /* Element count of hyperslab */
|
||||
hsize_t block[SPACE2_RANK]; /* Block size of hyperslab */
|
||||
hsize_t coord1[POINT1_NPOINTS][SPACE2_RANK]; /* Coordinates for point selection */
|
||||
hsize_t *coords; /* Coordinate buffer */
|
||||
hsize_t low[SPACE2_RANK]; /* Selection bounds */
|
||||
hsize_t high[SPACE2_RANK]; /* Selection bounds */
|
||||
hdset_reg_ref_t *wbuf, /* buffer to write to disk */
|
||||
*rbuf; /* buffer read from disk */
|
||||
hdset_reg_ref_t nvrbuf[3]={{0},{101},{255}}; /* buffer with non-valid refs */
|
||||
uint8_t *dwbuf, /* Buffer for writing numeric data to disk */
|
||||
*drbuf; /* Buffer for reading numeric data from disk */
|
||||
uint8_t *tu8; /* Temporary pointer to uint8 data */
|
||||
H5O_type_t obj_type; /* Type of object */
|
||||
int i, j; /* counting variables */
|
||||
hssize_t hssize_ret; /* hssize_t return value */
|
||||
htri_t tri_ret; /* htri_t return value */
|
||||
herr_t ret; /* Generic return value */
|
||||
haddr_t addr = HADDR_UNDEF; /* test for undefined reference */
|
||||
hid_t dset_NA; /* Dataset id for undefined reference */
|
||||
hid_t space_NA; /* Dataspace id for undefined reference */
|
||||
hsize_t dims_NA[1] = {1}; /* Dims array for undefined reference */
|
||||
hdset_reg_ref_t wdata_NA[1], /* Write buffer */
|
||||
rdata_NA[1]; /* Read buffer */
|
||||
hsize_t numparticles = 8388608;
|
||||
hsize_t ret_particles;
|
||||
unsigned num_dsets = 513;
|
||||
hsize_t total_particles = numparticles * num_dsets;
|
||||
hsize_t vdsdims[1] = {total_particles};
|
||||
hsize_t start3, count3, block3;
|
||||
|
||||
/* Output message about test being performed */
|
||||
MESSAGE(5, ("Testing Dataset Region Reference Functions\n"));
|
||||
if(new_format) {
|
||||
MESSAGE(5, ("Testing Dataset Region Reference Functions for new format\n"));
|
||||
} else {
|
||||
MESSAGE(5, ("Testing Dataset Region Reference Functions for old format\n"));
|
||||
}
|
||||
|
||||
/* Allocate write & read buffers */
|
||||
wbuf = (hdset_reg_ref_t *)HDcalloc(sizeof(hdset_reg_ref_t), (size_t)SPACE1_DIM1);
|
||||
@ -537,8 +561,16 @@ test_reference_region(void)
|
||||
dwbuf = (uint8_t *)HDmalloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2);
|
||||
drbuf = (uint8_t *)HDcalloc(sizeof(uint8_t), (size_t)(SPACE2_DIM1 * SPACE2_DIM2));
|
||||
|
||||
/* Set to use the latest file format */
|
||||
fapl = H5Pcreate(H5P_FILE_ACCESS);
|
||||
CHECK(fapl, FAIL, "H5Pcreate");
|
||||
if(new_format) {
|
||||
ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST);
|
||||
CHECK(ret, FAIL, "H5Pset_libver_bounds");
|
||||
}
|
||||
|
||||
/* Create file */
|
||||
fid1 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
fid1 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
|
||||
CHECK(fid1, FAIL, "H5Fcreate");
|
||||
|
||||
/* Create dataspace for datasets */
|
||||
@ -564,11 +596,30 @@ test_reference_region(void)
|
||||
ret = H5Dclose(dset2);
|
||||
CHECK(ret, FAIL, "H5Dclose");
|
||||
|
||||
/* Create dataspace with selection exceeding 32 bits */
|
||||
sid3 = H5Screate_simple(1, vdsdims, NULL);
|
||||
CHECK(sid3, FAIL, "H5Screate_simple");
|
||||
|
||||
start3 = 0;
|
||||
block3 = total_particles;
|
||||
count3 = 1;
|
||||
|
||||
ret = H5Sselect_hyperslab(sid3, H5S_SELECT_SET, &start3, NULL, &count3, &block3);
|
||||
CHECK(ret, FAIL, "H5Sselect_hyperslab");
|
||||
|
||||
/* Create the dataset with dataspace exceeding 32 bits */
|
||||
dset3 = H5Dcreate2(fid1, "Dataset3", H5T_STD_U8LE, sid3, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
CHECK(dset3, FAIL, "H5Dcreate2");
|
||||
|
||||
/* Close Dataset */
|
||||
ret = H5Dclose(dset3);
|
||||
CHECK(ret, FAIL, "H5Dclose");
|
||||
|
||||
/* Create dataspace for the reference dataset */
|
||||
sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
|
||||
CHECK(sid1, FAIL, "H5Screate_simple");
|
||||
|
||||
/* Create a dataset */
|
||||
/* Create the reference dataset */
|
||||
dset1 = H5Dcreate2(fid1, "Dataset1", H5T_STD_REF_DSETREG, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Dcreate2");
|
||||
|
||||
@ -627,10 +678,18 @@ test_reference_region(void)
|
||||
/* Store third dataset region */
|
||||
ret = H5Rcreate(&wbuf[2], fid1, "/Dataset2", H5R_DATASET_REGION, sid2);
|
||||
CHECK(ret, FAIL, "H5Rcreate");
|
||||
ret = H5Rget_obj_type2(dset1, H5R_DATASET_REGION, &wbuf[0], &obj_type);
|
||||
ret = H5Rget_obj_type2(dset1, H5R_DATASET_REGION, &wbuf[2], &obj_type);
|
||||
CHECK(ret, FAIL, "H5Rget_obj_type2");
|
||||
VERIFY(obj_type, H5O_TYPE_DATASET, "H5Rget_obj_type2");
|
||||
|
||||
/* Store fourth dataset region */
|
||||
ret = H5Rcreate(&wbuf[3], fid1, "/Dataset3", H5R_DATASET_REGION, sid3);
|
||||
CHECK(ret, FAIL, "H5Rcreate");
|
||||
ret = H5Rget_obj_type2(dset1, H5R_DATASET_REGION, &wbuf[3], &obj_type);
|
||||
CHECK(ret, FAIL, "H5Rget_obj_type2");
|
||||
VERIFY(obj_type, H5O_TYPE_DATASET, "H5Rget_obj_type2");
|
||||
|
||||
|
||||
/* Write selection to disk */
|
||||
ret = H5Dwrite(dset1, H5T_STD_REF_DSETREG, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf);
|
||||
CHECK(ret, FAIL, "H5Dwrite");
|
||||
@ -672,6 +731,9 @@ test_reference_region(void)
|
||||
ret = H5Sclose(sid2);
|
||||
CHECK(ret, FAIL, "H5Sclose");
|
||||
|
||||
ret = H5Sclose(sid3);
|
||||
CHECK(ret, FAIL, "H5Sclose");
|
||||
|
||||
/* Close file */
|
||||
ret = H5Fclose(fid1);
|
||||
CHECK(ret, FAIL, "H5Fclose");
|
||||
@ -727,6 +789,28 @@ test_reference_region(void)
|
||||
dset2 = H5Rdereference2(dset1, dapl_id, H5R_DATASET_REGION, &addr);
|
||||
VERIFY(dset2, FAIL, "H5Rdereference2 haddr_undef");
|
||||
|
||||
|
||||
/* Try to open the referenced dataset with dataspace exceeding 32 bits */
|
||||
dset3 = H5Rdereference2(dset1, dapl_id, H5R_DATASET_REGION, &rbuf[3]);
|
||||
CHECK(dset3, FAIL, "H5Rdereference2");
|
||||
|
||||
/* Check what H5Rget_obj_type2 function returns */
|
||||
ret = H5Rget_obj_type2(dset1, H5R_DATASET_REGION, &rbuf[3], &obj_type);
|
||||
CHECK(ret, FAIL, "H5Rget_obj_type2");
|
||||
VERIFY(obj_type, H5O_TYPE_DATASET, "H5Rget_obj_type2");
|
||||
|
||||
/* Check information in the referenced dataset */
|
||||
sid3 = H5Dget_space(dset3);
|
||||
CHECK(sid3, FAIL, "H5Dget_space");
|
||||
ret_particles = H5Sget_select_npoints(sid3);
|
||||
VERIFY(ret_particles, total_particles, "H5Sget_select_npoints");
|
||||
|
||||
/* Close the dataspace and dataset */
|
||||
ret = H5Sclose(sid3);
|
||||
CHECK(ret, FAIL, "H5Sclose");
|
||||
ret = H5Dclose(dset3);
|
||||
CHECK(ret, FAIL, "H5Dclose");
|
||||
|
||||
/* Try to open objects */
|
||||
dset2 = H5Rdereference2(dset1, dapl_id, H5R_DATASET_REGION, &rbuf[0]);
|
||||
CHECK(dset2, FAIL, "H5Rdereference2");
|
||||
@ -889,7 +973,7 @@ test_reference_region(void)
|
||||
**
|
||||
****************************************************************/
|
||||
static void
|
||||
test_reference_region_1D(void)
|
||||
test_reference_region_1D(hbool_t new_format)
|
||||
{
|
||||
hid_t fid1; /* HDF5 File IDs */
|
||||
hid_t dset1, /* Dataset ID */
|
||||
@ -1736,14 +1820,16 @@ test_reference(void)
|
||||
/* Output message about test being performed */
|
||||
MESSAGE(5, ("Testing References\n"));
|
||||
|
||||
test_reference_params(); /* Test for correct parameter checking */
|
||||
test_reference_obj(); /* Test basic H5R object reference code */
|
||||
test_reference_region(); /* Test basic H5R dataset region reference code */
|
||||
test_reference_region_1D(); /* Test H5R dataset region reference code for 1-D datasets */
|
||||
test_reference_obj_deleted(); /* Test H5R object reference code for deleted objects */
|
||||
test_reference_group(); /* Test operations on dereferenced groups */
|
||||
test_reference_params(); /* Test for correct parameter checking */
|
||||
test_reference_obj(); /* Test basic H5R object reference code */
|
||||
test_reference_region(FALSE); /* Test basic H5R dataset region reference code */
|
||||
test_reference_region(TRUE); /* Test basic H5R dataset region reference code */
|
||||
test_reference_region_1D(FALSE); /* Test H5R dataset region reference code for 1-D datasets */
|
||||
test_reference_region_1D(TRUE); /* Test H5R dataset region reference code for 1-D datasets */
|
||||
test_reference_obj_deleted(); /* Test H5R object reference code for deleted objects */
|
||||
test_reference_group(); /* Test operations on dereferenced groups */
|
||||
#ifndef H5_NO_DEPRECATED_SYMBOLS
|
||||
test_reference_compat(); /* Test operations with old API routines */
|
||||
test_reference_compat(); /* Test operations with old API routines */
|
||||
#endif /* H5_NO_DEPRECATED_SYMBOLS */
|
||||
|
||||
} /* test_reference() */
|
||||
|
@ -618,7 +618,10 @@ test_api(test_api_config_t config, hid_t fapl)
|
||||
TEST_ERROR
|
||||
|
||||
/* Get examination DCPL */
|
||||
if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename, (hsize_t)213) < 0)
|
||||
|
||||
|
||||
/* Should be a value of 174, not 213. HDFFV-10469 */
|
||||
if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename, (hsize_t)174) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Test H5Pget_virtual_count */
|
||||
|
@ -11,7 +11,7 @@ GROUP "/" {
|
||||
USER_DEFINED_FILTER {
|
||||
FILTER_ID 260
|
||||
COMMENT dynlib4
|
||||
PARAMS { 9 1 11 2 }
|
||||
PARAMS { 9 1 10 3 }
|
||||
}
|
||||
}
|
||||
FILLVALUE {
|
||||
@ -33,7 +33,7 @@ GROUP "/" {
|
||||
USER_DEFINED_FILTER {
|
||||
FILTER_ID 260
|
||||
COMMENT dynlib4
|
||||
PARAMS { 9 1 11 2 }
|
||||
PARAMS { 9 1 10 3 }
|
||||
}
|
||||
}
|
||||
FILLVALUE {
|
||||
@ -55,7 +55,7 @@ GROUP "/" {
|
||||
USER_DEFINED_FILTER {
|
||||
FILTER_ID 260
|
||||
COMMENT dynlib4
|
||||
PARAMS { 9 1 11 2 }
|
||||
PARAMS { 9 1 10 3 }
|
||||
}
|
||||
}
|
||||
FILLVALUE {
|
||||
@ -77,7 +77,7 @@ GROUP "/" {
|
||||
USER_DEFINED_FILTER {
|
||||
FILTER_ID 260
|
||||
COMMENT dynlib4
|
||||
PARAMS { 9 1 11 2 }
|
||||
PARAMS { 9 1 10 3 }
|
||||
}
|
||||
}
|
||||
FILLVALUE {
|
||||
@ -99,7 +99,7 @@ GROUP "/" {
|
||||
USER_DEFINED_FILTER {
|
||||
FILTER_ID 260
|
||||
COMMENT dynlib4
|
||||
PARAMS { 9 1 11 2 }
|
||||
PARAMS { 9 1 10 3 }
|
||||
}
|
||||
}
|
||||
FILLVALUE {
|
||||
@ -121,7 +121,7 @@ GROUP "/" {
|
||||
USER_DEFINED_FILTER {
|
||||
FILTER_ID 260
|
||||
COMMENT dynlib4
|
||||
PARAMS { 9 1 11 2 }
|
||||
PARAMS { 9 1 10 3 }
|
||||
}
|
||||
}
|
||||
FILLVALUE {
|
||||
@ -143,7 +143,7 @@ GROUP "/" {
|
||||
USER_DEFINED_FILTER {
|
||||
FILTER_ID 260
|
||||
COMMENT dynlib4
|
||||
PARAMS { 9 1 11 2 }
|
||||
PARAMS { 9 1 10 3 }
|
||||
}
|
||||
}
|
||||
FILLVALUE {
|
||||
|
Loading…
x
Reference in New Issue
Block a user