[svn-r22807] Description:

Add encode/decode API routines for property lists: H5Pencode/H5Pdecode.

Tested on:
        FreeBSD/32 8.2 (loyalty) w/gcc4.6, w/C++ & FORTRAN, in debug mode
        FreeBSD/64 8.2 (freedom) w/gcc4.6, w/C++ & FORTRAN, in debug mode
        Linux/32 2.6 (jam) w/PGI compilers, w/default API=1.8.x,
                w/C++ & FORTRAN, w/threadsafe, in debug mode
        Linux/64-amd64 2.6 (koala) w/Intel compilers, w/default API=1.6.x,
                w/C++ & FORTRAN, in production mode
        Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
                w/szip filter, w/threadsafe, in production mode
        Linux/PPC 2.6 (ostrich) w/C++ & FORTRAN, w/threadsafe, in debug mode
        Linux/64-ia64 2.6 (ember) w/Intel compilers, w/parallel, C++ & FORTRAN,
                in production mode
        Mac OS X/32 10.7.3 (amazon) in debug mode
        Mac OS X/32 10.7.3 (amazon) w/C++ & FORTRAN, w/threadsafe,
                in production mode
        Mac OS X/32 10.7.3 (amazon) w/parallel, in debug mode
This commit is contained in:
Quincey Koziol 2012-09-25 10:47:25 -05:00
parent 50e3990f2a
commit 6a89177036
66 changed files with 6127 additions and 320 deletions

View File

@ -820,6 +820,7 @@
./src/H5Pdcpl.c
./src/H5Pdeprec.c
./src/H5Pdxpl.c
./src/H5Pencdec.c
./src/H5Pfapl.c
./src/H5Pfcpl.c
./src/H5Pfmpl.c
@ -945,6 +946,8 @@
./test/dtransform.c
./test/earray.c
./test/efc.c
./test/enc_dec_plist.c
./test/enc_dec_plist_with_endianess.c
./test/enum.c
./test/extend.c
./test/external.c
@ -987,6 +990,7 @@
./test/gen_old_group.c _DO_NOT_DISTRIBUTE_
./test/gen_old_layout.c _DO_NOT_DISTRIBUTE_
./test/gen_old_mtime.c _DO_NOT_DISTRIBUTE_
./test/gen_plist.c _DO_NOT_DISTRIBUTE_
./test/gen_sizes_lheap.c _DO_NOT_DISTRIBUTE_
./test/gen_specmetaread.c _DO_NOT_DISTRIBUTE_
./test/gen_udlinks.c _DO_NOT_DISTRIBUTE_
@ -1072,6 +1076,31 @@
./test/gen_filters.c
./test/chunk_info.c
./test/plist_files/acpl_be
./test/plist_files/acpl_le
./test/plist_files/dapl_be
./test/plist_files/dapl_le
./test/plist_files/dcpl_be
./test/plist_files/dcpl_le
./test/plist_files/dxpl_be
./test/plist_files/dxpl_le
./test/plist_files/fapl_be
./test/plist_files/fapl_le
./test/plist_files/fcpl_be
./test/plist_files/fcpl_le
./test/plist_files/gcpl_be
./test/plist_files/gcpl_le
./test/plist_files/lapl_be
./test/plist_files/lapl_le
./test/plist_files/lcpl_be
./test/plist_files/lcpl_le
./test/plist_files/ocpl_be
./test/plist_files/ocpl_le
./test/plist_files/ocpypl_be
./test/plist_files/ocpypl_le
./test/plist_files/strcpl_be
./test/plist_files/strcpl_le
./test/testfiles/err_compat_1
./test/testfiles/err_compat_2
./test/testfiles/error_test_1
@ -1082,18 +1111,19 @@
./testpar/Makefile.am
./testpar/Makefile.in
./testpar/t_cache.c
./testpar/t_chunk_alloc.c
./testpar/t_coll_chunk.c
./testpar/t_dset.c
./testpar/t_file.c
./testpar/t_file_image.c
./testpar/t_filter_read.c
./testpar/t_mdset.c
./testpar/t_mpi.c
./testpar/t_ph5basic.c
./testpar/t_pflush1.c
./testpar/t_pflush2.c
./testpar/t_chunk_alloc.c
./testpar/t_coll_chunk.c
./testpar/t_filter_read.c
./testpar/t_posix_compliant.c
./testpar/t_prop.c
./testpar/t_shapesame.c
./testpar/t_span_tree.c
./testpar/testpar.h

View File

@ -64,6 +64,7 @@ $Source = "";
"int32_t" => "Is",
"unsigned" => "Iu",
"unsigned int" => "Iu",
"uint32_t" => "Iu",
"H5I_type_t" => "It",
"H5G_link_t" => "Ll", #Same as H5L_type_t now
"H5L_type_t" => "Ll",

60
configure vendored
View File

@ -28653,9 +28653,9 @@ else
unset MPE
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CLOG_Init in -llmpe" >&5
$as_echo_n "checking for CLOG_Init in -llmpe... " >&6; }
if ${ac_cv_lib_lmpe_CLOG_Init+:} false; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPE_Init_mpi_io in -llmpe" >&5
$as_echo_n "checking for MPE_Init_mpi_io in -llmpe... " >&6; }
if ${ac_cv_lib_lmpe_MPE_Init_mpi_io+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@ -28669,7 +28669,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
char CLOG_Init ();
char MPE_Init_mpi_io ();
#ifdef FC_DUMMY_MAIN
#ifndef FC_DUMMY_MAIN_EQ_F77
# ifdef __cplusplus
@ -28681,23 +28681,23 @@ char CLOG_Init ();
int
main ()
{
return CLOG_Init ();
return MPE_Init_mpi_io ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_lmpe_CLOG_Init=yes
ac_cv_lib_lmpe_MPE_Init_mpi_io=yes
else
ac_cv_lib_lmpe_CLOG_Init=no
ac_cv_lib_lmpe_MPE_Init_mpi_io=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lmpe_CLOG_Init" >&5
$as_echo "$ac_cv_lib_lmpe_CLOG_Init" >&6; }
if test "x$ac_cv_lib_lmpe_CLOG_Init" = xyes; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lmpe_MPE_Init_mpi_io" >&5
$as_echo "$ac_cv_lib_lmpe_MPE_Init_mpi_io" >&6; }
if test "x$ac_cv_lib_lmpe_MPE_Init_mpi_io" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBLMPE 1
_ACEOF
@ -28828,9 +28828,9 @@ else
LDFLAGS="$saved_LDFLAGS"; AM_LDFLAGS="$saved_AM_LDFLAGS"; unset MPE
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CLOG_Init in -llmpe" >&5
$as_echo_n "checking for CLOG_Init in -llmpe... " >&6; }
if ${ac_cv_lib_lmpe_CLOG_Init+:} false; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPE_Init_mpi_io in -llmpe" >&5
$as_echo_n "checking for MPE_Init_mpi_io in -llmpe... " >&6; }
if ${ac_cv_lib_lmpe_MPE_Init_mpi_io+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@ -28844,7 +28844,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
char CLOG_Init ();
char MPE_Init_mpi_io ();
#ifdef FC_DUMMY_MAIN
#ifndef FC_DUMMY_MAIN_EQ_F77
# ifdef __cplusplus
@ -28856,23 +28856,23 @@ char CLOG_Init ();
int
main ()
{
return CLOG_Init ();
return MPE_Init_mpi_io ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_lmpe_CLOG_Init=yes
ac_cv_lib_lmpe_MPE_Init_mpi_io=yes
else
ac_cv_lib_lmpe_CLOG_Init=no
ac_cv_lib_lmpe_MPE_Init_mpi_io=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lmpe_CLOG_Init" >&5
$as_echo "$ac_cv_lib_lmpe_CLOG_Init" >&6; }
if test "x$ac_cv_lib_lmpe_CLOG_Init" = xyes; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lmpe_MPE_Init_mpi_io" >&5
$as_echo "$ac_cv_lib_lmpe_MPE_Init_mpi_io" >&6; }
if test "x$ac_cv_lib_lmpe_MPE_Init_mpi_io" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBLMPE 1
_ACEOF
@ -28940,9 +28940,9 @@ else
unset MPE
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CLOG_Init in -llmpe" >&5
$as_echo_n "checking for CLOG_Init in -llmpe... " >&6; }
if ${ac_cv_lib_lmpe_CLOG_Init+:} false; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPE_Init_mpi_io in -llmpe" >&5
$as_echo_n "checking for MPE_Init_mpi_io in -llmpe... " >&6; }
if ${ac_cv_lib_lmpe_MPE_Init_mpi_io+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@ -28956,7 +28956,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
char CLOG_Init ();
char MPE_Init_mpi_io ();
#ifdef FC_DUMMY_MAIN
#ifndef FC_DUMMY_MAIN_EQ_F77
# ifdef __cplusplus
@ -28968,23 +28968,23 @@ char CLOG_Init ();
int
main ()
{
return CLOG_Init ();
return MPE_Init_mpi_io ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_lmpe_CLOG_Init=yes
ac_cv_lib_lmpe_MPE_Init_mpi_io=yes
else
ac_cv_lib_lmpe_CLOG_Init=no
ac_cv_lib_lmpe_MPE_Init_mpi_io=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lmpe_CLOG_Init" >&5
$as_echo "$ac_cv_lib_lmpe_CLOG_Init" >&6; }
if test "x$ac_cv_lib_lmpe_CLOG_Init" = xyes; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lmpe_MPE_Init_mpi_io" >&5
$as_echo "$ac_cv_lib_lmpe_MPE_Init_mpi_io" >&6; }
if test "x$ac_cv_lib_lmpe_MPE_Init_mpi_io" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBLMPE 1
_ACEOF

View File

@ -2821,7 +2821,7 @@ if test -n "$PARALLEL"; then
X-yes)
AC_CHECK_HEADERS([mpe.h],, [unset MPE])
AC_CHECK_LIB([mpe], [MPE_Init_log],, [unset MPE])
AC_CHECK_LIB([lmpe], [CLOG_Init],, [unset MPE])
AC_CHECK_LIB([lmpe], [MPE_Init_mpi_io],, [unset MPE])
;;
*)
case "$withval" in
@ -2863,12 +2863,12 @@ if test -n "$PARALLEL"; then
AM_LDFLAGS="$AM_LDFLAGS -L$mpe_lib"
AC_CHECK_LIB([mpe], [MPE_Init_log],,
[LDFLAGS="$saved_LDFLAGS"; AM_LDFLAGS="$saved_AM_LDFLAGS"; unset MPE])
AC_CHECK_LIB([lmpe], [CLOG_Init],,
AC_CHECK_LIB([lmpe], [MPE_Init_mpi_io],,
[LDFLAGS="$saved_LDFLAGS"; AM_LDFLAGS="$saved_AM_LDFLAGS"; unset MPE])
else
AC_CHECK_LIB([mpe], [MPE_Init_log],, [unset MPE])
AC_CHECK_LIB([lmpe], [CLOG_Init],, [unset MPE])
AC_CHECK_LIB([lmpe], [MPE_Init_mpi_io],, [unset MPE])
fi
;;
esac

View File

@ -282,11 +282,13 @@ H5AC_init_interface(void)
/* Insert 'block before metadata write' property */
block_before_meta_write=1;
if(H5P_insert(xfer_plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,H5AC_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,NULL,NULL,NULL,NULL,NULL,NULL)<0)
if(H5P_insert(xfer_plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,H5AC_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
/* Insert 'library internal' property */
if(H5P_insert(xfer_plist,H5AC_LIBRARY_INTERNAL_NAME,H5AC_LIBRARY_INTERNAL_SIZE,&library_internal,NULL,NULL,NULL,NULL,NULL,NULL)<0)
if(H5P_insert(xfer_plist,H5AC_LIBRARY_INTERNAL_NAME,H5AC_LIBRARY_INTERNAL_SIZE,&library_internal,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
/* Set the transfer mode */
@ -304,11 +306,13 @@ H5AC_init_interface(void)
/* Insert 'block before metadata write' property */
block_before_meta_write=0;
if(H5P_insert(xfer_plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,H5AC_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,NULL,NULL,NULL,NULL,NULL,NULL)<0)
if(H5P_insert(xfer_plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,H5AC_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
/* Insert 'library internal' property */
if(H5P_insert(xfer_plist,H5AC_LIBRARY_INTERNAL_NAME,H5AC_LIBRARY_INTERNAL_SIZE,&library_internal,NULL,NULL,NULL,NULL,NULL,NULL)<0)
if(H5P_insert(xfer_plist,H5AC_LIBRARY_INTERNAL_NAME,H5AC_LIBRARY_INTERNAL_SIZE,&library_internal,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
/* Set the transfer mode */
@ -326,11 +330,13 @@ H5AC_init_interface(void)
/* Insert 'block before metadata write' property */
block_before_meta_write=0;
if(H5P_insert(xfer_plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,H5AC_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,NULL,NULL,NULL,NULL,NULL,NULL)<0)
if(H5P_insert(xfer_plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,H5AC_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
/* Insert 'library internal' property */
if(H5P_insert(xfer_plist,H5AC_LIBRARY_INTERNAL_NAME,H5AC_LIBRARY_INTERNAL_SIZE,&library_internal,NULL,NULL,NULL,NULL,NULL,NULL)<0)
if(H5P_insert(xfer_plist,H5AC_LIBRARY_INTERNAL_NAME,H5AC_LIBRARY_INTERNAL_SIZE,&library_internal,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
/* Set the transfer mode */

View File

@ -236,27 +236,27 @@ H5_DLLVAR hid_t H5AC_ind_dxpl_id;
/* hbool_t evictions_enabled = */ TRUE, \
/* hbool_t set_initial_size = */ TRUE, \
/* size_t initial_size = */ ( 2 * 1024 * 1024), \
/* double min_clean_fraction = */ 0.3, \
/* double min_clean_fraction = */ 0.3f, \
/* size_t max_size = */ (32 * 1024 * 1024), \
/* size_t min_size = */ (1 * 1024 * 1024), \
/* long int epoch_length = */ 50000, \
/* enum H5C_cache_incr_mode incr_mode = */ H5C_incr__threshold, \
/* double lower_hr_threshold = */ 0.9, \
/* double increment = */ 2.0, \
/* double lower_hr_threshold = */ 0.9f, \
/* double increment = */ 2.0f, \
/* hbool_t apply_max_increment = */ TRUE, \
/* size_t max_increment = */ (4 * 1024 * 1024), \
/* enum H5C_cache_flash_incr_mode */ \
/* flash_incr_mode = */ H5C_flash_incr__add_space, \
/* double flash_multiple = */ 1.0, \
/* double flash_threshold = */ 0.25, \
/* double flash_multiple = */ 1.0f, \
/* double flash_threshold = */ 0.25f, \
/* enum H5C_cache_decr_mode decr_mode = */ H5C_decr__age_out_with_threshold, \
/* double upper_hr_threshold = */ 0.999, \
/* double decrement = */ 0.9, \
/* double upper_hr_threshold = */ 0.999f, \
/* double decrement = */ 0.9f, \
/* hbool_t apply_max_decrement = */ TRUE, \
/* size_t max_decrement = */ (1 * 1024 * 1024), \
/* int epochs_before_eviction = */ 3, \
/* hbool_t apply_empty_reserve = */ TRUE, \
/* double empty_reserve = */ 0.1, \
/* double empty_reserve = */ 0.1f, \
/* int dirty_bytes_threshold = */ (256 * 1024), \
/* int metadata_write_strategy = */ \
H5AC__DEFAULT_METADATA_WRITE_STRATEGY \
@ -272,27 +272,27 @@ H5_DLLVAR hid_t H5AC_ind_dxpl_id;
/* hbool_t evictions_enabled = */ TRUE, \
/* hbool_t set_initial_size = */ TRUE, \
/* size_t initial_size = */ ( 2 * 1024 * 1024), \
/* double min_clean_fraction = */ 0.01, \
/* double min_clean_fraction = */ 0.01f, \
/* size_t max_size = */ (32 * 1024 * 1024), \
/* size_t min_size = */ ( 1 * 1024 * 1024), \
/* long int epoch_length = */ 50000, \
/* enum H5C_cache_incr_mode incr_mode = */ H5C_incr__threshold, \
/* double lower_hr_threshold = */ 0.9, \
/* double increment = */ 2.0, \
/* double lower_hr_threshold = */ 0.9f, \
/* double increment = */ 2.0f, \
/* hbool_t apply_max_increment = */ TRUE, \
/* size_t max_increment = */ (4 * 1024 * 1024), \
/* enum H5C_cache_flash_incr_mode */ \
/* flash_incr_mode = */ H5C_flash_incr__add_space, \
/* double flash_multiple = */ 1.4, \
/* double flash_threshold = */ 0.25, \
/* double flash_multiple = */ 1.4f, \
/* double flash_threshold = */ 0.25f, \
/* enum H5C_cache_decr_mode decr_mode = */ H5C_decr__age_out_with_threshold,\
/* double upper_hr_threshold = */ 0.999, \
/* double decrement = */ 0.9, \
/* double upper_hr_threshold = */ 0.999f, \
/* double decrement = */ 0.9f, \
/* hbool_t apply_max_decrement = */ TRUE, \
/* size_t max_decrement = */ (1 * 1024 * 1024), \
/* int epochs_before_eviction = */ 3, \
/* hbool_t apply_empty_reserve = */ TRUE, \
/* double empty_reserve = */ 0.1, \
/* double empty_reserve = */ 0.1f, \
/* int dirty_bytes_threshold = */ (256 * 1024), \
/* int metadata_write_strategy = */ \
H5AC__DEFAULT_METADATA_WRITE_STRATEGY \

View File

@ -66,7 +66,6 @@
#define H5D_XFER_VFL_ID_NAME "vfl_id" /* File driver ID */
#define H5D_XFER_VFL_INFO_NAME "vfl_info" /* File driver info */
#define H5D_XFER_HYPER_VECTOR_SIZE_NAME "vec_size" /* Hyperslab vector size */
#ifdef H5_HAVE_PARALLEL
#define H5D_XFER_IO_XFER_MODE_NAME "io_xfer_mode" /* I/O transfer mode */
#define H5D_XFER_MPIO_COLLECTIVE_OPT_NAME "mpio_collective_opt" /* Optimization of MPI-IO transfer mode */
#define H5D_XFER_MPIO_CHUNK_OPT_HARD_NAME "mpio_chunk_opt_hard"
@ -76,7 +75,6 @@
#define H5D_MPIO_ACTUAL_IO_MODE_NAME "actual_io_mode"
#define H5D_MPIO_LOCAL_NO_COLLECTIVE_CAUSE_NAME "local_no_collective_cause" /* cause of broken collective I/O in each process */
#define H5D_MPIO_GLOBAL_NO_COLLECTIVE_CAUSE_NAME "global_no_collective_cause" /* cause of broken collective I/O in all processes */
#endif /* H5_HAVE_PARALLEL */
#define H5D_XFER_EDC_NAME "err_detect" /* EDC */
#define H5D_XFER_FILTER_CB_NAME "filter_cb" /* Filter callback function */
#define H5D_XFER_CONV_CB_NAME "type_conv_cb" /* Type conversion callback function */

View File

@ -27,6 +27,7 @@
#include "H5FDpublic.h" /* File drivers */
/* Private headers needed by this file */
#include "H5Vprivate.h" /* Vectors and arrays */
/****************************/
@ -114,6 +115,35 @@ typedef struct H5F_blk_aggr_t H5F_blk_aggr_t;
/* (Assumes that the high bits of the integer are zero) */
# define UINT64ENCODE_VAR(p, n, l) ENCODE_VAR(p, uint64_t, n, l)
/* Encode a 64-bit unsigned integer and its length into a variable-sized buffer */
/* (Assumes that the high bits of the integer are zero) */
# define UINT64ENCODE_VARLEN(p, n) { \
uint64_t __n = (uint64_t)(n); \
unsigned _s = H5V_limit_enc_size(__n); \
\
*(p)++ = (uint8_t)_s; \
UINT64ENCODE_VAR(p, __n, _s); \
}
# define H5_ENCODE_UNSIGNED(p, n) { \
HDcompile_assert(sizeof(unsigned) == sizeof(uint32_t)); \
UINT32ENCODE(p, n) \
}
/* Assumes the endianness of uint64_t is the same as double */
# define H5_ENCODE_DOUBLE(p, n) { \
uint64_t _n; \
size_t _u; \
uint8_t *_p = (uint8_t*)(p); \
\
HDcompile_assert(sizeof(double) == 8); \
HDcompile_assert(sizeof(double) == sizeof(uint64_t)); \
HDmemcpy(&_n, &n, sizeof(double)); \
for(_u = 0; _u < sizeof(uint64_t); _u++, _n >>= 8) \
*_p++ = (uint8_t)(_n & 0xff); \
(p) = (uint8_t *)(p) + 8; \
}
/* DECODE converts little endian bytes pointed by p to integer values and store
* it in i. For signed values, need to do sign-extension when converting
* the last byte which carries the sign bit.
@ -134,11 +164,11 @@ typedef struct H5F_blk_aggr_t H5F_blk_aggr_t;
}
# define INT32DECODE(p, i) { \
(i) = ( *(p) & 0xff); (p)++; \
(i) |= ((int32_t)(*(p) & 0xff) << 8); (p)++; \
(i) |= ((int32_t)(*(p) & 0xff) << 16); (p)++; \
(i) |= ((int32_t)(((*(p) & 0xff) << 24) | \
((*(p) & 0x80) ? ~0xffffffff : 0x0))); (p)++; \
(i) = ((int32_t)(*(p) & (unsigned)0xff)); (p)++; \
(i) |= ((int32_t)(*(p) & (unsigned)0xff) << 8); (p)++; \
(i) |= ((int32_t)(*(p) & (unsigned)0xff) << 16); (p)++; \
(i) |= ((int32_t)(((*(p) & (unsigned)0xff) << 24) | \
((*(p) & (unsigned)0x80) ? (unsigned)(~0xffffffff) : (unsigned)0x0))); (p)++; \
}
# define UINT32DECODE(p, i) { \
@ -190,6 +220,34 @@ typedef struct H5F_blk_aggr_t H5F_blk_aggr_t;
/* (Assumes that the high bits of the integer will be zero) */
# define UINT64DECODE_VAR(p, n, l) DECODE_VAR(p, n, l)
/* Decode a 64-bit unsigned integer and its length from a variable-sized buffer */
/* (Assumes that the high bits of the integer will be zero) */
# define UINT64DECODE_VARLEN(p, n) { \
unsigned _s = *(p)++; \
\
UINT64DECODE_VAR(p, n, _s); \
}
# define H5_DECODE_UNSIGNED(p, n) { \
HDcompile_assert(sizeof(unsigned) == sizeof(uint32_t)); \
UINT32DECODE(p, n) \
}
/* Assumes the endianness of uint64_t is the same as double */
# define H5_DECODE_DOUBLE(p, n) { \
uint64_t _n; \
size_t _u; \
\
HDcompile_assert(sizeof(double) == 8); \
HDcompile_assert(sizeof(double) == sizeof(uint64_t)); \
_n = 0; \
(p) += 8; \
for(_u = 0; _u < sizeof(uint64_t); _u++) \
_n = (_n << 8) | *(--p); \
HDmemcpy(&(n), &_n, sizeof(double)); \
(p) += 8; \
}
/* Address-related macros */
#define H5F_addr_overflow(X,Z) (HADDR_UNDEF==(X) || \
HADDR_UNDEF==(X)+(haddr_t)(Z) || \

View File

@ -462,7 +462,7 @@ H5Pregister2(hid_t cls_id, const char *name, size_t size, void *def_value,
/* Create the new property list class */
orig_pclass = pclass;
if((ret_value = H5P_register(&pclass, name, size, def_value, prp_create, prp_set, prp_get, prp_delete, prp_copy, prp_cmp, prp_close)) < 0)
if((ret_value = H5P_register(&pclass, name, size, def_value, prp_create, prp_set, prp_get, NULL, NULL, prp_delete, prp_copy, prp_cmp, prp_close)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to register property in class")
/* Check if the property class changed and needs to be substituted in the ID */
@ -645,7 +645,8 @@ H5Pinsert2(hid_t plist_id, const char *name, size_t size, void *value,
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "properties >0 size must have default")
/* Create the new property list class */
if((ret_value = H5P_insert(plist, name, size, value, prp_set, prp_get, prp_delete, prp_copy, prp_cmp, prp_close)) < 0)
if((ret_value = H5P_insert(plist, name, size, value, prp_set, prp_get,
NULL, NULL, prp_delete, prp_copy, prp_cmp, prp_close)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to register property in plist")
done:
@ -835,6 +836,89 @@ done:
FUNC_LEAVE_API(ret_value)
} /* H5Pget_size() */
/*--------------------------------------------------------------------------
NAME
H5Pencode
PURPOSE
Routine to convert the property values in a property list into a binary buffer
USAGE
herr_t H5Pencode(plist_id, buf, nalloc)
hid_t plist_id; IN: Identifier to property list to encode
void *buf: OUT: buffer to gold the encoded plist
size_t *nalloc; IN/OUT: size of buffer needed to encode plist
RETURNS
Returns non-negative on success, negative on failure.
DESCRIPTION
Encodes a property list into a binary buffer. If the buffer is NULL, then
the call will set the size needed to encode the plist in nalloc. Otherwise
the routine will encode the plist in buf.
GLOBAL VARIABLES
COMMENTS, BUGS, ASSUMPTIONS
EXAMPLES
REVISION LOG
--------------------------------------------------------------------------*/
herr_t
H5Pencode(hid_t plist_id, void *buf, size_t *nalloc)
{
H5P_genplist_t *plist; /* Property list to query */
hid_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
H5TRACE3("e", "i*x*z", plist_id, buf, nalloc);
/* Check arguments. */
if(NULL == (plist = (H5P_genplist_t *)H5I_object_verify(plist_id, H5I_GENPROP_LST)))
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)
HGOTO_ERROR(H5E_PLIST, H5E_CANTENCODE, FAIL, "unable to encode property list");
done:
FUNC_LEAVE_API(ret_value)
} /* H5Pencode() */
/*--------------------------------------------------------------------------
NAME
H5Pdecode
PURPOSE
API routine to decode a property list from a binary buffer.
USAGE
hid_t H5Pdecode(buf)
void *buf; IN: buffer that holds the encoded plist
RETURNS
Returns non-negative ID of new property list object on success, negative
on failure.
DESCRIPTION
Decodes a property list from a binary buffer. The contents of the buffer
contain the values for the correponding properties of the plist. The decode
callback of a certain property decodes its value from the buffer and sets it
in the property list.
GLOBAL VARIABLES
COMMENTS, BUGS, ASSUMPTIONS
Properties in the property list that are not encoded in the serialized
form retain their default value.
EXAMPLES
REVISION LOG
--------------------------------------------------------------------------*/
hid_t
H5Pdecode(const void *buf)
{
hid_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
H5TRACE1("i", "*x", buf);
/* Call the internal decode routine */
if((ret_value = H5P__decode(buf)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTDECODE, FAIL, "unable to decode property list");
done:
FUNC_LEAVE_API(ret_value)
} /* H5Pdecode() */
/*--------------------------------------------------------------------------
NAME

View File

@ -49,13 +49,18 @@
/* Definitions for size of raw data chunk cache(slots) */
#define H5D_ACS_DATA_CACHE_NUM_SLOTS_SIZE sizeof(size_t)
#define H5D_ACS_DATA_CACHE_NUM_SLOTS_DEF H5D_CHUNK_CACHE_NSLOTS_DEFAULT
#define H5D_ACS_DATA_CACHE_NUM_SLOTS_ENC H5P__encode_size_t
#define H5D_ACS_DATA_CACHE_NUM_SLOTS_DEC H5P__decode_size_t
/* Definition for size of raw data chunk cache(bytes) */
#define H5D_ACS_DATA_CACHE_BYTE_SIZE_SIZE sizeof(size_t)
#define H5D_ACS_DATA_CACHE_BYTE_SIZE_DEF H5D_CHUNK_CACHE_NBYTES_DEFAULT
#define H5D_ACS_DATA_CACHE_BYTE_SIZE_ENC H5P__encode_size_t
#define H5D_ACS_DATA_CACHE_BYTE_SIZE_DEC H5P__decode_size_t
/* Definition for preemption read chunks first */
#define H5D_ACS_PREEMPT_READ_CHUNKS_SIZE sizeof(double)
#define H5D_ACS_PREEMPT_READ_CHUNKS_DEF H5D_CHUNK_CACHE_W0_DEFAULT
#define H5D_ACS_PREEMPT_READ_CHUNKS_ENC H5P__encode_double
#define H5D_ACS_PREEMPT_READ_CHUNKS_DEC H5P__decode_double
/******************/
/* Local Typedefs */
@ -130,15 +135,18 @@ H5P__dacc_reg_prop(H5P_genclass_t *pclass)
FUNC_ENTER_STATIC
/* Register the size of raw data chunk cache (elements) */
if(H5P_register_real(pclass, H5D_ACS_DATA_CACHE_NUM_SLOTS_NAME, H5D_ACS_DATA_CACHE_NUM_SLOTS_SIZE, &rdcc_nslots, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5D_ACS_DATA_CACHE_NUM_SLOTS_NAME, H5D_ACS_DATA_CACHE_NUM_SLOTS_SIZE, &rdcc_nslots,
NULL, NULL, NULL, H5D_ACS_DATA_CACHE_NUM_SLOTS_ENC, H5D_ACS_DATA_CACHE_NUM_SLOTS_DEC, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the size of raw data chunk cache(bytes) */
if(H5P_register_real(pclass, H5D_ACS_DATA_CACHE_BYTE_SIZE_NAME, H5D_ACS_DATA_CACHE_BYTE_SIZE_SIZE, &rdcc_nbytes, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5D_ACS_DATA_CACHE_BYTE_SIZE_NAME, H5D_ACS_DATA_CACHE_BYTE_SIZE_SIZE, &rdcc_nbytes,
NULL, NULL, NULL, H5D_ACS_DATA_CACHE_BYTE_SIZE_ENC, H5D_ACS_DATA_CACHE_BYTE_SIZE_DEC, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the preemption for reading chunks */
if(H5P_register_real(pclass, H5D_ACS_PREEMPT_READ_CHUNKS_NAME, H5D_ACS_PREEMPT_READ_CHUNKS_SIZE, &rdcc_w0, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5D_ACS_PREEMPT_READ_CHUNKS_NAME, H5D_ACS_PREEMPT_READ_CHUNKS_SIZE, &rdcc_w0,
NULL, NULL, NULL, H5D_ACS_PREEMPT_READ_CHUNKS_ENC, H5D_ACS_PREEMPT_READ_CHUNKS_DEC, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
done:

View File

@ -42,6 +42,7 @@
#include "H5Iprivate.h" /* IDs */
#include "H5MMprivate.h" /* Memory management */
#include "H5Ppkg.h" /* Property lists */
#include "H5Tprivate.h" /* Datatypes */
#include "H5Zpkg.h" /* Data filters */
@ -76,18 +77,26 @@
/* Definitions for storage layout property */
#define H5D_CRT_LAYOUT_SIZE sizeof(H5O_layout_t)
#define H5D_CRT_LAYOUT_DEF H5D_DEF_LAYOUT_CONTIG
#define H5D_CRT_LAYOUT_ENC H5P__dcrt_layout_enc
#define H5D_CRT_LAYOUT_DEC H5P__dcrt_layout_dec
#define H5D_CRT_LAYOUT_CMP H5P__dcrt_layout_cmp
/* Definitions for fill value. size=0 means fill value will be 0 as
* library default; size=-1 means fill value is undefined. */
#define H5D_CRT_FILL_VALUE_SIZE sizeof(H5O_fill_t)
#define H5D_CRT_FILL_VALUE_DEF {{0, NULL, H5O_NULL_ID, {{0, HADDR_UNDEF}}}, H5O_FILL_VERSION_2, NULL, 0, NULL, H5D_ALLOC_TIME_LATE, H5D_FILL_TIME_IFSET, FALSE}
#define H5D_CRT_FILL_VALUE_ENC H5P__fill_value_enc
#define H5D_CRT_FILL_VALUE_DEC H5P__fill_value_dec
#define H5D_CRT_FILL_VALUE_CMP H5P_fill_value_cmp
/* Definitions for space allocation time state */
#define H5D_CRT_ALLOC_TIME_STATE_SIZE sizeof(unsigned)
#define H5D_CRT_ALLOC_TIME_STATE_DEF 1
#define H5D_CRT_ALLOC_TIME_STATE_ENC H5P__encode_unsigned
#define H5D_CRT_ALLOC_TIME_STATE_DEC H5P__decode_unsigned
/* Definitions for external file list */
#define H5D_CRT_EXT_FILE_LIST_SIZE sizeof(H5O_efl_t)
#define H5D_CRT_EXT_FILE_LIST_DEF {HADDR_UNDEF, 0, 0, NULL}
#define H5D_CRT_EXT_FILE_LIST_ENC H5P__dcrt_ext_file_list_enc
#define H5D_CRT_EXT_FILE_LIST_DEC H5P__dcrt_ext_file_list_dec
#define H5D_CRT_EXT_FILE_LIST_CMP H5P__dcrt_ext_file_list_cmp
@ -117,7 +126,13 @@ static herr_t H5P__dcrt_copy(hid_t new_plist_t, hid_t old_plist_t, void *copy_da
static herr_t H5P__dcrt_close(hid_t dxpl_id, void *close_data);
/* Property callbacks */
static herr_t H5P__dcrt_layout_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__dcrt_layout_dec(const uint8_t **pp, void *value);
static int H5P__dcrt_layout_cmp(const void *value1, const void *value2, size_t size);
static herr_t H5P__fill_value_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__fill_value_dec(const uint8_t **pp, void *value);
static herr_t H5P__dcrt_ext_file_list_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__dcrt_ext_file_list_dec(const uint8_t **pp, void *value);
static int H5P__dcrt_ext_file_list_cmp(const void *value1, const void *value2, size_t size);
@ -149,6 +164,17 @@ const H5P_libclass_t H5P_CLS_DCRT[1] = {{
/* Declare extern the free list to manage blocks of type conversion data */
H5FL_BLK_EXTERN(type_conv);
/***************************/
/* Local Private Variables */
/***************************/
/* Property value defaults */
static const H5O_layout_t H5D_def_layout_g = H5D_CRT_LAYOUT_DEF; /* Default storage layout */
static const H5O_fill_t H5D_def_fill_g = H5D_CRT_FILL_VALUE_DEF; /* Default fill value */
static const unsigned H5D_def_alloc_time_state_g = H5D_CRT_ALLOC_TIME_STATE_DEF; /* Default allocation time state */
static const H5O_efl_t H5D_def_efl_g = H5D_CRT_EXT_FILE_LIST_DEF; /* Default external file list */
/* Defaults for each type of layout */
#ifdef H5_HAVE_C99_DESIGNATED_INITIALIZER
static const H5O_layout_t H5D_def_layout_compact_g = H5D_DEF_LAYOUT_COMPACT;
@ -177,28 +203,32 @@ static hbool_t H5P_dcrt_def_layout_init_g = FALSE;
static herr_t
H5P__dcrt_reg_prop(H5P_genclass_t *pclass)
{
H5O_layout_t layout = H5D_CRT_LAYOUT_DEF; /* Default storage layout */
H5O_fill_t fill = H5D_CRT_FILL_VALUE_DEF; /* Default fill value */
unsigned alloc_time_state = H5D_CRT_ALLOC_TIME_STATE_DEF; /* Default allocation time state */
H5O_efl_t efl = H5D_CRT_EXT_FILE_LIST_DEF; /* Default external file list */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Register the storage layout property */
if(H5P_register_real(pclass, H5D_CRT_LAYOUT_NAME, H5D_CRT_LAYOUT_SIZE, &layout, NULL, NULL, NULL, NULL, NULL, H5D_CRT_LAYOUT_CMP, NULL) < 0)
if(H5P_register_real(pclass, H5D_CRT_LAYOUT_NAME, H5D_CRT_LAYOUT_SIZE, &H5D_def_layout_g,
NULL, NULL, NULL, H5D_CRT_LAYOUT_ENC, H5D_CRT_LAYOUT_DEC,
NULL, NULL, H5D_CRT_LAYOUT_CMP, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the fill value property */
if(H5P_register_real(pclass, H5D_CRT_FILL_VALUE_NAME, H5D_CRT_FILL_VALUE_SIZE, &fill, NULL, NULL, NULL, NULL, NULL, H5D_CRT_FILL_VALUE_CMP, NULL) < 0)
if(H5P_register_real(pclass, H5D_CRT_FILL_VALUE_NAME, H5D_CRT_FILL_VALUE_SIZE, &H5D_def_fill_g,
NULL, NULL, NULL, H5D_CRT_FILL_VALUE_ENC, H5D_CRT_FILL_VALUE_DEC,
NULL, NULL, H5D_CRT_FILL_VALUE_CMP, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the space allocation time state property */
if(H5P_register_real(pclass, H5D_CRT_ALLOC_TIME_STATE_NAME, H5D_CRT_ALLOC_TIME_STATE_SIZE, &alloc_time_state, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5D_CRT_ALLOC_TIME_STATE_NAME, H5D_CRT_ALLOC_TIME_STATE_SIZE, &H5D_def_alloc_time_state_g,
NULL, NULL, NULL, H5D_CRT_ALLOC_TIME_STATE_ENC, H5D_CRT_ALLOC_TIME_STATE_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the external file list property */
if(H5P_register_real(pclass, H5D_CRT_EXT_FILE_LIST_NAME, H5D_CRT_EXT_FILE_LIST_SIZE, &efl, NULL, NULL, NULL, NULL, NULL, H5D_CRT_EXT_FILE_LIST_CMP, NULL) < 0)
if(H5P_register_real(pclass, H5D_CRT_EXT_FILE_LIST_NAME, H5D_CRT_EXT_FILE_LIST_SIZE, &H5D_def_efl_g,
NULL, NULL, NULL, H5D_CRT_EXT_FILE_LIST_ENC, H5D_CRT_EXT_FILE_LIST_DEC,
NULL, NULL, H5D_CRT_EXT_FILE_LIST_CMP, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
done:
@ -367,6 +397,148 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__dcrt_close() */
/*-------------------------------------------------------------------------
* Function: H5P__dcrt_layout_enc
*
* Purpose: Callback routine which is called whenever the layout
* property in the dataset creation property list is
* encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* Monday, October 10, 2011
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dcrt_layout_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5O_layout_t *layout = (const H5O_layout_t *)value; /* Create local aliases for values */
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(layout);
HDassert(size);
if(NULL != *pp) {
/* Encode layout type */
*(*pp)++ = (uint8_t)layout->type;
/* If layout is chunked, encode chunking structure */
if(H5D_CHUNKED == layout->type) {
unsigned u; /* Local index variable */
/* Encode rank */
*(*pp)++ = (uint8_t)layout->u.chunk.ndims;
/* Encode chunk dims */
HDcompile_assert(sizeof(uint32_t) == sizeof(layout->u.chunk.dim[0]));
for(u = 0; u < layout->u.chunk.ndims; u++)
UINT32ENCODE(*pp, layout->u.chunk.dim[u])
} /* end if */
} /* end if */
/* Size of layout type */
*size += sizeof(uint8_t);
/* Size of chunk info encoding */
if(H5D_CHUNKED == layout->type) {
*size += sizeof(uint8_t);
*size += layout->u.chunk.ndims * sizeof(uint32_t);
} /* end if */
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__dcrt_layout_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__dcrt_layout_dec
*
* Purpose: Callback routine which is called whenever the layout
* property in the dataset creation property list is
* decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* Monday, October 10, 2011
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dcrt_layout_dec(const uint8_t **pp, void *value)
{
const H5O_layout_t *layout; /* Storage layout */
H5O_layout_t chunk_layout; /* Layout structure for chunk info */
H5D_layout_t type; /* Layout type */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(value);
/* Decode layout type */
type = (H5D_layout_t)*(*pp)++;
/* set default layout in case the type is compact or contiguous, otherwise
* decode the chunked structure and set chunked layout */
switch(type) {
case H5D_COMPACT:
layout = &H5D_def_layout_compact_g;
break;
case H5D_CONTIGUOUS:
layout = &H5D_def_layout_contig_g;
break;
case H5D_CHUNKED:
{
unsigned ndims; /* Number of chunk dimensions */
/* Decode the number of chunk dimensions */
ndims = *(*pp)++;
/* default chunk layout */
if(0 == ndims)
layout = &H5D_def_layout_chunk_g;
else { /* chunk layout structure is encoded*/
unsigned u; /* Local index variable */
/* Initialize to default values */
chunk_layout = H5D_def_layout_chunk_g;
/* Set rank & dimensions */
chunk_layout.u.chunk.ndims = (unsigned)ndims;
for(u = 0; u < ndims; u++)
UINT32DECODE(*pp, chunk_layout.u.chunk.dim[u])
/* Point at the newly set up struct */
layout = &chunk_layout;
} /* end else */
}
break;
case H5D_LAYOUT_ERROR:
case H5D_NLAYOUTS:
default:
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "bad layout type")
} /* end switch */
/* Set the value */
HDmemcpy(value, layout, sizeof(H5O_layout_t));
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__dcrt_layout_dec() */
/*-------------------------------------------------------------------------
* Function: H5P__dcrt_layout_cmp
@ -438,6 +610,166 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__dcrt_layout_cmp() */
/*-------------------------------------------------------------------------
* Function: H5P__fill_value_enc
*
* Purpose: Callback routine which is called whenever the fill value
* property in the dataset creation property list is
* encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* Monday, October 10, 2011
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__fill_value_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5O_fill_t *fill = (const H5O_fill_t *)value; /* Create local aliases for values */
size_t dt_size = 0; /* Size of encoded datatype */
herr_t ret_value = SUCCEED; /* Return value */
uint64_t enc_value;
unsigned enc_size;
FUNC_ENTER_STATIC
/* Sanity check */
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
HDcompile_assert(sizeof(ssize_t) <= sizeof(int64_t));
HDassert(fill);
HDassert(size);
if(NULL != *pp) {
/* Encode alloc and fill time */
*(*pp)++ = (uint8_t)fill->alloc_time;
*(*pp)++ = (uint8_t)fill->fill_time;
/* Encode size of fill value */
INT64ENCODE(*pp, fill->size)
/* Encode the fill value & datatype */
if(fill->size > 0) {
/* Encode the fill value itself */
HDmemcpy(*pp, (uint8_t *)fill->buf, (size_t)fill->size);
*pp += fill->size;
/* Encode fill value datatype */
HDassert(fill->type);
if(H5T_encode(fill->type, NULL, &dt_size) < 0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "can't encode datatype")
/* Encode the size of a size_t */
enc_value = (uint64_t)dt_size;
enc_size = H5V_limit_enc_size(enc_value);
HDassert(enc_size < 256);
/* Encode the size */
*(*pp)++ = (uint8_t)enc_size;
/* Encode the size of the encoded datatype */
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
if(H5T_encode(fill->type, *pp, &dt_size) < 0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "can't encode datatype")
*pp += dt_size;
} /* end if */
} /* end if */
/* Calculate size needed for encoding */
*size += 2;
*size += sizeof(int64_t);
if(fill->size > 0) {
/* The size of the fill value buffer */
*size += (size_t)fill->size;
/* calculate those if they were not calculated earlier */
if(NULL == *pp) {
/* Get the size of the encoded datatype */
HDassert(fill->type);
if(H5T_encode(fill->type, NULL, &dt_size) < 0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "can't encode datatype")
enc_value = (uint64_t)dt_size;
enc_size = H5V_limit_enc_size(enc_value);
}
*size += (1 + enc_size);
*size += dt_size;
} /* end if */
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__fill_value_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__fill_value_dec
*
* Purpose: Callback routine which is called whenever the fill value
* property in the dataset creation property list is
* decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* Monday, October 10, 2011
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__fill_value_dec(const uint8_t **pp, void *_value)
{
H5O_fill_t *fill = (H5O_fill_t *)_value; /* Fill value */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
HDcompile_assert(sizeof(ssize_t) <= sizeof(int64_t));
/* Set property to default value */
*fill = H5D_def_fill_g;
/* Decode alloc and fill time */
fill->alloc_time = (H5D_alloc_time_t)*(*pp)++;
fill->fill_time = (H5D_fill_time_t)*(*pp)++;
/* Decode fill size */
INT64DECODE(*pp, fill->size)
/* Check if there's a fill value */
if(fill->size > 0) {
size_t dt_size = 0;
uint64_t enc_value;
unsigned enc_size;
/* Allocate fill buffer and copy the contents in it */
if(NULL == (fill->buf = H5MM_malloc((size_t)fill->size)))
HGOTO_ERROR(H5E_PLIST, H5E_CANTALLOC, FAIL, "memory allocation failed for fill value buffer")
HDmemcpy((uint8_t *)fill->buf, *pp, (size_t)fill->size);
*pp += fill->size;
enc_size = *(*pp)++;
HDassert(enc_size < 256);
/* Decode the size of encoded datatype */
UINT64DECODE_VAR(*pp, enc_value, enc_size);
dt_size = (size_t)enc_value;
/* Decode type */
if(NULL == (fill->type = H5T_decode(*pp)))
HGOTO_ERROR(H5E_PLIST, H5E_CANTDECODE, FAIL, "can't decode fill value datatype")
*pp += dt_size;
} /* end if */
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__fill_value_dec() */
/*-------------------------------------------------------------------------
* Function: H5P_fill_value_cmp
@ -499,6 +831,179 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P_fill_value_cmp() */
/*-------------------------------------------------------------------------
* Function: H5P__dcrt_ext_file_list_enc
*
* Purpose: Callback routine which is called whenever the efl
* property in the dataset creation property list is
* encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* Monday, October 10, 2011
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dcrt_ext_file_list_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5O_efl_t *efl = (const H5O_efl_t *)value; /* Create local aliases for values */
size_t len = 0; /* String length of slot name */
size_t u; /* Local index variable */
unsigned enc_size;
uint64_t enc_value;
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(efl);
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
HDcompile_assert(sizeof(off_t) <= sizeof(uint64_t));
HDcompile_assert(sizeof(hsize_t) <= sizeof(uint64_t));
HDassert(size);
if(NULL != *pp) {
/* Encode number of slots used */
enc_value = (uint64_t)efl->nused;
enc_size = H5V_limit_enc_size(enc_value);
HDassert(enc_size < 256);
*(*pp)++ = (uint8_t)enc_size;
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
/* Encode file list */
for(u = 0; u < efl->nused; u++) {
/* Calculate length of slot name and encode it */
len = HDstrlen(efl->slot[u].name) + 1;
enc_value = (uint64_t)len;
enc_size = H5V_limit_enc_size(enc_value);
HDassert(enc_size < 256);
*(*pp)++ = (uint8_t)enc_size;
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
/* Encode name */
HDmemcpy(*pp, (uint8_t *)(efl->slot[u].name), len);
*pp += len;
/* Encode offset */
enc_value = (uint64_t)efl->slot[u].offset;
enc_size = H5V_limit_enc_size(enc_value);
HDassert(enc_size < 256);
*(*pp)++ = (uint8_t)enc_size;
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
/* encode size */
enc_value = (uint64_t)efl->slot[u].size;
enc_size = H5V_limit_enc_size(enc_value);
HDassert(enc_size < 256);
*(*pp)++ = (uint8_t)enc_size;
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
} /* end for */
} /* end if */
/* Calculate size needed for encoding */
*size += (1 + H5V_limit_enc_size((uint64_t)efl->nused));
for(u = 0; u < efl->nused; u++) {
len = HDstrlen(efl->slot[u].name) + 1;
*size += (1 + H5V_limit_enc_size((uint64_t)len));
*size += len;
*size += (1 + H5V_limit_enc_size((uint64_t)efl->slot[u].offset));
*size += (1 + H5V_limit_enc_size((uint64_t)efl->slot[u].size));
} /* end for */
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__dcrt_ext_file_list_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__dcrt_ext_file_list_dec
*
* Purpose: Callback routine which is called whenever the efl
* property in the dataset creation property list is
* decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* Monday, October 10, 2011
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dcrt_ext_file_list_dec(const uint8_t **pp, void *_value)
{
H5O_efl_t *efl = (H5O_efl_t *)_value; /* External file list */
size_t u, nused;
unsigned enc_size;
uint64_t enc_value;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Sanity check */
HDassert(pp);
HDassert(*pp);
HDassert(efl);
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
HDcompile_assert(sizeof(off_t) <= sizeof(uint64_t));
HDcompile_assert(sizeof(hsize_t) <= sizeof(uint64_t));
/* Set property to default value */
*efl = H5D_def_efl_g;
/* Decode number of slots used */
enc_size = *(*pp)++;
HDassert(enc_size < 256);
UINT64DECODE_VAR(*pp, enc_value, enc_size);
nused = (size_t)enc_value;
/* Decode information for each slot */
for(u = 0; u < nused; u++) {
size_t len;
if(efl->nused >= efl->nalloc) {
size_t na = efl->nalloc + H5O_EFL_ALLOC;
H5O_efl_entry_t *x = (H5O_efl_entry_t *)H5MM_realloc(efl->slot,
na * sizeof(H5O_efl_entry_t));
if(!x)
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, FAIL, "memory allocation failed")
efl->nalloc = na;
efl->slot = x;
} /* end if */
/* Decode length of slot name */
enc_size = *(*pp)++;
HDassert(enc_size < 256);
UINT64DECODE_VAR(*pp, enc_value, enc_size);
len = (size_t)enc_value;
/* Allocate name buffer and decode the name into it */
efl->slot[u].name = H5MM_xstrdup((const char *)(*pp));
*pp += len;
/* decode offset */
enc_size = *(*pp)++;
HDassert(enc_size < 256);
UINT64DECODE_VAR(*pp, enc_value, enc_size);
efl->slot[u].offset = (off_t)enc_value;
/* decode size */
enc_size = *(*pp)++;
HDassert(enc_size < 256);
UINT64DECODE_VAR(*pp, enc_value, enc_size);
efl->slot[u].size = (hsize_t)enc_value;
efl->slot[u].name_offset = 0; /*not entered into heap yet*/
efl->nused++;
} /* end for */
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__dcrt_ext_file_list_dec() */
/*-------------------------------------------------------------------------
* Function: H5P__dcrt_ext_file_list_cmp
@ -1399,7 +1904,7 @@ done:
* Function: H5Pset_fill_value
*
* Purpose: Set the fill value for a dataset creation property list. The
* VALUE is interpretted as being of type TYPE, which need not
* VALUE is interpreted as being of type TYPE, which need not
* be the same type as the dataset but the library must be able
* to convert VALUE to the dataset type when the dataset is
* created. If VALUE is NULL, it will be interpreted as
@ -1410,13 +1915,6 @@ done:
* Programmer: Robb Matzke
* Thursday, October 1, 1998
*
* Modifications:
*
* Raymond Lu
* Tuesday, October 2, 2001
* Changed the way to check parameter and set property for
* generic property list.
*
*-------------------------------------------------------------------------
*/
herr_t

View File

@ -267,7 +267,7 @@ H5Pregister1(hid_t cls_id, const char *name, size_t size, void *def_value,
/* Create the new property list class */
orig_pclass = pclass;
if((ret_value = H5P_register(&pclass, name, size, def_value, prp_create, prp_set, prp_get, prp_delete, prp_copy, NULL, prp_close)) < 0)
if((ret_value = H5P_register(&pclass, name, size, def_value, prp_create, prp_set, prp_get, NULL, NULL, prp_delete, prp_copy, NULL, prp_close)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to register property in class");
/* Check if the property class changed and needs to be substituted in the ID */
@ -450,7 +450,8 @@ H5Pinsert1(hid_t plist_id, const char *name, size_t size, void *value,
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "properties >0 size must have default")
/* Create the new property list class */
if((ret_value = H5P_insert(plist, name, size, value, prp_set, prp_get, prp_delete, prp_copy, NULL, prp_close)) < 0)
if((ret_value = H5P_insert(plist, name, size, value, prp_set, prp_get,
NULL, NULL, prp_delete, prp_copy, NULL, prp_close)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to register property in plist")
done:

View File

@ -38,6 +38,7 @@
#include "H5Dprivate.h" /* Datasets */
#include "H5Eprivate.h" /* Error handling */
#include "H5Iprivate.h" /* IDs */
#include "H5MMprivate.h" /* Memory management */
#include "H5Ppkg.h" /* Property lists */
@ -49,6 +50,8 @@
/* Definitions for maximum temp buffer size property */
#define H5D_XFER_MAX_TEMP_BUF_SIZE sizeof(size_t)
#define H5D_XFER_MAX_TEMP_BUF_DEF H5D_TEMP_BUF_SIZE
#define H5D_XFER_MAX_TEMP_BUF_ENC H5P__encode_size_t
#define H5D_XFER_MAX_TEMP_BUF_DEC H5P__decode_size_t
/* Definitions for type conversion buffer property */
#define H5D_XFER_TCONV_BUF_SIZE sizeof(void *)
#define H5D_XFER_TCONV_BUF_DEF NULL
@ -58,12 +61,16 @@
/* Definitions for background buffer type property */
#define H5D_XFER_BKGR_BUF_TYPE_SIZE sizeof(H5T_bkg_t)
#define H5D_XFER_BKGR_BUF_TYPE_DEF H5T_BKG_NO
#define H5D_XFER_BKGR_BUF_TYPE_ENC H5P__dxfr_bkgr_buf_type_enc
#define H5D_XFER_BKGR_BUF_TYPE_DEC H5P__dxfr_bkgr_buf_type_dec
/* Definitions for B-tree node splitting ratio property */
/* (These default B-tree node splitting ratios are also used for splitting
* group's B-trees as well as chunked dataset's B-trees - QAK)
*/
#define H5D_XFER_BTREE_SPLIT_RATIO_SIZE sizeof(double[3])
#define H5D_XFER_BTREE_SPLIT_RATIO_DEF {0.1, 0.5, 0.9}
#define H5D_XFER_BTREE_SPLIT_RATIO_DEF {0.1f, 0.5f, 0.9f}
#define H5D_XFER_BTREE_SPLIT_RATIO_ENC H5P__dxfr_btree_split_ratio_enc
#define H5D_XFER_BTREE_SPLIT_RATIO_DEC H5P__dxfr_btree_split_ratio_dec
/* Definitions for vlen allocation function property */
#define H5D_XFER_VLEN_ALLOC_SIZE sizeof(H5MM_allocate_t)
#define H5D_XFER_VLEN_ALLOC_DEF H5D_VLEN_ALLOC
@ -82,20 +89,37 @@
*/
#define H5D_XFER_HYPER_VECTOR_SIZE_SIZE sizeof(size_t)
#define H5D_XFER_HYPER_VECTOR_SIZE_DEF H5D_IO_VECTOR_SIZE
#define H5D_XFER_HYPER_VECTOR_SIZE_ENC H5P__encode_size_t
#define H5D_XFER_HYPER_VECTOR_SIZE_DEC H5P__decode_size_t
/* Parallel I/O properties */
/* Note: Some of these are registered with the DXPL class even when parallel
* is disabled, so that property list comparisons of encoded property
* lists (between parallel & non-parallel builds) work properly. -QAK
*/
#ifdef H5_HAVE_PARALLEL
/* Definitions for I/O transfer mode property */
#define H5D_XFER_IO_XFER_MODE_SIZE sizeof(H5FD_mpio_xfer_t)
#define H5D_XFER_IO_XFER_MODE_DEF H5FD_MPIO_INDEPENDENT
#define H5D_XFER_IO_XFER_MODE_ENC H5P__dxfr_io_xfer_mode_enc
#define H5D_XFER_IO_XFER_MODE_DEC H5P__dxfr_io_xfer_mode_dec
/* Definitions for optimization of MPI-IO transfer mode property */
#define H5D_XFER_MPIO_COLLECTIVE_OPT_SIZE sizeof(H5FD_mpio_collective_opt_t)
#define H5D_XFER_MPIO_COLLECTIVE_OPT_DEF H5FD_MPIO_COLLECTIVE_IO
#define H5D_XFER_MPIO_COLLECTIVE_OPT_ENC H5P__dxfr_mpio_collective_opt_enc
#define H5D_XFER_MPIO_COLLECTIVE_OPT_DEC H5P__dxfr_mpio_collective_opt_dec
#define H5D_XFER_MPIO_CHUNK_OPT_HARD_SIZE sizeof(H5FD_mpio_chunk_opt_t)
#define H5D_XFER_MPIO_CHUNK_OPT_HARD_DEF H5FD_MPIO_CHUNK_DEFAULT
#define H5D_XFER_MPIO_CHUNK_OPT_HARD_ENC H5P__dxfr_mpio_chunk_opt_hard_enc
#define H5D_XFER_MPIO_CHUNK_OPT_HARD_DEC H5P__dxfr_mpio_chunk_opt_hard_dec
#define H5D_XFER_MPIO_CHUNK_OPT_NUM_SIZE sizeof(unsigned)
#define H5D_XFER_MPIO_CHUNK_OPT_NUM_DEF H5D_ONE_LINK_CHUNK_IO_THRESHOLD
#define H5D_XFER_MPIO_CHUNK_OPT_NUM_ENC H5P__encode_unsigned
#define H5D_XFER_MPIO_CHUNK_OPT_NUM_DEC H5P__decode_unsigned
#define H5D_XFER_MPIO_CHUNK_OPT_RATIO_SIZE sizeof(unsigned)
#define H5D_XFER_MPIO_CHUNK_OPT_RATIO_DEF H5D_MULTI_CHUNK_IO_COL_THRESHOLD
#define H5D_XFER_MPIO_CHUNK_OPT_RATIO_ENC H5P__encode_unsigned
#define H5D_XFER_MPIO_CHUNK_OPT_RATIO_DEC H5P__decode_unsigned
/* Definitions for chunk opt mode property. */
#define H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_SIZE sizeof(H5D_mpio_actual_chunk_opt_mode_t)
#define H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_DEF H5D_MPIO_NO_CHUNK_OPTIMIZATION
@ -105,6 +129,7 @@
/* Definitions for cause of broken collective io property */
#define H5D_MPIO_NO_COLLECTIVE_CAUSE_SIZE sizeof(uint32_t)
#define H5D_MPIO_NO_COLLECTIVE_CAUSE_DEF H5D_MPIO_COLLECTIVE
#ifdef H5_HAVE_PARALLEL
/* Definitions for memory MPI type property */
#define H5FD_MPI_XFER_MEM_MPI_TYPE_SIZE sizeof(MPI_Datatype)
#define H5FD_MPI_XFER_MEM_MPI_TYPE_DEF MPI_DATATYPE_NULL
@ -116,6 +141,8 @@
/* Definitions for EDC property */
#define H5D_XFER_EDC_SIZE sizeof(H5Z_EDC_t)
#define H5D_XFER_EDC_DEF H5Z_ENABLE_EDC
#define H5D_XFER_EDC_ENC H5P__dxfr_edc_enc
#define H5D_XFER_EDC_DEC H5P__dxfr_edc_dec
/* Definitions for filter callback function property */
#define H5D_XFER_FILTER_CB_SIZE sizeof(H5Z_cb_t)
#define H5D_XFER_FILTER_CB_DEF {NULL,NULL}
@ -125,6 +152,8 @@
/* Definitions for data transform property */
#define H5D_XFER_XFORM_SIZE sizeof(void *)
#define H5D_XFER_XFORM_DEF NULL
#define H5D_XFER_XFORM_ENC H5P__dxfr_xform_enc
#define H5D_XFER_XFORM_DEC H5P__dxfr_xform_dec
#define H5D_XFER_XFORM_DEL H5P__dxfr_xform_del
#define H5D_XFER_XFORM_COPY H5P__dxfr_xform_copy
#define H5D_XFER_XFORM_CMP H5P__dxfr_xform_cmp
@ -148,6 +177,20 @@
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, uint8_t **pp, size_t *size);
static herr_t H5P__dxfr_bkgr_buf_type_dec(const uint8_t **pp, void *value);
static herr_t H5P__dxfr_btree_split_ratio_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__dxfr_btree_split_ratio_dec(const uint8_t **pp, void *value);
static herr_t H5P__dxfr_io_xfer_mode_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__dxfr_io_xfer_mode_dec(const uint8_t **pp, void *value);
static herr_t H5P__dxfr_mpio_collective_opt_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__dxfr_mpio_collective_opt_dec(const uint8_t **pp, void *value);
static herr_t H5P__dxfr_mpio_chunk_opt_hard_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__dxfr_mpio_chunk_opt_hard_dec(const uint8_t **pp, void *value);
static herr_t H5P__dxfr_edc_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__dxfr_edc_dec(const uint8_t **pp, void *value);
static herr_t H5P__dxfr_xform_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__dxfr_xform_dec(const uint8_t **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);
static int H5P__dxfr_xform_cmp(const void *value1, const void *value2, size_t size);
@ -180,6 +223,40 @@ const H5P_libclass_t H5P_CLS_DXFR[1] = {{
/*****************************/
/***************************/
/* Local Private Variables */
/***************************/
/* Property value defaults */
static const size_t H5D_def_max_temp_buf_g = H5D_XFER_MAX_TEMP_BUF_DEF; /* Default value for maximum temp buffer size */
static const void *H5D_def_tconv_buf_g = H5D_XFER_TCONV_BUF_DEF; /* Default value for type conversion buffer */
static const void *H5D_def_bkgr_buf_g = H5D_XFER_BKGR_BUF_DEF; /* Default value for background buffer */
static const H5T_bkg_t H5D_def_bkgr_buf_type_g = H5D_XFER_BKGR_BUF_TYPE_DEF;
static const double H5D_def_btree_split_ratio_g[3] = H5D_XFER_BTREE_SPLIT_RATIO_DEF; /* Default value for B-tree node split ratios */
static const H5MM_allocate_t H5D_def_vlen_alloc_g = H5D_XFER_VLEN_ALLOC_DEF; /* Default value for vlen allocation function */
static const void *H5D_def_vlen_alloc_info_g = H5D_XFER_VLEN_ALLOC_INFO_DEF; /* Default value for vlen allocation information */
static const H5MM_free_t H5D_def_vlen_free_g = H5D_XFER_VLEN_FREE_DEF; /* Default value for vlen free function */
static const void *H5D_def_vlen_free_info_g = H5D_XFER_VLEN_FREE_INFO_DEF; /* Default value for vlen free information */
static const size_t H5D_def_hyp_vec_size_g = H5D_XFER_HYPER_VECTOR_SIZE_DEF; /* Default value for vector size */
static const haddr_t H5D_def_metadata_tag_g = H5AC_METADATA_TAG_DEF; /* Default value for metadata tag */
static const H5FD_mpio_xfer_t H5D_def_io_xfer_mode_g = H5D_XFER_IO_XFER_MODE_DEF; /* Default value for I/O transfer mode */
static const H5FD_mpio_chunk_opt_t H5D_def_mpio_chunk_opt_mode_g = H5D_XFER_MPIO_CHUNK_OPT_HARD_DEF;
static const H5FD_mpio_collective_opt_t H5D_def_mpio_collective_opt_mode_g = H5D_XFER_MPIO_COLLECTIVE_OPT_DEF;
static const unsigned H5D_def_mpio_chunk_opt_num_g = H5D_XFER_MPIO_CHUNK_OPT_NUM_DEF;
static const unsigned H5D_def_mpio_chunk_opt_ratio_g = H5D_XFER_MPIO_CHUNK_OPT_RATIO_DEF;
static const H5D_mpio_actual_chunk_opt_mode_t H5D_def_mpio_actual_chunk_opt_mode_g = H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_DEF;
static const H5D_mpio_actual_io_mode_t H5D_def_mpio_actual_io_mode_g = H5D_MPIO_ACTUAL_IO_MODE_DEF;
static const H5D_mpio_no_collective_cause_t H5D_def_mpio_no_collective_cause_g = H5D_MPIO_NO_COLLECTIVE_CAUSE_DEF;
#ifdef H5_HAVE_PARALLEL
static const MPI_Datatype H5D_def_btype_g = H5FD_MPI_XFER_MEM_MPI_TYPE_DEF; /* Default value for MPI buffer type */
static const MPI_Datatype H5D_def_ftype_g = H5FD_MPI_XFER_FILE_MPI_TYPE_DEF; /* Default value for MPI file type */
#endif /* H5_HAVE_PARALLEL */
static const H5Z_EDC_t H5D_def_enable_edc_g = H5D_XFER_EDC_DEF; /* Default value for EDC property */
static const H5Z_cb_t H5D_def_filter_cb_g = H5D_XFER_FILTER_CB_DEF; /* Default value for filter callback */
static const H5T_conv_cb_t H5D_def_conv_cb_g = H5D_XFER_CONV_CB_DEF; /* Default value for datatype conversion callback */
static const void *H5D_def_xfer_xform_g = H5D_XFER_XFORM_DEF; /* Default value for data transform */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_reg_prop
@ -195,135 +272,158 @@ const H5P_libclass_t H5P_CLS_DXFR[1] = {{
static herr_t
H5P__dxfr_reg_prop(H5P_genclass_t *pclass)
{
size_t def_max_temp_buf = H5D_XFER_MAX_TEMP_BUF_DEF; /* Default value for maximum temp buffer size */
void *def_tconv_buf = H5D_XFER_TCONV_BUF_DEF; /* Default value for type conversion buffer */
void *def_bkgr_buf = H5D_XFER_BKGR_BUF_DEF; /* Default value for background buffer */
H5T_bkg_t def_bkgr_buf_type = H5D_XFER_BKGR_BUF_TYPE_DEF;
double def_btree_split_ratio[3] = H5D_XFER_BTREE_SPLIT_RATIO_DEF; /* Default value for B-tree node split ratios */
H5MM_allocate_t def_vlen_alloc = H5D_XFER_VLEN_ALLOC_DEF; /* Default value for vlen allocation function */
void *def_vlen_alloc_info = H5D_XFER_VLEN_ALLOC_INFO_DEF; /* Default value for vlen allocation information */
H5MM_free_t def_vlen_free = H5D_XFER_VLEN_FREE_DEF; /* Default value for vlen free function */
void *def_vlen_free_info = H5D_XFER_VLEN_FREE_INFO_DEF; /* Default value for vlen free information */
size_t def_hyp_vec_size = H5D_XFER_HYPER_VECTOR_SIZE_DEF; /* Default value for vector size */
haddr_t metadata_tag = H5AC_METADATA_TAG_DEF; /* Default value for metadata tag */
#ifdef H5_HAVE_PARALLEL
H5FD_mpio_xfer_t def_io_xfer_mode = H5D_XFER_IO_XFER_MODE_DEF; /* Default value for I/O transfer mode */
H5FD_mpio_chunk_opt_t def_mpio_chunk_opt_mode = H5D_XFER_MPIO_CHUNK_OPT_HARD_DEF;
H5FD_mpio_collective_opt_t def_mpio_collective_opt_mode = H5D_XFER_MPIO_COLLECTIVE_OPT_DEF;
unsigned def_mpio_chunk_opt_num = H5D_XFER_MPIO_CHUNK_OPT_NUM_DEF;
unsigned def_mpio_chunk_opt_ratio = H5D_XFER_MPIO_CHUNK_OPT_RATIO_DEF;
H5D_mpio_actual_chunk_opt_mode_t def_mpio_actual_chunk_opt_mode = H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_DEF;
H5D_mpio_actual_io_mode_t def_mpio_actual_io_mode = H5D_MPIO_ACTUAL_IO_MODE_DEF;
H5D_mpio_no_collective_cause_t def_mpio_no_collective_cause = H5D_MPIO_NO_COLLECTIVE_CAUSE_DEF;
MPI_Datatype btype = H5FD_MPI_XFER_MEM_MPI_TYPE_DEF; /* Default value for MPI buffer type */
MPI_Datatype ftype = H5FD_MPI_XFER_FILE_MPI_TYPE_DEF; /* Default value for MPI file type */
#endif /* H5_HAVE_PARALLEL */
H5Z_EDC_t enable_edc = H5D_XFER_EDC_DEF; /* Default value for EDC property */
H5Z_cb_t filter_cb = H5D_XFER_FILTER_CB_DEF; /* Default value for filter callback */
H5T_conv_cb_t conv_cb = H5D_XFER_CONV_CB_DEF; /* Default value for datatype conversion callback */
void *def_xfer_xform = H5D_XFER_XFORM_DEF; /* Default value for data transform */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Register the max. temp buffer size property */
if(H5P_register_real(pclass, H5D_XFER_MAX_TEMP_BUF_NAME, H5D_XFER_MAX_TEMP_BUF_SIZE, &def_max_temp_buf, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5D_XFER_MAX_TEMP_BUF_NAME, H5D_XFER_MAX_TEMP_BUF_SIZE, &H5D_def_max_temp_buf_g,
NULL, NULL, NULL, H5D_XFER_MAX_TEMP_BUF_ENC, H5D_XFER_MAX_TEMP_BUF_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the metadata tag property */
if(H5P_register_real(pclass, H5AC_METADATA_TAG_NAME, H5AC_METADATA_TAG_SIZE, &metadata_tag, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5AC_METADATA_TAG_NAME, H5AC_METADATA_TAG_SIZE, &H5D_def_metadata_tag_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the type conversion buffer property */
if(H5P_register_real(pclass, H5D_XFER_TCONV_BUF_NAME, H5D_XFER_TCONV_BUF_SIZE, &def_tconv_buf, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5D_XFER_TCONV_BUF_NAME, H5D_XFER_TCONV_BUF_SIZE, &H5D_def_tconv_buf_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the background buffer property */
if(H5P_register_real(pclass, H5D_XFER_BKGR_BUF_NAME, H5D_XFER_BKGR_BUF_SIZE, &def_bkgr_buf, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5D_XFER_BKGR_BUF_NAME, H5D_XFER_BKGR_BUF_SIZE, &H5D_def_bkgr_buf_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the background buffer type property */
if(H5P_register_real(pclass, H5D_XFER_BKGR_BUF_TYPE_NAME, H5D_XFER_BKGR_BUF_TYPE_SIZE, &def_bkgr_buf_type, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5D_XFER_BKGR_BUF_TYPE_NAME, H5D_XFER_BKGR_BUF_TYPE_SIZE, &H5D_def_bkgr_buf_type_g,
NULL, NULL, NULL, H5D_XFER_BKGR_BUF_TYPE_ENC, H5D_XFER_BKGR_BUF_TYPE_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the B-Tree node splitting ratios property */
if(H5P_register_real(pclass, H5D_XFER_BTREE_SPLIT_RATIO_NAME, H5D_XFER_BTREE_SPLIT_RATIO_SIZE, def_btree_split_ratio, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5D_XFER_BTREE_SPLIT_RATIO_NAME, H5D_XFER_BTREE_SPLIT_RATIO_SIZE, H5D_def_btree_split_ratio_g,
NULL, NULL, NULL, H5D_XFER_BTREE_SPLIT_RATIO_ENC, H5D_XFER_BTREE_SPLIT_RATIO_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the vlen allocation function property */
if(H5P_register_real(pclass, H5D_XFER_VLEN_ALLOC_NAME, H5D_XFER_VLEN_ALLOC_SIZE, &def_vlen_alloc, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5D_XFER_VLEN_ALLOC_NAME, H5D_XFER_VLEN_ALLOC_SIZE, &H5D_def_vlen_alloc_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the vlen allocation information property */
if(H5P_register_real(pclass, H5D_XFER_VLEN_ALLOC_INFO_NAME, H5D_XFER_VLEN_ALLOC_INFO_SIZE, &def_vlen_alloc_info, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5D_XFER_VLEN_ALLOC_INFO_NAME, H5D_XFER_VLEN_ALLOC_INFO_SIZE, &H5D_def_vlen_alloc_info_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the vlen free function property */
if(H5P_register_real(pclass, H5D_XFER_VLEN_FREE_NAME, H5D_XFER_VLEN_FREE_SIZE, &def_vlen_free, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5D_XFER_VLEN_FREE_NAME, H5D_XFER_VLEN_FREE_SIZE, &H5D_def_vlen_free_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the vlen free information property */
if(H5P_register_real(pclass, H5D_XFER_VLEN_FREE_INFO_NAME, H5D_XFER_VLEN_FREE_INFO_SIZE, &def_vlen_free_info, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5D_XFER_VLEN_FREE_INFO_NAME, H5D_XFER_VLEN_FREE_INFO_SIZE, &H5D_def_vlen_free_info_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the vector size property */
if(H5P_register_real(pclass, H5D_XFER_HYPER_VECTOR_SIZE_NAME, H5D_XFER_HYPER_VECTOR_SIZE_SIZE, &def_hyp_vec_size, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5D_XFER_HYPER_VECTOR_SIZE_NAME, H5D_XFER_HYPER_VECTOR_SIZE_SIZE, &H5D_def_hyp_vec_size_g,
NULL, NULL, NULL, H5D_XFER_HYPER_VECTOR_SIZE_ENC, H5D_XFER_HYPER_VECTOR_SIZE_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
#ifdef H5_HAVE_PARALLEL
/* Register the I/O transfer mode properties */
if(H5P_register_real(pclass, H5D_XFER_IO_XFER_MODE_NAME, H5D_XFER_IO_XFER_MODE_SIZE, &def_io_xfer_mode, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5D_XFER_IO_XFER_MODE_NAME, H5D_XFER_IO_XFER_MODE_SIZE, &H5D_def_io_xfer_mode_g,
NULL, NULL, NULL, H5D_XFER_IO_XFER_MODE_ENC, H5D_XFER_IO_XFER_MODE_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
if(H5P_register_real(pclass, H5D_XFER_MPIO_COLLECTIVE_OPT_NAME, H5D_XFER_MPIO_COLLECTIVE_OPT_SIZE, &def_mpio_collective_opt_mode, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5D_XFER_MPIO_COLLECTIVE_OPT_NAME, H5D_XFER_MPIO_COLLECTIVE_OPT_SIZE, &H5D_def_mpio_collective_opt_mode_g,
NULL, NULL, NULL, H5D_XFER_MPIO_COLLECTIVE_OPT_ENC, H5D_XFER_MPIO_COLLECTIVE_OPT_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
if(H5P_register_real(pclass, H5D_XFER_MPIO_CHUNK_OPT_HARD_NAME, H5D_XFER_MPIO_CHUNK_OPT_HARD_SIZE, &def_mpio_chunk_opt_mode, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5D_XFER_MPIO_CHUNK_OPT_HARD_NAME, H5D_XFER_MPIO_CHUNK_OPT_HARD_SIZE, &H5D_def_mpio_chunk_opt_mode_g,
NULL, NULL, NULL, H5D_XFER_MPIO_CHUNK_OPT_HARD_ENC, H5D_XFER_MPIO_CHUNK_OPT_HARD_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
if(H5P_register_real(pclass, H5D_XFER_MPIO_CHUNK_OPT_NUM_NAME, H5D_XFER_MPIO_CHUNK_OPT_NUM_SIZE, &def_mpio_chunk_opt_num, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5D_XFER_MPIO_CHUNK_OPT_NUM_NAME, H5D_XFER_MPIO_CHUNK_OPT_NUM_SIZE, &H5D_def_mpio_chunk_opt_num_g,
NULL, NULL, NULL, H5D_XFER_MPIO_CHUNK_OPT_NUM_ENC, H5D_XFER_MPIO_CHUNK_OPT_NUM_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
if(H5P_register_real(pclass, H5D_XFER_MPIO_CHUNK_OPT_RATIO_NAME, H5D_XFER_MPIO_CHUNK_OPT_RATIO_SIZE, &def_mpio_chunk_opt_ratio, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5D_XFER_MPIO_CHUNK_OPT_RATIO_NAME, H5D_XFER_MPIO_CHUNK_OPT_RATIO_SIZE, &H5D_def_mpio_chunk_opt_ratio_g,
NULL, NULL, NULL, H5D_XFER_MPIO_CHUNK_OPT_RATIO_ENC, H5D_XFER_MPIO_CHUNK_OPT_RATIO_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the chunk optimization mode property. */
if(H5P_register_real(pclass, H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME, H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_SIZE, &def_mpio_actual_chunk_opt_mode, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME, H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_SIZE, &H5D_def_mpio_actual_chunk_opt_mode_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the actual I/O mode property. */
if(H5P_register_real(pclass, H5D_MPIO_ACTUAL_IO_MODE_NAME, H5D_MPIO_ACTUAL_IO_MODE_SIZE, &def_mpio_actual_io_mode, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5D_MPIO_ACTUAL_IO_MODE_NAME, H5D_MPIO_ACTUAL_IO_MODE_SIZE, &H5D_def_mpio_actual_io_mode_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the local cause of broken collective I/O */
if(H5P_register_real(pclass, H5D_MPIO_LOCAL_NO_COLLECTIVE_CAUSE_NAME, H5D_MPIO_NO_COLLECTIVE_CAUSE_SIZE, &def_mpio_no_collective_cause, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5D_MPIO_LOCAL_NO_COLLECTIVE_CAUSE_NAME, H5D_MPIO_NO_COLLECTIVE_CAUSE_SIZE, &H5D_def_mpio_no_collective_cause_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the global cause of broken collective I/O */
if(H5P_register_real(pclass, H5D_MPIO_GLOBAL_NO_COLLECTIVE_CAUSE_NAME, H5D_MPIO_NO_COLLECTIVE_CAUSE_SIZE, &def_mpio_no_collective_cause, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5D_MPIO_GLOBAL_NO_COLLECTIVE_CAUSE_NAME, H5D_MPIO_NO_COLLECTIVE_CAUSE_SIZE, &H5D_def_mpio_no_collective_cause_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
#ifdef H5_HAVE_PARALLEL
/* Register the MPI memory type property */
if(H5P_register_real(pclass, H5FD_MPI_XFER_MEM_MPI_TYPE_NAME, H5FD_MPI_XFER_MEM_MPI_TYPE_SIZE,
&btype, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5FD_MPI_XFER_MEM_MPI_TYPE_NAME, H5FD_MPI_XFER_MEM_MPI_TYPE_SIZE, &H5D_def_btype_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the MPI file type property */
if(H5P_register_real(pclass, H5FD_MPI_XFER_FILE_MPI_TYPE_NAME, H5FD_MPI_XFER_FILE_MPI_TYPE_SIZE,
&ftype, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5FD_MPI_XFER_FILE_MPI_TYPE_NAME, H5FD_MPI_XFER_FILE_MPI_TYPE_SIZE, &H5D_def_ftype_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
#endif /* H5_HAVE_PARALLEL */
/* Register the EDC property */
if(H5P_register_real(pclass, H5D_XFER_EDC_NAME, H5D_XFER_EDC_SIZE, &enable_edc, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5D_XFER_EDC_NAME, H5D_XFER_EDC_SIZE, &H5D_def_enable_edc_g,
NULL, NULL, NULL, H5D_XFER_EDC_ENC, H5D_XFER_EDC_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the filter callback property */
if(H5P_register_real(pclass, H5D_XFER_FILTER_CB_NAME, H5D_XFER_FILTER_CB_SIZE, &filter_cb, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5D_XFER_FILTER_CB_NAME, H5D_XFER_FILTER_CB_SIZE, &H5D_def_filter_cb_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the type conversion callback property */
if(H5P_register_real(pclass, H5D_XFER_CONV_CB_NAME, H5D_XFER_CONV_CB_SIZE, &conv_cb, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5D_XFER_CONV_CB_NAME, H5D_XFER_CONV_CB_SIZE, &H5D_def_conv_cb_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the data transform property */
if(H5P_register_real(pclass, H5D_XFER_XFORM_NAME, H5D_XFER_XFORM_SIZE, &def_xfer_xform, NULL, NULL, NULL, H5D_XFER_XFORM_DEL, H5D_XFER_XFORM_COPY, H5D_XFER_XFORM_CMP, H5D_XFER_XFORM_CLOSE) < 0)
if(H5P_register_real(pclass, H5D_XFER_XFORM_NAME, H5D_XFER_XFORM_SIZE, &H5D_def_xfer_xform_g,
NULL, NULL, NULL, H5D_XFER_XFORM_ENC, H5D_XFER_XFORM_DEC,
H5D_XFER_XFORM_DEL, H5D_XFER_XFORM_COPY, H5D_XFER_XFORM_CMP, H5D_XFER_XFORM_CLOSE) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
done:
@ -331,10 +431,294 @@ done:
} /* end H5P__dxfr_reg_prop() */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_bkgr_buf_type_enc
*
* Purpose: Callback routine which is called whenever the background
* buffer type property in the dataset transfer property list
* is encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 3, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dxfr_bkgr_buf_type_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5T_bkg_t *bkgr_buf_type = (const H5T_bkg_t *)value; /* Create local alias for values */
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(bkgr_buf_type);
HDassert(size);
if(NULL != *pp)
/* Encode background buffer type */
*(*pp)++ = (uint8_t)*bkgr_buf_type;
/* Size of background buffer type */
(*size)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__dxfr_bkgr_buf_type_enc() */
/*-------------------------------------------------------------------------
* Function: H5P_dxfr_xform_del
* Function: H5P__dxfr_bkgr_buf_type_dec
*
* Purpose: Callback routine which is called whenever the background
* buffer type property in the dataset transfer property list
* is decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 3, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dxfr_bkgr_buf_type_dec(const uint8_t **pp, void *_value)
{
H5T_bkg_t *bkgr_buf_type = (H5T_bkg_t *)_value; /* Background buffer type */
FUNC_ENTER_STATIC_NOERR
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(bkgr_buf_type);
/* Decode background buffer type */
*bkgr_buf_type = (H5T_bkg_t)*(*pp)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__dxfr_bkgr_buf_type_dec() */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_btree_split_ratio_enc
*
* Purpose: Callback routine which is called whenever the B-tree split
* ratio property in the dataset transfer property list
* is encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 3, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dxfr_btree_split_ratio_enc(const void *value, uint8_t **pp, size_t *size)
{
const double *btree_split_ratio = (const double *)value; /* Create local alias for values */
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(btree_split_ratio);
HDassert(size);
if(NULL != *pp) {
/* Encode the size of a double*/
*(*pp)++ = (uint8_t)sizeof(double);
/* Encode the left split value */
H5_ENCODE_DOUBLE(*pp, *(const double *)btree_split_ratio)
btree_split_ratio++;
/* Encode the middle split value */
H5_ENCODE_DOUBLE(*pp, *(const double *)btree_split_ratio)
btree_split_ratio++;
/* Encode the right split value */
H5_ENCODE_DOUBLE(*pp, *(const double *)btree_split_ratio)
} /* end if */
/* Size of B-tree split ratio values */
*size += 1 + (3 * sizeof(double));
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__dxfr_btree_split_ratio_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_btree_split_ratio_dec
*
* Purpose: Callback routine which is called whenever the B-tree split
* ratio property in the dataset transfer property list
* is decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 3, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dxfr_btree_split_ratio_dec(const uint8_t **pp, void *_value)
{
double *btree_split_ratio = (double *)_value; /* B-tree split ratio */
unsigned enc_size; /* Size of encoded property */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(btree_split_ratio);
/* Decode the size */
enc_size = *(*pp)++;
if(enc_size != sizeof(double))
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "double value can't be decoded")
/* Decode the left, middle & left B-tree split ratios */
H5_DECODE_DOUBLE(*pp, btree_split_ratio[0])
H5_DECODE_DOUBLE(*pp, btree_split_ratio[1])
H5_DECODE_DOUBLE(*pp, btree_split_ratio[2])
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__dxfr_btree_split_ratio_dec() */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_xform_enc
*
* Purpose: Callback routine which is called whenever the data transform
* property in the dataset transfer property list
* is encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Monday, August 6, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dxfr_xform_enc(const void *value, uint8_t **pp, size_t *size)
{
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 */
size_t len = 0; /* Length of transform expression */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Sanity check */
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
HDassert(size);
/* Check for data transform set */
if(NULL != data_xform_prop) {
/* Get the transform expression */
if(NULL == (pexp = H5Z_xform_extract_xform_str(data_xform_prop)))
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "failed to retrieve transform expression")
/* Get the transform string expression size */
len = HDstrlen(pexp) + 1;
} /* end if */
if(NULL != *pp) {
uint64_t enc_value;
unsigned enc_size;
/* encode the length of the prefix */
enc_value = (uint64_t)len;
enc_size = H5V_limit_enc_size(enc_value);
HDassert(enc_size < 256);
*(*pp)++ = (uint8_t)enc_size;
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
if(NULL != data_xform_prop) {
/* Sanity check */
HDassert(pexp);
/* Copy the expression into the buffer */
HDmemcpy(*pp, (const uint8_t *)pexp, len);
*pp += len;
*pp[0] = '\0';
} /* end if */
} /* end if */
/* Size of encoded data transform */
*size += (1 + H5V_limit_enc_size((uint64_t)len));
if(NULL != pexp)
*size += len;
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__dxfr_xform_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_xform_dec
*
* Purpose: Callback routine which is called whenever the data transform
* property in the dataset transfer property list
* is decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Monday, August 6, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dxfr_xform_dec(const uint8_t **pp, void *_value)
{
H5Z_data_xform_t **data_xform_prop = (H5Z_data_xform_t **)_value; /* New data xform property */
size_t len; /* Length of encoded string */
unsigned enc_size;
uint64_t enc_value;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(data_xform_prop);
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
/* Decode the length of xform expression */
enc_size = *(*pp)++;
HDassert(enc_size < 256);
UINT64DECODE_VAR(*pp, enc_value, enc_size);
len = (size_t)enc_value;
if(0 != len) {
if(NULL == (*data_xform_prop = H5Z_xform_create((const char *)*pp)))
HGOTO_ERROR(H5E_PLIST, H5E_CANTCREATE, FAIL, "unable to create data transform info")
*pp += len;
} /* end if */
else
*data_xform_prop = H5D_XFER_XFORM_DEF;
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__dxfr_xform_dec() */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_xform_del
*
* Purpose: Frees memory allocated by H5P_dxfr_xform_set
*
@ -1301,6 +1685,219 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Pget_hyper_vector_size() */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_io_xfer_mode_enc
*
* Purpose: Callback routine which is called whenever the I/O transfer
* mode property in the dataset transfer property list
* is encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 3, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dxfr_io_xfer_mode_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5FD_mpio_xfer_t *xfer_mode = (const H5FD_mpio_xfer_t *)value; /* Create local alias for values */
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(xfer_mode);
HDassert(size);
if(NULL != *pp)
/* Encode I/O transfer mode */
*(*pp)++ = (uint8_t)*xfer_mode;
/* Size of I/O transfer mode */
(*size)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__dxfr_io_xfer_mode_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_io_xfer_mode_dec
*
* Purpose: Callback routine which is called whenever the I/O transfer
* mode property in the dataset transfer property list
* is decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 3, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dxfr_io_xfer_mode_dec(const uint8_t **pp, void *_value)
{
H5FD_mpio_xfer_t *xfer_mode = (H5FD_mpio_xfer_t *)_value; /* I/O transfer mode */
FUNC_ENTER_STATIC_NOERR
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(xfer_mode);
/* Decode I/O transfer mode */
*xfer_mode = (H5FD_mpio_xfer_t)*(*pp)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__dxfr_io_xfer_mode_dec() */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_mpio_collective_opt_enc
*
* Purpose: Callback routine which is called whenever the MPI-I/O
* collective optimization property in the dataset transfer
* property list is encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 3, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dxfr_mpio_collective_opt_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5FD_mpio_collective_opt_t *coll_opt = (const H5FD_mpio_collective_opt_t *)value; /* Create local alias for values */
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(coll_opt);
HDassert(size);
if(NULL != *pp)
/* Encode MPI-I/O collective optimization property */
*(*pp)++ = (uint8_t)*coll_opt;
/* Size of MPI-I/O collective optimization property */
(*size)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__dxfr_mpio_collective_opt_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_mpio_collective_opt_dec
*
* Purpose: Callback routine which is called whenever the MPI-I/O
* collective optimization property in the dataset transfer
* property list is decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 3, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dxfr_mpio_collective_opt_dec(const uint8_t **pp, void *_value)
{
H5FD_mpio_collective_opt_t *coll_opt = (H5FD_mpio_collective_opt_t *)_value; /* MPI-I/O collective optimization mode */
FUNC_ENTER_STATIC_NOERR
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(coll_opt);
/* Decode MPI-I/O collective optimization mode */
*coll_opt = (H5FD_mpio_collective_opt_t)*(*pp)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__dxfr_mpio_collective_opt_dec() */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_mpio_chunk_opt_hard_enc
*
* Purpose: Callback routine which is called whenever the MPI-I/O
* chunk optimization property in the dataset transfer
* property list is encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 3, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dxfr_mpio_chunk_opt_hard_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5FD_mpio_chunk_opt_t *chunk_opt = (const H5FD_mpio_chunk_opt_t *)value; /* Create local alias for values */
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(chunk_opt);
HDassert(size);
if(NULL != *pp)
/* Encode MPI-I/O chunk optimization property */
*(*pp)++ = (uint8_t)*chunk_opt;
/* Size of MPI-I/O chunk optimization property */
(*size)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__dxfr_mpio_chunk_opt_hard_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_mpio_chunk_opt_hard_enc
*
* Purpose: Callback routine which is called whenever the MPI-I/O
* chunk collective optimization property in the dataset transfer
* property list is decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 3, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dxfr_mpio_chunk_opt_hard_dec(const uint8_t **pp, void *_value)
{
H5FD_mpio_chunk_opt_t *chunk_opt = (H5FD_mpio_chunk_opt_t *)_value; /* MPI-I/O chunk optimization mode */
FUNC_ENTER_STATIC_NOERR
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(chunk_opt);
/* Decode MPI-I/O chunk optimization mode */
*chunk_opt = (H5FD_mpio_chunk_opt_t)*(*pp)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__dxfr_mpio_chunk_opt_hard_dec() */
#ifdef H5_HAVE_PARALLEL
/*-------------------------------------------------------------------------
@ -1391,7 +1988,7 @@ H5Pget_mpio_no_collective_cause(hid_t plist_id, uint32_t *local_no_collective_ca
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
H5TRACE3("e", "i*Dn*Dn", plist_id, local_no_collective_cause,
H5TRACE3("e", "i*Iu*Iu", plist_id, local_no_collective_cause,
global_no_collective_cause);
/* Get the plist structure */
@ -1413,3 +2010,74 @@ done:
#endif /* H5_HAVE_PARALLEL */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_edc_enc
*
* Purpose: Callback routine which is called whenever the error detect
* property in the dataset transfer property list
* is encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 3, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dxfr_edc_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5Z_EDC_t *check = (const H5Z_EDC_t *)value; /* Create local alias for values */
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(check);
HDassert(size);
if(NULL != *pp)
/* Encode EDC property */
*(*pp)++ = (uint8_t)*check;
/* Size of EDC property */
(*size)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__dxfr_edc_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_edc_dec
*
* Purpose: Callback routine which is called whenever the error detect
* property in the dataset transfer property list
* is decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 3, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__dxfr_edc_dec(const uint8_t **pp, void *_value)
{
H5Z_EDC_t *check = (H5Z_EDC_t *)_value; /* EDC property */
FUNC_ENTER_STATIC_NOERR
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(check);
/* Decode EDC property */
*check = (H5Z_EDC_t)*(*pp)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__dxfr_edc_dec() */

797
src/H5Pencdec.c Normal file
View File

@ -0,0 +1,797 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* Copyright by the Board of Trustees of the University of Illinois. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the files COPYING and Copyright.html. COPYING can be found at the root *
* of the source code distribution tree; Copyright.html can be found at the *
* root level of an installed copy of the electronic HDF5 document set and *
* is linked from the top-level documents page. It can also be found at *
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
* access to either file, you may request a copy from help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* Programmer: Quincey Koziol <koziol@hdfgroup.org>
*
* Purpose: Generic Property Functions
*/
/****************/
/* Module Setup */
/****************/
#define H5P_PACKAGE /*suppress error about including H5Ppkg */
/* Interface initialization */
#define H5_INTERFACE_INIT_FUNC H5P_init_encdec_interface
/***********/
/* Headers */
/***********/
#include "H5private.h" /* Generic Functions */
#include "H5Eprivate.h" /* Error handling */
#include "H5Iprivate.h" /* IDs */
#include "H5MMprivate.h" /* Memory management */
#include "H5Ppkg.h" /* Property lists */
/****************/
/* Local Macros */
/****************/
/* Version # of encoded property lists */
#define H5P_ENCODE_VERS 0
/******************/
/* Local Typedefs */
/******************/
/* 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 */
uint8_t **pp; /* Pointer to encoding buffer pointer */
} H5P_enc_iter_ud_t;
/********************/
/* Local Prototypes */
/********************/
/*********************/
/* Package Variables */
/*********************/
/*****************************/
/* Library Private Variables */
/*****************************/
/*******************/
/* Local Variables */
/*******************/
/*--------------------------------------------------------------------------
NAME
H5P_init_encdec_interface -- Initialize interface-specific information
USAGE
herr_t H5P_init_encdec_interface()
RETURNS
Non-negative on success/Negative on failure
DESCRIPTION
Initializes any interface-specific data or routines. (Just calls
H5P_init() currently).
--------------------------------------------------------------------------*/
static herr_t
H5P_init_encdec_interface(void)
{
FUNC_ENTER_NOAPI_NOINIT_NOERR
FUNC_LEAVE_NOAPI(H5P_init())
} /* H5P_init_encdec_interface() */
/*-------------------------------------------------------------------------
* Function: H5P__encode_size_t
*
* Purpose: Generic encoding callback routine for 'size_t' properties.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Sunday, July 29, 2012
*
*-------------------------------------------------------------------------
*/
herr_t
H5P__encode_size_t(const void *value, uint8_t **pp, size_t *size)
{
uint64_t enc_value = (uint64_t)*(const size_t *)value; /* Property value to encode */
unsigned enc_size = H5V_limit_enc_size(enc_value); /* Size of encoded property */
FUNC_ENTER_PACKAGE_NOERR
/* Sanity checks */
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
HDassert(enc_size < 256);
HDassert(size);
if(NULL != *pp) {
/* Encode the size */
*(*pp)++ = (uint8_t)enc_size;
/* Encode the value */
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
} /* end if */
/* Set size needed for encoding */
*size += (1 + enc_size);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__encode_size_t() */
/*-------------------------------------------------------------------------
* Function: H5P__encode_hsize_t
*
* Purpose: Generic encoding callback routine for 'hsize_t' properties.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* August 07, 2012
*
*-------------------------------------------------------------------------
*/
herr_t
H5P__encode_hsize_t(const void *value, uint8_t **pp, size_t *size)
{
uint64_t enc_value = (uint64_t)*(const hsize_t *)value; /* Property value to encode */
unsigned enc_size = H5V_limit_enc_size(enc_value); /* Size of encoded property */
FUNC_ENTER_PACKAGE_NOERR
/* Sanity checks */
HDcompile_assert(sizeof(hsize_t) <= sizeof(uint64_t));
HDassert(enc_size < 256);
HDassert(size);
if(NULL != *pp) {
*(*pp)++ = (uint8_t)enc_size;
/* Encode the value */
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
} /* end if */
/* Set size needed for encoding */
*size += (1 + enc_size);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__encode_hsize_t() */
/*-------------------------------------------------------------------------
* Function: H5P__encode_unsigned
*
* Purpose: Generic encoding callback routine for 'unsigned' properties.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Sunday, July 29, 2012
*
*-------------------------------------------------------------------------
*/
herr_t
H5P__encode_unsigned(const void *value, uint8_t **pp, size_t *size)
{
FUNC_ENTER_PACKAGE_NOERR
/* Sanity checks */
HDassert(value);
HDassert(size);
if(NULL != *pp) {
/* Encode the size */
*(*pp)++ = (uint8_t)sizeof(unsigned);
/* Encode the value */
H5_ENCODE_UNSIGNED(*pp, *(const unsigned *)value)
} /* end if */
/* Set size needed for encoding */
*size += (1 + sizeof(unsigned));
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__encode_unsigned() */
/*-------------------------------------------------------------------------
* Function: H5P__encode_uint8_t
*
* Purpose: Generic encoding callback routine for 'uint8_t' properties.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* August 07, 2012
*
*-------------------------------------------------------------------------
*/
herr_t
H5P__encode_uint8_t(const void *value, uint8_t **pp, size_t *size)
{
FUNC_ENTER_PACKAGE_NOERR
/* Sanity checks */
HDassert(value);
HDassert(size);
if(NULL != *pp) {
/* Encode the value */
*(*pp)++ = *(const uint8_t *)value;
} /* end if */
/* Set size needed for encoding */
*size += 1;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__encode_uint8_t() */
/*-------------------------------------------------------------------------
* Function: H5P__encode_hbool_t
*
* Purpose: Generic encoding callback routine for 'hbool_t' properties.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* August 15, 2012
*
*-------------------------------------------------------------------------
*/
herr_t
H5P__encode_hbool_t(const void *value, uint8_t **pp, size_t *size)
{
FUNC_ENTER_PACKAGE_NOERR
/* Sanity checks */
HDassert(value);
HDassert(size);
if(NULL != *pp)
/* Encode the value */
*(*pp)++ = (uint8_t)*(const hbool_t *)value;
/* Set size needed for encoding */
*size += 1;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__encode_hbool_t() */
/*-------------------------------------------------------------------------
* Function: H5P__encode_double
*
* Purpose: Generic encoding callback routine for 'double' properties.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Sunday, July 29, 2012
*
*-------------------------------------------------------------------------
*/
herr_t
H5P__encode_double(const void *value, uint8_t **pp, size_t *size)
{
FUNC_ENTER_PACKAGE_NOERR
/* Sanity checks */
HDassert(value);
HDassert(size);
if(NULL != *pp) {
/* Encode the size */
*(*pp)++ = (uint8_t)sizeof(double);
/* Encode the value */
H5_ENCODE_DOUBLE(*pp, *(const double *)value)
} /* end if */
/* Set size needed for encoding */
*size += (1 + sizeof(double));
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__encode_double() */
/*--------------------------------------------------------------------------
NAME
H5P__encode_cb
PURPOSE
Internal callback routine when iterating over properties while encoding
a property list.
USAGE
int H5P__encode_cb(item, key, udata)
H5P_genprop_t *prop; IN: Pointer to the property
void *udata; IN/OUT: Pointer to iteration data from user
RETURNS
Success: H5_ITER_CONT
Fail: H5_ITER_ERROR
DESCRIPTION
This routine encodes a property in a property list
GLOBAL VARIABLES
COMMENTS, BUGS, ASSUMPTIONS
EXAMPLES
REVISION LOG
--------------------------------------------------------------------------*/
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 */
FUNC_ENTER_STATIC
/* Sanity check */
HDassert(prop);
HDassert(udata);
/* Check if this property can be encoded */
if(prop->encode) {
size_t prop_name_len; /* Length of property's name */
size_t prop_value_len; /* Encoded size of property's value */
/* Encode (or not, if the 'encode' flag is off) the property's name */
prop_name_len = HDstrlen(prop->name) + 1;
if(udata->encode) {
HDstrncpy((char *)*(udata->pp), prop->name, prop_name_len);
*(udata->pp) += prop_name_len;
} /* end if */
*(udata->enc_size_ptr) += prop_name_len;
/* 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)
HGOTO_ERROR(H5E_PLIST, H5E_CANTENCODE, H5_ITER_ERROR, "property encoding routine failed")
*(udata->enc_size_ptr) += prop_value_len;
} /* end if */
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__encode_cb() */
/*-------------------------------------------------------------------------
NAME
H5P__encode
PURPOSE
Internal routine to encode a property list into a binary buffer.
USAGE
herr_t H5P__encode(plist, enc_all_prop, buf, nalloc)
const H5P_genplist_t *plist; IN: Property list to encode
hbool_t enc_all_prop; IN: Whether to encode all properties (TRUE),
or just non-default (i.e. changed) properties (FALSE).
uint8_t *buf; OUT: buffer to hold the encoded plist
size_t *nalloc; IN/OUT: size of buffer needed to encode plist
RETURNS
Returns non-negative on success, negative on failure.
DESCRIPTION
Encodes a property list into a binary buffer. If the buffer is NULL, then
the call will set the size needed to encode the plist in nalloc. Otherwise
the routine will encode the plist in buf.
GLOBAL VARIABLES
COMMENTS, BUGS, ASSUMPTIONS
EXAMPLES
REVISION LOG
--------------------------------------------------------------------------*/
herr_t
H5P__encode(const H5P_genplist_t *plist, hbool_t enc_all_prop, void *buf,
size_t *nalloc)
{
H5P_enc_iter_ud_t udata; /* User data for property iteration callback */
uint8_t *p = (uint8_t *)buf; /* Temporary pointer to encoding buffer */
int idx; /* Index of property to start at */
size_t encode_size = 0; /* Size of buffer needed to encode properties */
hbool_t encode = TRUE; /* Whether the property list should be encoded */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
/* Sanity check */
if(NULL == nalloc)
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "bad allocation size pointer")
/* If the buffer is NULL, then this call to H5P__encode will return how much
* space is needed to encode a property.
*/
if(NULL == p)
encode = FALSE;
/* Encode property list description info */
if(encode) {
/* Version # of property list encoding */
*p++ = (uint8_t)H5P_ENCODE_VERS;
/* Type of property list */
*p++ = (uint8_t)plist->pclass->type;
} /* end if */
encode_size += 2;
/* Initialize user data for iteration callback */
udata.encode = encode;
udata.enc_size_ptr = &encode_size;
udata.pp = &p;
/* Iterate over all properties in property list, encoding them */
idx = 0;
if(H5P_iterate_plist(plist, enc_all_prop, &idx, H5P__encode_cb, &udata) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_BADITER, FAIL, "can't iterate over properties")
/* Encode a terminator for list of properties */
if(encode)
*p++ = 0;
encode_size++;
/* Set the size of the buffer needed/used to encode the property list */
*nalloc = encode_size;
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__encode() */
/*-------------------------------------------------------------------------
* Function: H5P__decode_size_t
*
* Purpose: Generic decoding callback routine for 'size_t' properties.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Thursday, August 2, 2012
*
*-------------------------------------------------------------------------
*/
herr_t
H5P__decode_size_t(const uint8_t **pp, void *_value)
{
size_t *value = (size_t *)_value; /* Property value to return */
uint64_t enc_value; /* Decoded property value */
unsigned enc_size; /* Size of encoded property */
FUNC_ENTER_PACKAGE_NOERR
/* Sanity check */
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
HDassert(pp);
HDassert(*pp);
HDassert(value);
/* Decode the size */
enc_size = *(*pp)++;
HDassert(enc_size < 256);
/* Decode the value */
UINT64DECODE_VAR(*pp, enc_value, enc_size);
H5_ASSIGN_OVERFLOW(*value, enc_value, uint64_t, size_t);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__decode_size_t() */
/*-------------------------------------------------------------------------
* Function: H5P__decode_hsize_t
*
* Purpose: Generic decoding callback routine for 'hsize_t' properties.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* August 07, 2012
*
*-------------------------------------------------------------------------
*/
herr_t
H5P__decode_hsize_t(const uint8_t **pp, void *_value)
{
hsize_t *value = (hsize_t *)_value; /* Property value to return */
uint64_t enc_value; /* Decoded property value */
unsigned enc_size; /* Size of encoded property */
FUNC_ENTER_PACKAGE_NOERR
/* Sanity check */
HDcompile_assert(sizeof(hsize_t) <= sizeof(uint64_t));
HDassert(pp);
HDassert(*pp);
HDassert(value);
/* Decode the size */
enc_size = *(*pp)++;
HDassert(enc_size < 256);
/* Decode the value */
UINT64DECODE_VAR(*pp, enc_value, enc_size);
H5_ASSIGN_OVERFLOW(*value, enc_value, uint64_t, hsize_t);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__decode_hsize_t() */
/*-------------------------------------------------------------------------
* Function: H5P__decode_unsigned
*
* Purpose: Generic decoding callback routine for 'unsigned' properties.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Thursday, August 2, 2012
*
*-------------------------------------------------------------------------
*/
herr_t
H5P__decode_unsigned(const uint8_t **pp, void *_value)
{
unsigned *value = (unsigned *)_value; /* Property value to return */
unsigned enc_size; /* Size of encoded property */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(value);
/* Decode the size */
enc_size = *(*pp)++;
if(enc_size != sizeof(unsigned))
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "unsigned value can't be decoded")
H5_DECODE_UNSIGNED(*pp, *value)
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__decode_unsigned() */
/*-------------------------------------------------------------------------
* Function: H5P__decode_uint8_t
*
* Purpose: Generic decoding callback routine for 'uint8_t' properties.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Thursday, August 2, 2012
*
*-------------------------------------------------------------------------
*/
herr_t
H5P__decode_uint8_t(const uint8_t **pp, void *_value)
{
uint8_t *value = (uint8_t *)_value; /* Property value to return */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE_NOERR
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(value);
/* Decode the value */
*value = *(*pp)++;
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__decode_uint8_t() */
/*-------------------------------------------------------------------------
* Function: H5P__decode_hbool_t
*
* Purpose: Generic decoding callback routine for 'hbool_t' properties.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Wednesday, August 15, 2012
*
*-------------------------------------------------------------------------
*/
herr_t
H5P__decode_hbool_t(const uint8_t **pp, void *_value)
{
hbool_t *value = (hbool_t *)_value; /* Property value to return */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE_NOERR
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(value);
/* Decode the value */
*value = (hbool_t)*(*pp)++;
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__decode_hbool_t() */
/*-------------------------------------------------------------------------
* Function: H5P__decode_double
*
* Purpose: Generic decoding callback routine for 'double' properties.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Thursday, August 2, 2012
*
*-------------------------------------------------------------------------
*/
herr_t
H5P__decode_double(const uint8_t **pp, void *_value)
{
double *value = (double *)_value; /* Property value to return */
unsigned enc_size; /* Size of encoded property */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(value);
/* Decode the size */
enc_size = *(*pp)++;
if(enc_size != sizeof(double))
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "double value can't be decoded")
H5_DECODE_DOUBLE(*pp, *value)
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__decode_double() */
/*-------------------------------------------------------------------------
NAME
H5P__decode
PURPOSE
Internal routine to decode a property list from a binary buffer.
USAGE
H5P_genplist_t *H5P__decode(buf)
const void *buf; IN: buffer that holds the encoded plist
RETURNS
Returns non-negative ID of new property list object on success, negative
on failure.
DESCRIPTION
Decodes a property list from a binary buffer. The contents of the buffer
contain the values for the correponding properties of the plist. The decode
callback of a certain property decodes its value from the buffer and sets it
in the property list.
GLOBAL VARIABLES
COMMENTS, BUGS, ASSUMPTIONS
Properties in the property list that are not encoded in the serialized
form retain their default value.
EXAMPLES
REVISION LOG
--------------------------------------------------------------------------*/
hid_t
H5P__decode(const void *buf)
{
H5P_genplist_t *plist; /* Property list to decode into */
void *value_buf = NULL; /* Pointer to buffer to use when decoding values */
const uint8_t *p = (const uint8_t *)buf; /* Current pointer into buffer */
H5P_plist_type_t type; /* Type of encoded property list */
hid_t plist_id = -1; /* ID of new property list */
size_t value_buf_size = 0; /* Size of current value buffer */
uint8_t vers; /* Version of encoded property list */
hid_t ret_value; /* Return value */
FUNC_ENTER_PACKAGE
/* Sanity check */
if(NULL == p)
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "decode buffer is NULL")
/* Get the version number of the encoded property list */
vers = (uint8_t)*p++;
if((uint8_t)H5P_ENCODE_VERS != vers)
HGOTO_ERROR(H5E_PLIST, H5E_VERSION, FAIL, "bad version # of encoded information, expected %u, got %u", (unsigned)H5P_ENCODE_VERS, (unsigned)vers)
/* Get the type of the property list */
type = (H5P_plist_type_t)*p++;
if(type <= H5P_TYPE_USER || type > H5P_TYPE_LINK_ACCESS)
HGOTO_ERROR(H5E_PLIST, H5E_BADRANGE, FAIL, "bad type of encoded information: %u", (unsigned)type)
/* Create new property list of the specified type */
if((plist_id = H5P__new_plist_of_type(type)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_VERSION, FAIL, "can't create property list of type: %u\n", (unsigned)type);
/* Get the property list object */
if(NULL == (plist = (H5P_genplist_t *)H5I_object(plist_id)))
HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a property class")
/* Loop over encoded properties, deserializing their values */
while(p) {
H5P_genprop_t *prop; /* Pointer to property with same name */
const char *name; /* Pointer to property list name */
/* Check for end of serialized list of properties */
if(0 == *p)
break;
/* Get property list name */
name = (const char *)p;
p += HDstrlen(name) + 1;
/* Find property with name */
if(NULL == (prop = H5P__find_prop_plist(plist, name)))
HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, FAIL, "property doesn't exist: '%s'", name)
/* Check if we should increase the size of the value buffer */
if(prop->size > value_buf_size) {
if(NULL == (value_buf = H5MM_realloc(value_buf, prop->size)))
HGOTO_ERROR(H5E_PLIST, H5E_CANTALLOC, FAIL, "decoding buffer allocation failed")
value_buf_size = prop->size;
} /* end if */
/* Decode serialized value */
if(prop->decode) {
if((prop->decode)(&p, value_buf) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTDECODE, FAIL, "property decoding routine failed, property: '%s'", name)
} /* end if */
else
HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, FAIL, "no decode callback for property: '%s', name")
/* Set the value for the property */
if(H5P_set(plist, name, value_buf) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value for property: '%s'", name)
} /* end while */
/* Set return value */
ret_value = plist_id;
done:
/* Release resources */
if(value_buf)
value_buf = H5MM_xfree(value_buf);
/* Cleanup on error */
if(ret_value < 0) {
if(plist_id > 0 && H5I_dec_ref(plist_id) < 0)
HDONE_ERROR(H5E_PLIST, H5E_CANTCLOSEOBJ, FAIL, "unable to close partially initialized property list")
} /* end if */
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__decode() */

View File

@ -59,36 +59,57 @@
/* Definitions for the initial metadata cache resize configuration */
#define H5F_ACS_META_CACHE_INIT_CONFIG_SIZE sizeof(H5AC_cache_config_t)
#define H5F_ACS_META_CACHE_INIT_CONFIG_DEF H5AC__DEFAULT_CACHE_CONFIG
#define H5F_ACS_META_CACHE_INIT_CONFIG_ENC H5P__facc_cache_config_enc
#define H5F_ACS_META_CACHE_INIT_CONFIG_DEC H5P__facc_cache_config_dec
#define H5F_ACS_META_CACHE_INIT_CONFIG_CMP H5P__facc_cache_config_cmp
/* Definitions for size of raw data chunk cache(slots) */
#define H5F_ACS_DATA_CACHE_NUM_SLOTS_SIZE sizeof(size_t)
#define H5F_ACS_DATA_CACHE_NUM_SLOTS_DEF 521
#define H5F_ACS_DATA_CACHE_NUM_SLOTS_ENC H5P__encode_size_t
#define H5F_ACS_DATA_CACHE_NUM_SLOTS_DEC H5P__decode_size_t
/* Definition for size of raw data chunk cache(bytes) */
#define H5F_ACS_DATA_CACHE_BYTE_SIZE_SIZE sizeof(size_t)
#define H5F_ACS_DATA_CACHE_BYTE_SIZE_DEF (1024*1024)
#define H5F_ACS_DATA_CACHE_BYTE_SIZE_ENC H5P__encode_size_t
#define H5F_ACS_DATA_CACHE_BYTE_SIZE_DEC H5P__decode_size_t
/* Definition for preemption read chunks first */
#define H5F_ACS_PREEMPT_READ_CHUNKS_SIZE sizeof(double)
#define H5F_ACS_PREEMPT_READ_CHUNKS_DEF 0.75f
#define H5F_ACS_PREEMPT_READ_CHUNKS_ENC H5P__encode_double
#define H5F_ACS_PREEMPT_READ_CHUNKS_DEC H5P__decode_double
/* Definition for threshold for alignment */
#define H5F_ACS_ALIGN_THRHD_SIZE sizeof(hsize_t)
#define H5F_ACS_ALIGN_THRHD_DEF 1
#define H5F_ACS_ALIGN_THRHD_ENC H5P__encode_hsize_t
#define H5F_ACS_ALIGN_THRHD_DEC H5P__decode_hsize_t
/* Definition for alignment */
#define H5F_ACS_ALIGN_SIZE sizeof(hsize_t)
#define H5F_ACS_ALIGN_DEF 1
#define H5F_ACS_ALIGN_ENC H5P__encode_hsize_t
#define H5F_ACS_ALIGN_DEC H5P__decode_hsize_t
/* Definition for minimum metadata allocation block size (when
aggregating metadata allocations. */
#define H5F_ACS_META_BLOCK_SIZE_SIZE sizeof(hsize_t)
#define H5F_ACS_META_BLOCK_SIZE_DEF 2048
#define H5F_ACS_META_BLOCK_SIZE_ENC H5P__encode_hsize_t
#define H5F_ACS_META_BLOCK_SIZE_DEC H5P__decode_hsize_t
/* Definition for maximum sieve buffer size (when data sieving
is allowed by file driver */
#define H5F_ACS_SIEVE_BUF_SIZE_SIZE sizeof(size_t)
#define H5F_ACS_SIEVE_BUF_SIZE_DEF (64*1024)
#define H5F_ACS_SIEVE_BUF_SIZE_ENC H5P__encode_size_t
#define H5F_ACS_SIEVE_BUF_SIZE_DEC H5P__decode_size_t
/* Definition for minimum "small data" allocation block size (when
aggregating "small" raw data allocations. */
#define H5F_ACS_SDATA_BLOCK_SIZE_SIZE sizeof(hsize_t)
#define H5F_ACS_SDATA_BLOCK_SIZE_DEF 2048
#define H5F_ACS_SDATA_BLOCK_SIZE_ENC H5P__encode_hsize_t
#define H5F_ACS_SDATA_BLOCK_SIZE_DEC H5P__decode_hsize_t
/* Definition for garbage-collect references */
#define H5F_ACS_GARBG_COLCT_REF_SIZE sizeof(unsigned)
#define H5F_ACS_GARBG_COLCT_REF_DEF 0
#define H5F_ACS_GARBG_COLCT_REF_ENC H5P__encode_unsigned
#define H5F_ACS_GARBG_COLCT_REF_DEC H5P__decode_unsigned
/* Definition for file driver ID */
#define H5F_ACS_FILE_DRV_ID_SIZE sizeof(hid_t)
#define H5F_ACS_FILE_DRV_ID_DEF H5_DEFAULT_VFD
@ -98,9 +119,13 @@
/* Definition for file close degree */
#define H5F_CLOSE_DEGREE_SIZE sizeof(H5F_close_degree_t)
#define H5F_CLOSE_DEGREE_DEF H5F_CLOSE_DEFAULT
#define H5F_CLOSE_DEGREE_ENC H5P__facc_fclose_degree_enc
#define H5F_CLOSE_DEGREE_DEC H5P__facc_fclose_degree_dec
/* Definition for offset position in file for family file driver */
#define H5F_ACS_FAMILY_OFFSET_SIZE sizeof(hsize_t)
#define H5F_ACS_FAMILY_OFFSET_DEF 0
#define H5F_ACS_FAMILY_OFFSET_ENC H5P__encode_hsize_t
#define H5F_ACS_FAMILY_OFFSET_DEC H5P__decode_hsize_t
/* Definition for new member size of family driver. It's private
* property only used by h5repart */
#define H5F_ACS_FAMILY_NEWSIZE_SIZE sizeof(hsize_t)
@ -112,9 +137,13 @@
/* Definition for data type in multi file driver */
#define H5F_ACS_MULTI_TYPE_SIZE sizeof(H5FD_mem_t)
#define H5F_ACS_MULTI_TYPE_DEF H5FD_MEM_DEFAULT
#define H5F_ACS_MULTI_TYPE_ENC H5P__facc_multi_type_enc
#define H5F_ACS_MULTI_TYPE_DEC H5P__facc_multi_type_dec
/* Definition for 'use latest format version' flag */
#define H5F_ACS_LATEST_FORMAT_SIZE sizeof(hbool_t)
#define H5F_ACS_LATEST_FORMAT_DEF FALSE
#define H5F_ACS_LATEST_FORMAT_ENC H5P__encode_hbool_t
#define H5F_ACS_LATEST_FORMAT_DEC H5P__decode_hbool_t
/* Definition for whether to query the file descriptor from the core VFD
* instead of the memory address. (Private to library)
*/
@ -123,6 +152,8 @@
/* Definition for external file cache size */
#define H5F_ACS_EFC_SIZE_SIZE sizeof(unsigned)
#define H5F_ACS_EFC_SIZE_DEF 0
#define H5F_ACS_EFC_SIZE_ENC H5P__encode_unsigned
#define H5F_ACS_EFC_SIZE_DEC H5P__decode_unsigned
/* Definition of pointer to initial file image info */
#define H5F_ACS_FILE_IMAGE_INFO_SIZE sizeof(H5FD_file_image_info_t)
#define H5F_ACS_FILE_IMAGE_INFO_DEF H5FD_DEFAULT_FILE_IMAGE_INFO
@ -155,6 +186,15 @@ static herr_t H5P_file_image_info_del(hid_t prop_id, const char *name, size_t si
static herr_t H5P_file_image_info_copy(const char *name, size_t size, void *value);
static herr_t H5P_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, uint8_t **pp, size_t *size);
static herr_t H5P__facc_cache_config_dec(const uint8_t **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, uint8_t **pp, size_t *size);
static herr_t H5P__facc_fclose_degree_dec(const uint8_t **pp, void *value);
static herr_t H5P__facc_multi_type_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__facc_multi_type_dec(const uint8_t **pp, void *value);
/*********************/
/* Package Variables */
@ -186,6 +226,28 @@ const H5P_libclass_t H5P_CLS_FACC[1] = {{
/* Local Variables */
/*******************/
/* Property value defaults */
static const H5AC_cache_config_t H5F_def_mdc_initCacheCfg_g = H5F_ACS_META_CACHE_INIT_CONFIG_DEF; /* Default metadata cache settings */
static const size_t H5F_def_rdcc_nslots_g = H5F_ACS_DATA_CACHE_NUM_SLOTS_DEF; /* Default raw data chunk cache # of slots */
static const size_t H5F_def_rdcc_nbytes_g = H5F_ACS_DATA_CACHE_BYTE_SIZE_DEF; /* Default raw data chunk cache # of bytes */
static const double H5F_def_rdcc_w0_g = H5F_ACS_PREEMPT_READ_CHUNKS_DEF; /* Default raw data chunk cache dirty ratio */
static const hsize_t H5F_def_threshold_g = H5F_ACS_ALIGN_THRHD_DEF; /* Default allocation alignment threshold */
static const hsize_t H5F_def_alignment_g = H5F_ACS_ALIGN_DEF; /* Default allocation alignment value */
static const hsize_t H5F_def_meta_block_size_g = H5F_ACS_META_BLOCK_SIZE_DEF; /* Default metadata allocation block size */
static const size_t H5F_def_sieve_buf_size_g = H5F_ACS_SIEVE_BUF_SIZE_DEF; /* Default raw data I/O sieve buffer size */
static const hsize_t H5F_def_sdata_block_size_g = H5F_ACS_SDATA_BLOCK_SIZE_DEF; /* Default small data allocation block size */
static const unsigned H5F_def_gc_ref_g = H5F_ACS_GARBG_COLCT_REF_DEF; /* Default garbage collection for references setting */
static const void *H5F_def_driver_info_g = H5F_ACS_FILE_DRV_INFO_DEF; /* Default VFL driver info */
static const H5F_close_degree_t H5F_def_close_degree_g = H5F_CLOSE_DEGREE_DEF; /* Default file close degree */
static const hsize_t H5F_def_family_offset_g = H5F_ACS_FAMILY_OFFSET_DEF; /* Default offset for family VFD */
static const hsize_t H5F_def_family_newsize_g = H5F_ACS_FAMILY_NEWSIZE_DEF; /* Default size of new files for family VFD */
static const hbool_t H5F_def_family_to_sec2_g = H5F_ACS_FAMILY_TO_SEC2_DEF; /* Default ?? for family VFD */
static const H5FD_mem_t H5F_def_mem_type_g = H5F_ACS_MULTI_TYPE_DEF; /* Default file space type for multi VFD */
static const hbool_t H5F_def_latest_format_g = H5F_ACS_LATEST_FORMAT_DEF; /* Default setting for "use the latest version of the format" flag */
static const hbool_t H5F_def_want_posix_fd_g = H5F_ACS_WANT_POSIX_FD_DEF; /* Default setting for retrieving 'handle' from core VFD */
static const unsigned H5F_def_efc_size_g = H5F_ACS_EFC_SIZE_DEF; /* Default external file cache size */
static const H5FD_file_image_info_t H5F_def_file_image_info_g = H5F_ACS_FILE_IMAGE_INFO_DEF; /* Default file image info and callbacks */
/*-------------------------------------------------------------------------
@ -202,114 +264,137 @@ const H5P_libclass_t H5P_CLS_FACC[1] = {{
static herr_t
H5P_facc_reg_prop(H5P_genclass_t *pclass)
{
H5AC_cache_config_t mdc_initCacheCfg = H5F_ACS_META_CACHE_INIT_CONFIG_DEF; /* Default metadata cache settings */
size_t rdcc_nslots = H5F_ACS_DATA_CACHE_NUM_SLOTS_DEF; /* Default raw data chunk cache # of slots */
size_t rdcc_nbytes = H5F_ACS_DATA_CACHE_BYTE_SIZE_DEF; /* Default raw data chunk cache # of bytes */
double rdcc_w0 = H5F_ACS_PREEMPT_READ_CHUNKS_DEF; /* Default raw data chunk cache dirty ratio */
hsize_t threshold = H5F_ACS_ALIGN_THRHD_DEF; /* Default allocation alignment threshold */
hsize_t alignment = H5F_ACS_ALIGN_DEF; /* Default allocation alignment value */
hsize_t meta_block_size = H5F_ACS_META_BLOCK_SIZE_DEF; /* Default metadata allocation block size */
size_t sieve_buf_size = H5F_ACS_SIEVE_BUF_SIZE_DEF; /* Default raw data I/O sieve buffer size */
hsize_t sdata_block_size = H5F_ACS_SDATA_BLOCK_SIZE_DEF; /* Default small data allocation block size */
unsigned gc_ref = H5F_ACS_GARBG_COLCT_REF_DEF; /* Default garbage collection for references setting */
hid_t driver_id = H5F_ACS_FILE_DRV_ID_DEF; /* Default VFL driver ID */
void *driver_info = H5F_ACS_FILE_DRV_INFO_DEF; /* Default VFL driver info */
H5F_close_degree_t close_degree = H5F_CLOSE_DEGREE_DEF; /* Default file close degree */
hsize_t family_offset = H5F_ACS_FAMILY_OFFSET_DEF; /* Default offset for family VFD */
hsize_t family_newsize = H5F_ACS_FAMILY_NEWSIZE_DEF; /* Default size of new files for family VFD */
hbool_t family_to_sec2 = H5F_ACS_FAMILY_TO_SEC2_DEF; /* Default ?? for family VFD */
H5FD_mem_t mem_type = H5F_ACS_MULTI_TYPE_DEF; /* Default file space type for multi VFD */
hbool_t latest_format = H5F_ACS_LATEST_FORMAT_DEF; /* Default setting for "use the latest version of the format" flag */
hbool_t want_posix_fd = H5F_ACS_WANT_POSIX_FD_DEF; /* Default setting for retrieving 'handle' from core VFD */
unsigned efc_size = H5F_ACS_EFC_SIZE_DEF; /* Default external file cache size */
H5FD_file_image_info_t file_image_info = H5F_ACS_FILE_IMAGE_INFO_DEF; /* Default file image info and callbacks */
const hid_t def_driver_id = H5F_ACS_FILE_DRV_ID_DEF; /* Default VFL driver ID (initialized from a variable) */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
/* Register the initial metadata cache resize configuration */
if(H5P_register_real(pclass, H5F_ACS_META_CACHE_INIT_CONFIG_NAME, H5F_ACS_META_CACHE_INIT_CONFIG_SIZE, &mdc_initCacheCfg, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_META_CACHE_INIT_CONFIG_NAME, H5F_ACS_META_CACHE_INIT_CONFIG_SIZE, &H5F_def_mdc_initCacheCfg_g,
NULL, NULL, NULL, H5F_ACS_META_CACHE_INIT_CONFIG_ENC, H5F_ACS_META_CACHE_INIT_CONFIG_DEC,
NULL, NULL, H5F_ACS_META_CACHE_INIT_CONFIG_CMP, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the size of raw data chunk cache (elements) */
if(H5P_register_real(pclass, H5F_ACS_DATA_CACHE_NUM_SLOTS_NAME, H5F_ACS_DATA_CACHE_NUM_SLOTS_SIZE, &rdcc_nslots, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_DATA_CACHE_NUM_SLOTS_NAME, H5F_ACS_DATA_CACHE_NUM_SLOTS_SIZE, &H5F_def_rdcc_nslots_g,
NULL, NULL, NULL, H5F_ACS_DATA_CACHE_NUM_SLOTS_ENC, H5F_ACS_DATA_CACHE_NUM_SLOTS_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the size of raw data chunk cache(bytes) */
if(H5P_register_real(pclass, H5F_ACS_DATA_CACHE_BYTE_SIZE_NAME, H5F_ACS_DATA_CACHE_BYTE_SIZE_SIZE, &rdcc_nbytes, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_DATA_CACHE_BYTE_SIZE_NAME, H5F_ACS_DATA_CACHE_BYTE_SIZE_SIZE, &H5F_def_rdcc_nbytes_g,
NULL, NULL, NULL, H5F_ACS_DATA_CACHE_BYTE_SIZE_ENC, H5F_ACS_DATA_CACHE_BYTE_SIZE_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the preemption for reading chunks */
if(H5P_register_real(pclass, H5F_ACS_PREEMPT_READ_CHUNKS_NAME, H5F_ACS_PREEMPT_READ_CHUNKS_SIZE, &rdcc_w0, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_PREEMPT_READ_CHUNKS_NAME, H5F_ACS_PREEMPT_READ_CHUNKS_SIZE, &H5F_def_rdcc_w0_g,
NULL, NULL, NULL, H5F_ACS_PREEMPT_READ_CHUNKS_ENC, H5F_ACS_PREEMPT_READ_CHUNKS_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the threshold for alignment */
if(H5P_register_real(pclass, H5F_ACS_ALIGN_THRHD_NAME, H5F_ACS_ALIGN_THRHD_SIZE, &threshold, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_ALIGN_THRHD_NAME, H5F_ACS_ALIGN_THRHD_SIZE, &H5F_def_threshold_g,
NULL, NULL, NULL, H5F_ACS_ALIGN_THRHD_ENC, H5F_ACS_ALIGN_THRHD_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the alignment */
if(H5P_register_real(pclass, H5F_ACS_ALIGN_NAME, H5F_ACS_ALIGN_SIZE, &alignment, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_ALIGN_NAME, H5F_ACS_ALIGN_SIZE, &H5F_def_alignment_g,
NULL, NULL, NULL, H5F_ACS_ALIGN_ENC, H5F_ACS_ALIGN_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the minimum metadata allocation block size */
if(H5P_register_real(pclass, H5F_ACS_META_BLOCK_SIZE_NAME, H5F_ACS_META_BLOCK_SIZE_SIZE, &meta_block_size, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_META_BLOCK_SIZE_NAME, H5F_ACS_META_BLOCK_SIZE_SIZE, &H5F_def_meta_block_size_g,
NULL, NULL, NULL, H5F_ACS_META_BLOCK_SIZE_ENC, H5F_ACS_META_BLOCK_SIZE_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the maximum sieve buffer size */
if(H5P_register_real(pclass, H5F_ACS_SIEVE_BUF_SIZE_NAME, H5F_ACS_SIEVE_BUF_SIZE_SIZE, &sieve_buf_size, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_SIEVE_BUF_SIZE_NAME, H5F_ACS_SIEVE_BUF_SIZE_SIZE, &H5F_def_sieve_buf_size_g,
NULL, NULL, NULL, H5F_ACS_SIEVE_BUF_SIZE_ENC, H5F_ACS_SIEVE_BUF_SIZE_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the minimum "small data" allocation block size */
if(H5P_register_real(pclass, H5F_ACS_SDATA_BLOCK_SIZE_NAME, H5F_ACS_SDATA_BLOCK_SIZE_SIZE, &sdata_block_size, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_SDATA_BLOCK_SIZE_NAME, H5F_ACS_SDATA_BLOCK_SIZE_SIZE, &H5F_def_sdata_block_size_g,
NULL, NULL, NULL, H5F_ACS_SDATA_BLOCK_SIZE_ENC, H5F_ACS_SDATA_BLOCK_SIZE_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the garbage collection reference */
if(H5P_register_real(pclass, H5F_ACS_GARBG_COLCT_REF_NAME, H5F_ACS_GARBG_COLCT_REF_SIZE, &gc_ref, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_GARBG_COLCT_REF_NAME, H5F_ACS_GARBG_COLCT_REF_SIZE, &H5F_def_gc_ref_g,
NULL, NULL, NULL, H5F_ACS_GARBG_COLCT_REF_ENC, H5F_ACS_GARBG_COLCT_REF_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the file driver ID */
if(H5P_register_real(pclass, H5F_ACS_FILE_DRV_ID_NAME, H5F_ACS_FILE_DRV_ID_SIZE, &driver_id, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5F_ACS_FILE_DRV_ID_NAME, H5F_ACS_FILE_DRV_ID_SIZE, &def_driver_id,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the file driver info */
if(H5P_register_real(pclass, H5F_ACS_FILE_DRV_INFO_NAME, H5F_ACS_FILE_DRV_INFO_SIZE, &driver_info, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5F_ACS_FILE_DRV_INFO_NAME, H5F_ACS_FILE_DRV_INFO_SIZE, &H5F_def_driver_info_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the file close degree */
if(H5P_register_real(pclass, H5F_ACS_CLOSE_DEGREE_NAME, H5F_CLOSE_DEGREE_SIZE, &close_degree, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_CLOSE_DEGREE_NAME, H5F_CLOSE_DEGREE_SIZE, &H5F_def_close_degree_g,
NULL, NULL, NULL, H5F_CLOSE_DEGREE_ENC, H5F_CLOSE_DEGREE_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the offset of family driver info */
if(H5P_register_real(pclass, H5F_ACS_FAMILY_OFFSET_NAME, H5F_ACS_FAMILY_OFFSET_SIZE, &family_offset, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_FAMILY_OFFSET_NAME, H5F_ACS_FAMILY_OFFSET_SIZE, &H5F_def_family_offset_g,
NULL, NULL, NULL, H5F_ACS_FAMILY_OFFSET_ENC, H5F_ACS_FAMILY_OFFSET_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the private property of new family file size. It's used by h5repart only. */
if(H5P_register_real(pclass, H5F_ACS_FAMILY_NEWSIZE_NAME, H5F_ACS_FAMILY_NEWSIZE_SIZE, &family_newsize, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5F_ACS_FAMILY_NEWSIZE_NAME, H5F_ACS_FAMILY_NEWSIZE_SIZE, &H5F_def_family_newsize_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the private property of whether convert family to sec2 driver. It's used by h5repart only. */
if(H5P_register_real(pclass, H5F_ACS_FAMILY_TO_SEC2_NAME, H5F_ACS_FAMILY_TO_SEC2_SIZE, &family_to_sec2, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5F_ACS_FAMILY_TO_SEC2_NAME, H5F_ACS_FAMILY_TO_SEC2_SIZE, &H5F_def_family_to_sec2_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the data type of multi driver info */
if(H5P_register_real(pclass, H5F_ACS_MULTI_TYPE_NAME, H5F_ACS_MULTI_TYPE_SIZE, &mem_type, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_MULTI_TYPE_NAME, H5F_ACS_MULTI_TYPE_SIZE, &H5F_def_mem_type_g,
NULL, NULL, NULL, H5F_ACS_MULTI_TYPE_ENC, H5F_ACS_MULTI_TYPE_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the 'use the latest version of the format' flag */
if(H5P_register_real(pclass, H5F_ACS_LATEST_FORMAT_NAME, H5F_ACS_LATEST_FORMAT_SIZE, &latest_format, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_LATEST_FORMAT_NAME, H5F_ACS_LATEST_FORMAT_SIZE, &H5F_def_latest_format_g,
NULL, NULL, NULL, H5F_ACS_LATEST_FORMAT_ENC, H5F_ACS_LATEST_FORMAT_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the private property of whether to retrieve the file descriptor from the core VFD */
/* (used internally to the library only) */
if(H5P_register_real(pclass, H5F_ACS_WANT_POSIX_FD_NAME, H5F_ACS_WANT_POSIX_FD_SIZE, &want_posix_fd, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5F_ACS_WANT_POSIX_FD_NAME, H5F_ACS_WANT_POSIX_FD_SIZE, &H5F_def_want_posix_fd_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the external file cache size */
if(H5P_register_real(pclass, H5F_ACS_EFC_SIZE_NAME, H5F_ACS_EFC_SIZE_SIZE, &efc_size, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_ACS_EFC_SIZE_NAME, H5F_ACS_EFC_SIZE_SIZE, &H5F_def_efc_size_g,
NULL, NULL, NULL, H5F_ACS_EFC_SIZE_ENC, H5F_ACS_EFC_SIZE_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the initial file image info */
if(H5P_register_real(pclass, H5F_ACS_FILE_IMAGE_INFO_NAME, H5F_ACS_FILE_IMAGE_INFO_SIZE, &file_image_info, NULL, NULL, NULL, H5F_ACS_FILE_IMAGE_INFO_DEL, H5F_ACS_FILE_IMAGE_INFO_COPY, NULL, H5F_ACS_FILE_IMAGE_INFO_CLOSE) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5F_ACS_FILE_IMAGE_INFO_NAME, H5F_ACS_FILE_IMAGE_INFO_SIZE, &H5F_def_file_image_info_g,
NULL, NULL, NULL, NULL, NULL,
H5F_ACS_FILE_IMAGE_INFO_DEL, H5F_ACS_FILE_IMAGE_INFO_COPY, NULL, H5F_ACS_FILE_IMAGE_INFO_CLOSE) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
done:
@ -2347,3 +2432,545 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P_file_image_info_close() */
/*-------------------------------------------------------------------------
* Function: H5P__facc_cache_config_cmp
*
* Purpose: Compare two cache configurations.
*
* Return: positive if VALUE1 is greater than VALUE2, negative if VALUE2 is
* greater than VALUE1 and zero if VALUE1 and VALUE2 are equal.
*
* Programmer: Mohamad Chaarawi
* September 24, 2012
*
*-------------------------------------------------------------------------
*/
static int
H5P__facc_cache_config_cmp(const void *_config1, const void *_config2, size_t UNUSED size)
{
const H5AC_cache_config_t *config1 = (const H5AC_cache_config_t *)_config1; /* Create local aliases for values */
const H5AC_cache_config_t *config2 = (const H5AC_cache_config_t *)_config2; /* Create local aliases for values */
int ret_value = 0; /* Return value */
FUNC_ENTER_STATIC_NOERR
/* Check for a property being set */
if(config1 == NULL && config2 != NULL) HGOTO_DONE(-1);
if(config1 != NULL && config2 == NULL) HGOTO_DONE(1);
if(config1->version < config2->version) HGOTO_DONE(-1);
if(config1->version > config2->version) HGOTO_DONE(1);
if(config1->rpt_fcn_enabled < config2->rpt_fcn_enabled) HGOTO_DONE(-1);
if(config1->rpt_fcn_enabled > config2->rpt_fcn_enabled) HGOTO_DONE(1);
if(config1->open_trace_file < config2->open_trace_file) HGOTO_DONE(-1);
if(config1->open_trace_file > config2->open_trace_file) HGOTO_DONE(1);
if(config1->close_trace_file < config2->close_trace_file) HGOTO_DONE(-1);
if(config1->close_trace_file > config2->close_trace_file) HGOTO_DONE(1);
if((ret_value = HDstrncmp(config1->trace_file_name, config2->trace_file_name,
H5AC__MAX_TRACE_FILE_NAME_LEN + 1)) != 0)
HGOTO_DONE(ret_value);
if(config1->evictions_enabled < config2->evictions_enabled) HGOTO_DONE(-1);
if(config1->evictions_enabled > config2->evictions_enabled) HGOTO_DONE(1);
if(config1->set_initial_size < config2->set_initial_size) HGOTO_DONE(-1);
if(config1->set_initial_size > config2->set_initial_size) HGOTO_DONE(1);
if(config1->initial_size < config2->initial_size) HGOTO_DONE(-1);
if(config1->initial_size > config2->initial_size) HGOTO_DONE(1);
if(config1->min_clean_fraction < config2->min_clean_fraction) HGOTO_DONE(-1);
if(config1->min_clean_fraction > config2->min_clean_fraction) HGOTO_DONE(1);
if(config1->max_size < config2->max_size) HGOTO_DONE(-1);
if(config1->max_size > config2->max_size) HGOTO_DONE(1);
if(config1->min_size < config2->min_size) HGOTO_DONE(-1);
if(config1->min_size > config2->min_size) HGOTO_DONE(1);
if(config1->epoch_length < config2->epoch_length) HGOTO_DONE(-1);
if(config1->epoch_length > config2->epoch_length) HGOTO_DONE(1);
if(config1->incr_mode < config2->incr_mode) HGOTO_DONE(-1);
if(config1->incr_mode > config2->incr_mode) HGOTO_DONE(1);
if(config1->lower_hr_threshold < config2->lower_hr_threshold) HGOTO_DONE(-1);
if(config1->lower_hr_threshold > config2->lower_hr_threshold) HGOTO_DONE(1);
if(config1->increment < config2->increment) HGOTO_DONE(-1);
if(config1->increment > config2->increment) HGOTO_DONE(1);
if(config1->apply_max_increment < config2->apply_max_increment) HGOTO_DONE(-1);
if(config1->apply_max_increment > config2->apply_max_increment) HGOTO_DONE(1);
if(config1->max_increment < config2->max_increment) HGOTO_DONE(-1);
if(config1->max_increment > config2->max_increment) HGOTO_DONE(1);
if(config1->flash_incr_mode < config2->flash_incr_mode) HGOTO_DONE(-1);
if(config1->flash_incr_mode > config2->flash_incr_mode) HGOTO_DONE(1);
if(config1->flash_multiple < config2->flash_multiple) HGOTO_DONE(-1);
if(config1->flash_multiple > config2->flash_multiple) HGOTO_DONE(1);
if(config1->flash_threshold < config2->flash_threshold) HGOTO_DONE(-1);
if(config1->flash_threshold > config2->flash_threshold) HGOTO_DONE(1);
if(config1->decr_mode < config2->decr_mode) HGOTO_DONE(-1);
if(config1->decr_mode > config2->decr_mode) HGOTO_DONE(1);
if(config1->upper_hr_threshold < config2->upper_hr_threshold) HGOTO_DONE(-1);
if(config1->upper_hr_threshold > config2->upper_hr_threshold) HGOTO_DONE(1);
if(config1->decrement < config2->decrement) HGOTO_DONE(-1);
if(config1->decrement > config2->decrement) HGOTO_DONE(1);
if(config1->apply_max_decrement < config2->apply_max_decrement) HGOTO_DONE(-1);
if(config1->apply_max_decrement > config2->apply_max_decrement) HGOTO_DONE(1);
if(config1->max_decrement < config2->max_decrement) HGOTO_DONE(-1);
if(config1->max_decrement > config2->max_decrement) HGOTO_DONE(1);
if(config1->epochs_before_eviction < config2->epochs_before_eviction) HGOTO_DONE(-1);
if(config1->epochs_before_eviction > config2->epochs_before_eviction) HGOTO_DONE(1);
if(config1->apply_empty_reserve < config2->apply_empty_reserve) HGOTO_DONE(-1);
if(config1->apply_empty_reserve > config2->apply_empty_reserve) HGOTO_DONE(1);
if(config1->empty_reserve < config2->empty_reserve) HGOTO_DONE(-1);
if(config1->empty_reserve > config2->empty_reserve) HGOTO_DONE(1);
if(config1->dirty_bytes_threshold < config2->dirty_bytes_threshold) HGOTO_DONE(-1);
if(config1->dirty_bytes_threshold > config2->dirty_bytes_threshold) HGOTO_DONE(1);
if(config1->metadata_write_strategy < config2->metadata_write_strategy) HGOTO_DONE(-1);
if(config1->metadata_write_strategy > config2->metadata_write_strategy) HGOTO_DONE(1);
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__facc_cache_config_cmp() */
/*-------------------------------------------------------------------------
* Function: H5P__facc_cache_config_enc
*
* Purpose: Callback routine which is called whenever the default
* cache config property in the file creation property list is
* encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* August 09, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__facc_cache_config_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5AC_cache_config_t *config = (const H5AC_cache_config_t *)value; /* Create local aliases for values */
unsigned enc_size; /* Size of encoded property */
uint64_t enc_value; /* Property to encode */
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(value);
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
if(NULL != *pp) {
/* Encode type sizes (as a safety check) */
*(*pp)++ = (uint8_t)sizeof(unsigned);
*(*pp)++ = (uint8_t)sizeof(double);
/* int */
INT32ENCODE(*pp, (int32_t)config->version);
H5_ENCODE_UNSIGNED(*pp, config->rpt_fcn_enabled);
H5_ENCODE_UNSIGNED(*pp, config->open_trace_file);
H5_ENCODE_UNSIGNED(*pp, config->close_trace_file);
HDmemcpy(*pp, (const uint8_t *)(config->trace_file_name), H5AC__MAX_TRACE_FILE_NAME_LEN + 1);
*pp += H5AC__MAX_TRACE_FILE_NAME_LEN + 1;
H5_ENCODE_UNSIGNED(*pp, config->evictions_enabled);
H5_ENCODE_UNSIGNED(*pp, config->set_initial_size);
enc_value = (uint64_t)config->initial_size;
enc_size = H5V_limit_enc_size(enc_value);
HDassert(enc_size < 256);
*(*pp)++ = (uint8_t)enc_size;
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
H5_ENCODE_DOUBLE(*pp, config->min_clean_fraction);
enc_value = (uint64_t)config->max_size;
enc_size = H5V_limit_enc_size(enc_value);
HDassert(enc_size < 256);
*(*pp)++ = (uint8_t)enc_size;
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
enc_value = (uint64_t)config->min_size;
enc_size = H5V_limit_enc_size(enc_value);
HDassert(enc_size < 256);
*(*pp)++ = (uint8_t)enc_size;
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
/* long int */
INT64ENCODE(*pp, (int64_t)config->epoch_length);
/* enum */
*(*pp)++ = (uint8_t)config->incr_mode;
H5_ENCODE_DOUBLE(*pp, config->lower_hr_threshold);
H5_ENCODE_DOUBLE(*pp, config->increment);
H5_ENCODE_UNSIGNED(*pp, config->apply_max_increment);
enc_value = (uint64_t)config->max_increment;
enc_size = H5V_limit_enc_size(enc_value);
HDassert(enc_size < 256);
*(*pp)++ = (uint8_t)enc_size;
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
/* enum */
*(*pp)++ = (uint8_t)config->flash_incr_mode;
H5_ENCODE_DOUBLE(*pp, config->flash_multiple);
H5_ENCODE_DOUBLE(*pp, config->flash_threshold);
/* enum */
*(*pp)++ = (uint8_t)config->decr_mode;
H5_ENCODE_DOUBLE(*pp, config->upper_hr_threshold);
H5_ENCODE_DOUBLE(*pp, config->decrement);
H5_ENCODE_UNSIGNED(*pp, config->apply_max_decrement);
enc_value = (uint64_t)config->max_decrement;
enc_size = H5V_limit_enc_size(enc_value);
HDassert(enc_size < 256);
*(*pp)++ = (uint8_t)enc_size;
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
/* int */
INT32ENCODE(*pp, (int32_t)config->epochs_before_eviction);
H5_ENCODE_UNSIGNED(*pp, config->apply_empty_reserve);
H5_ENCODE_DOUBLE(*pp, config->empty_reserve);
/* int */
INT32ENCODE(*pp, (int32_t)config->dirty_bytes_threshold);
/* int */
INT32ENCODE(*pp, (int32_t)config->metadata_write_strategy);
} /* end if */
/* Compute encoded size of variably-encoded values */
enc_value = (uint64_t)config->initial_size;
*size += 1 + H5V_limit_enc_size(enc_value);
enc_value = (uint64_t)config->max_size;
*size += 1 + H5V_limit_enc_size(enc_value);
enc_value = (uint64_t)config->min_size;
*size += 1 + H5V_limit_enc_size(enc_value);
enc_value = (uint64_t)config->max_increment;
*size += 1 + H5V_limit_enc_size(enc_value);
enc_value = (uint64_t)config->max_decrement;
*size += 1 + H5V_limit_enc_size(enc_value);
/* Compute encoded size of fixed-size values */
*size += (5 + (sizeof(unsigned) * 8) + (sizeof(double) * 8) +
(sizeof(int32_t) * 4) + sizeof(int64_t) +
H5AC__MAX_TRACE_FILE_NAME_LEN + 1);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__facc_cache_config_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__facc_cache_config_dec
*
* Purpose: Callback routine which is called whenever the default
* cache config property in the file creation property list is
* decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* August 09, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__facc_cache_config_dec(const uint8_t **pp, void *_value)
{
H5AC_cache_config_t *config = (H5AC_cache_config_t *)_value;
unsigned enc_size;
uint64_t enc_value;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(config);
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
/* Set property to default value */
HDmemcpy(config, &H5F_def_mdc_initCacheCfg_g, sizeof(H5AC_cache_config_t));
/* Decode type sizes */
enc_size = *(*pp)++;
if(enc_size != sizeof(unsigned))
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "unsigned value can't be decoded")
enc_size = *(*pp)++;
if(enc_size != sizeof(double))
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "double value can't be decoded")
/* int */
INT32DECODE(*pp, config->version);
H5_DECODE_UNSIGNED(*pp, config->rpt_fcn_enabled);
H5_DECODE_UNSIGNED(*pp, config->open_trace_file);
H5_DECODE_UNSIGNED(*pp, config->close_trace_file);
HDstrcpy(config->trace_file_name, (const char *)(*pp));
*pp += H5AC__MAX_TRACE_FILE_NAME_LEN + 1;
H5_DECODE_UNSIGNED(*pp, config->evictions_enabled);
H5_DECODE_UNSIGNED(*pp, config->set_initial_size);
enc_size = *(*pp)++;
HDassert(enc_size < 256);
UINT64DECODE_VAR(*pp, enc_value, enc_size);
config->initial_size = (size_t)enc_value;
H5_DECODE_DOUBLE(*pp, config->min_clean_fraction);
enc_size = *(*pp)++;
HDassert(enc_size < 256);
UINT64DECODE_VAR(*pp, enc_value, enc_size);
config->max_size = (size_t)enc_value;
enc_size = *(*pp)++;
HDassert(enc_size < 256);
UINT64DECODE_VAR(*pp, enc_value, enc_size);
config->min_size = (size_t)enc_value;
/* long int */
{
int64_t temp;
INT64DECODE(*pp, temp);
config->epoch_length = (long int)temp;
}
/* enum */
config->incr_mode = (enum H5C_cache_incr_mode)*(*pp)++;
H5_DECODE_DOUBLE(*pp, config->lower_hr_threshold);
H5_DECODE_DOUBLE(*pp, config->increment);
H5_DECODE_UNSIGNED(*pp, config->apply_max_increment);
enc_size = *(*pp)++;
HDassert(enc_size < 256);
UINT64DECODE_VAR(*pp, enc_value, enc_size);
config->max_increment = (size_t)enc_value;
/* enum */
config->flash_incr_mode = (enum H5C_cache_flash_incr_mode)*(*pp)++;
H5_DECODE_DOUBLE(*pp, config->flash_multiple);
H5_DECODE_DOUBLE(*pp, config->flash_threshold);
/* enum */
config->decr_mode = (enum H5C_cache_decr_mode)*(*pp)++;
H5_DECODE_DOUBLE(*pp, config->upper_hr_threshold);
H5_DECODE_DOUBLE(*pp, config->decrement);
H5_DECODE_UNSIGNED(*pp, config->apply_max_decrement);
enc_size = *(*pp)++;
HDassert(enc_size < 256);
UINT64DECODE_VAR(*pp, enc_value, enc_size);
config->max_decrement = (size_t)enc_value;
/* int */
INT32DECODE(*pp, config->epochs_before_eviction);
H5_DECODE_UNSIGNED(*pp, config->apply_empty_reserve);
H5_DECODE_DOUBLE(*pp, config->empty_reserve);
/* int */
INT32DECODE(*pp, config->dirty_bytes_threshold);
/* int */
INT32DECODE(*pp, config->metadata_write_strategy);
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__facc_cache_config_dec() */
/*-------------------------------------------------------------------------
* Function: H5P__facc_fclose_degree_enc
*
* Purpose: Callback routine which is called whenever the file close
* degree property in the file access property list
* is encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Wednesday, August 15, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__facc_fclose_degree_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5F_close_degree_t *fclose_degree = (const H5F_close_degree_t *)value; /* Create local alias for values */
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(fclose_degree);
HDassert(size);
if(NULL != *pp)
/* Encode file close degree */
*(*pp)++ = (uint8_t)*fclose_degree;
/* Size of file close degree */
(*size)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__facc_fclose_degree_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__facc_fclose_degree_dec
*
* Purpose: Callback routine which is called whenever the file close
* degree property in the file access property list
* is decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Wednesday, August 15, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__facc_fclose_degree_dec(const uint8_t **pp, void *_value)
{
H5F_close_degree_t *fclose_degree = (H5F_close_degree_t *)_value; /* File close degree */
FUNC_ENTER_STATIC_NOERR
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(fclose_degree);
/* Decode file close degree */
*fclose_degree = (H5F_close_degree_t)*(*pp)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__facc_fclose_degree_dec() */
/*-------------------------------------------------------------------------
* Function: H5P__facc_multi_type_enc
*
* Purpose: Callback routine which is called whenever the multi VFD
* memory type property in the file access property list
* is encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Wednesday, August 15, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__facc_multi_type_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5FD_mem_t *type = (const H5FD_mem_t *)value; /* Create local alias for values */
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(type);
HDassert(size);
if(NULL != *pp)
/* Encode file close degree */
*(*pp)++ = (uint8_t)*type;
/* Size of multi VFD memory type */
(*size)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__facc_multi_type_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__facc_multi_type_dec
*
* Purpose: Callback routine which is called whenever the multi VFD
* memory type property in the file access property list
* is decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Wednesday, August 15, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__facc_multi_type_dec(const uint8_t **pp, void *_value)
{
H5FD_mem_t *type = (H5FD_mem_t *)_value; /* File close degree */
FUNC_ENTER_STATIC_NOERR
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(type);
/* Decode multi VFD memory type */
*type = (H5FD_mem_t)*(*pp)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__facc_multi_type_dec() */

View File

@ -49,37 +49,61 @@
/* Definitions for the size of the file user block in bytes */
#define H5F_CRT_USER_BLOCK_SIZE sizeof(hsize_t)
#define H5F_CRT_USER_BLOCK_DEF 0
#define H5F_CRT_USER_BLOCK_ENC H5P__encode_hsize_t
#define H5F_CRT_USER_BLOCK_DEC H5P__decode_hsize_t
/* Definitions for the 1/2 rank for symbol table leaf nodes */
#define H5F_CRT_SYM_LEAF_SIZE sizeof(unsigned)
#define H5F_CRT_SYM_LEAF_ENC H5P__encode_unsigned
#define H5F_CRT_SYM_LEAF_DEC H5P__decode_unsigned
/* Definitions for the 1/2 rank for btree internal nodes */
#define H5F_CRT_BTREE_RANK_SIZE sizeof(unsigned[H5B_NUM_BTREE_ID])
#define H5F_CRT_BTREE_RANK_DEF {HDF5_BTREE_SNODE_IK_DEF,HDF5_BTREE_CHUNK_IK_DEF}
#define H5F_CRT_BTREE_RANK_ENC H5P__fcrt_btree_rank_enc
#define H5F_CRT_BTREE_RANK_DEC H5P__fcrt_btree_rank_dec
/* Definitions for byte number in an address */
#define H5F_CRT_ADDR_BYTE_NUM_SIZE sizeof(uint8_t)
#define H5F_CRT_ADDR_BYTE_NUM_DEF H5F_OBJ_ADDR_SIZE
#define H5F_CRT_ADDR_BYTE_NUM_ENC H5P__encode_uint8_t
#define H5F_CRT_ADDR_BYTE_NUM_DEC H5P__decode_uint8_t
/* Definitions for byte number for object size */
#define H5F_CRT_OBJ_BYTE_NUM_SIZE sizeof(uint8_t)
#define H5F_CRT_OBJ_BYTE_NUM_DEF H5F_OBJ_SIZE_SIZE
#define H5F_CRT_OBJ_BYTE_NUM_ENC H5P__encode_uint8_t
#define H5F_CRT_OBJ_BYTE_NUM_DEC H5P__decode_uint8_t
/* Definitions for version number of the superblock */
#define H5F_CRT_SUPER_VERS_SIZE sizeof(unsigned)
#define H5F_CRT_SUPER_VERS_DEF HDF5_SUPERBLOCK_VERSION_DEF
/* Definitions for shared object header messages */
#define H5F_CRT_SHMSG_NINDEXES_SIZE sizeof(unsigned)
#define H5F_CRT_SHMSG_NINDEXES_DEF (0)
#define H5F_CRT_SHMSG_NINDEXES_ENC H5P__encode_unsigned
#define H5F_CRT_SHMSG_NINDEXES_DEC H5P__decode_unsigned
#define H5F_CRT_SHMSG_INDEX_TYPES_SIZE sizeof(unsigned[H5O_SHMESG_MAX_NINDEXES])
#define H5F_CRT_SHMSG_INDEX_TYPES_DEF {0,0,0,0,0,0}
#define H5F_CRT_SHMSG_INDEX_TYPES_ENC H5P__fcrt_shmsg_index_types_enc
#define H5F_CRT_SHMSG_INDEX_TYPES_DEC H5P__fcrt_shmsg_index_types_dec
#define H5F_CRT_SHMSG_INDEX_MINSIZE_SIZE sizeof(unsigned[H5O_SHMESG_MAX_NINDEXES])
#define H5F_CRT_SHMSG_INDEX_MINSIZE_DEF {250,250,250,250,250,250}
#define H5F_CRT_SHMSG_INDEX_MINSIZE_ENC H5P__fcrt_shmsg_index_minsize_enc
#define H5F_CRT_SHMSG_INDEX_MINSIZE_DEC H5P__fcrt_shmsg_index_minsize_dec
/* Definitions for shared object header list/btree phase change cutoffs */
#define H5F_CRT_SHMSG_LIST_MAX_SIZE sizeof(unsigned)
#define H5F_CRT_SHMSG_LIST_MAX_DEF (50)
#define H5F_CRT_SHMSG_LIST_MAX_ENC H5P__encode_unsigned
#define H5F_CRT_SHMSG_LIST_MAX_DEC H5P__decode_unsigned
#define H5F_CRT_SHMSG_BTREE_MIN_SIZE sizeof(unsigned)
#define H5F_CRT_SHMSG_BTREE_MIN_DEF (40)
#define H5F_CRT_SHMSG_BTREE_MIN_ENC H5P__encode_unsigned
#define H5F_CRT_SHMSG_BTREE_MIN_DEC H5P__decode_unsigned
/* Definitions for file space handling strategy */
#define H5F_CRT_FILE_SPACE_STRATEGY_SIZE sizeof(unsigned)
#define H5F_CRT_FILE_SPACE_STRATEGY_DEF H5F_FILE_SPACE_STRATEGY_DEF
#define H5F_CRT_FILE_SPACE_STRATEGY_ENC H5P__encode_unsigned
#define H5F_CRT_FILE_SPACE_STRATEGY_DEC H5P__decode_unsigned
#define H5F_CRT_FREE_SPACE_THRESHOLD_SIZE sizeof(hsize_t)
#define H5F_CRT_FREE_SPACE_THRESHOLD_DEF H5F_FREE_SPACE_THRESHOLD_DEF
#define H5F_CRT_FREE_SPACE_THRESHOLD_ENC H5P__encode_hsize_t
#define H5F_CRT_FREE_SPACE_THRESHOLD_DEC H5P__decode_hsize_t
/******************/
@ -99,6 +123,14 @@
/* Property class callbacks */
static herr_t H5P_fcrt_reg_prop(H5P_genclass_t *pclass);
/* property callbacks */
static herr_t H5P__fcrt_btree_rank_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__fcrt_btree_rank_dec(const uint8_t **pp, void *value);
static herr_t H5P__fcrt_shmsg_index_types_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__fcrt_shmsg_index_types_dec(const uint8_t **pp, void *value);
static herr_t H5P__fcrt_shmsg_index_minsize_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__fcrt_shmsg_index_minsize_dec(const uint8_t **pp, void *value);
/*********************/
/* Package Variables */
@ -130,6 +162,21 @@ const H5P_libclass_t H5P_CLS_FCRT[1] = {{
/* Local Variables */
/*******************/
/* Property value defaults */
static const hsize_t H5F_def_userblock_size_g = H5F_CRT_USER_BLOCK_DEF; /* Default userblock size */
static const unsigned H5F_def_sym_leaf_k_g = H5F_CRT_SYM_LEAF_DEF; /* Default size for symbol table leaf nodes */
static const unsigned H5F_def_btree_k_g[H5B_NUM_BTREE_ID] = H5F_CRT_BTREE_RANK_DEF; /* Default 'K' values for B-trees in file */
static const uint8_t H5F_def_sizeof_addr_g = H5F_CRT_ADDR_BYTE_NUM_DEF; /* Default size of addresses in the file */
static const uint8_t H5F_def_sizeof_size_g = H5F_CRT_OBJ_BYTE_NUM_DEF; /* Default size of sizes in the file */
static const unsigned H5F_def_superblock_ver_g = H5F_CRT_SUPER_VERS_DEF; /* Default superblock version # */
static const unsigned H5F_def_num_sohm_indexes_g = H5F_CRT_SHMSG_NINDEXES_DEF;
static const unsigned H5F_def_sohm_index_flags_g[H5O_SHMESG_MAX_NINDEXES] = H5F_CRT_SHMSG_INDEX_TYPES_DEF;
static const unsigned H5F_def_sohm_index_minsizes_g[H5O_SHMESG_MAX_NINDEXES] = H5F_CRT_SHMSG_INDEX_MINSIZE_DEF;
static const unsigned H5F_def_sohm_list_max_g = H5F_CRT_SHMSG_LIST_MAX_DEF;
static const unsigned H5F_def_sohm_btree_min_g = H5F_CRT_SHMSG_BTREE_MIN_DEF;
static const unsigned H5F_def_file_space_strategy_g = H5F_CRT_FILE_SPACE_STRATEGY_DEF;
static const hsize_t H5F_def_free_space_threshold_g = H5F_CRT_FREE_SPACE_THRESHOLD_DEF;
/*-------------------------------------------------------------------------
@ -146,67 +193,80 @@ const H5P_libclass_t H5P_CLS_FCRT[1] = {{
static herr_t
H5P_fcrt_reg_prop(H5P_genclass_t *pclass)
{
hsize_t userblock_size = H5F_CRT_USER_BLOCK_DEF; /* Default userblock size */
unsigned sym_leaf_k = H5F_CRT_SYM_LEAF_DEF; /* Default size for symbol table leaf nodes */
unsigned btree_k[H5B_NUM_BTREE_ID] = H5F_CRT_BTREE_RANK_DEF; /* Default 'K' values for B-trees in file */
uint8_t sizeof_addr = H5F_CRT_ADDR_BYTE_NUM_DEF; /* Default size of addresses in the file */
uint8_t sizeof_size = H5F_CRT_OBJ_BYTE_NUM_DEF; /* Default size of sizes in the file */
unsigned superblock_ver = H5F_CRT_SUPER_VERS_DEF; /* Default superblock version # */
unsigned num_sohm_indexes = H5F_CRT_SHMSG_NINDEXES_DEF;
unsigned sohm_index_flags[H5O_SHMESG_MAX_NINDEXES] = H5F_CRT_SHMSG_INDEX_TYPES_DEF;
unsigned sohm_index_minsizes[H5O_SHMESG_MAX_NINDEXES] = H5F_CRT_SHMSG_INDEX_MINSIZE_DEF;
unsigned sohm_list_max = H5F_CRT_SHMSG_LIST_MAX_DEF;
unsigned sohm_btree_min = H5F_CRT_SHMSG_BTREE_MIN_DEF;
unsigned file_space_strategy = H5F_CRT_FILE_SPACE_STRATEGY_DEF;
hsize_t free_space_threshold = H5F_CRT_FREE_SPACE_THRESHOLD_DEF;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
/* Register the user block size */
if(H5P_register_real(pclass, H5F_CRT_USER_BLOCK_NAME, H5F_CRT_USER_BLOCK_SIZE, &userblock_size, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_CRT_USER_BLOCK_NAME, H5F_CRT_USER_BLOCK_SIZE, &H5F_def_userblock_size_g,
NULL, NULL, NULL, H5F_CRT_USER_BLOCK_ENC, H5F_CRT_USER_BLOCK_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the 1/2 rank for symbol table leaf nodes */
if(H5P_register_real(pclass, H5F_CRT_SYM_LEAF_NAME, H5F_CRT_SYM_LEAF_SIZE, &sym_leaf_k, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_CRT_SYM_LEAF_NAME, H5F_CRT_SYM_LEAF_SIZE, &H5F_def_sym_leaf_k_g,
NULL, NULL, NULL, H5F_CRT_SYM_LEAF_ENC, H5F_CRT_SYM_LEAF_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the 1/2 rank for btree internal nodes */
if(H5P_register_real(pclass, H5F_CRT_BTREE_RANK_NAME, H5F_CRT_BTREE_RANK_SIZE, btree_k, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_CRT_BTREE_RANK_NAME, H5F_CRT_BTREE_RANK_SIZE, H5F_def_btree_k_g,
NULL, NULL, NULL, H5F_CRT_BTREE_RANK_ENC, H5F_CRT_BTREE_RANK_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the byte number for an address */
if(H5P_register_real(pclass, H5F_CRT_ADDR_BYTE_NUM_NAME, H5F_CRT_ADDR_BYTE_NUM_SIZE, &sizeof_addr, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_CRT_ADDR_BYTE_NUM_NAME, H5F_CRT_ADDR_BYTE_NUM_SIZE, &H5F_def_sizeof_addr_g,
NULL, NULL, NULL, H5F_CRT_ADDR_BYTE_NUM_ENC, H5F_CRT_ADDR_BYTE_NUM_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the byte number for object size */
if(H5P_register_real(pclass, H5F_CRT_OBJ_BYTE_NUM_NAME, H5F_CRT_OBJ_BYTE_NUM_SIZE, &sizeof_size, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_CRT_OBJ_BYTE_NUM_NAME, H5F_CRT_OBJ_BYTE_NUM_SIZE, &H5F_def_sizeof_size_g,
NULL, NULL, NULL, H5F_CRT_OBJ_BYTE_NUM_ENC, H5F_CRT_OBJ_BYTE_NUM_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the superblock version number */
if(H5P_register_real(pclass, H5F_CRT_SUPER_VERS_NAME, H5F_CRT_SUPER_VERS_SIZE, &superblock_ver, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5F_CRT_SUPER_VERS_NAME, H5F_CRT_SUPER_VERS_SIZE, &H5F_def_superblock_ver_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the shared OH message information */
if(H5P_register_real(pclass,H5F_CRT_SHMSG_NINDEXES_NAME, H5F_CRT_SHMSG_NINDEXES_SIZE, &num_sohm_indexes,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
if(H5P_register_real(pclass, H5F_CRT_SHMSG_NINDEXES_NAME, H5F_CRT_SHMSG_NINDEXES_SIZE, &H5F_def_num_sohm_indexes_g,
NULL, NULL, NULL, H5F_CRT_SHMSG_NINDEXES_ENC, H5F_CRT_SHMSG_NINDEXES_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
if(H5P_register_real(pclass,H5F_CRT_SHMSG_INDEX_TYPES_NAME, H5F_CRT_SHMSG_INDEX_TYPES_SIZE, &sohm_index_flags,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
if(H5P_register_real(pclass, H5F_CRT_SHMSG_INDEX_TYPES_NAME, H5F_CRT_SHMSG_INDEX_TYPES_SIZE, &H5F_def_sohm_index_flags_g,
NULL, NULL, NULL, H5F_CRT_SHMSG_INDEX_TYPES_ENC, H5F_CRT_SHMSG_INDEX_TYPES_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
if(H5P_register_real(pclass,H5F_CRT_SHMSG_INDEX_MINSIZE_NAME, H5F_CRT_SHMSG_INDEX_MINSIZE_SIZE, &sohm_index_minsizes,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
if(H5P_register_real(pclass, H5F_CRT_SHMSG_INDEX_MINSIZE_NAME, H5F_CRT_SHMSG_INDEX_MINSIZE_SIZE, &H5F_def_sohm_index_minsizes_g,
NULL, NULL, NULL, H5F_CRT_SHMSG_INDEX_MINSIZE_ENC, H5F_CRT_SHMSG_INDEX_MINSIZE_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the shared OH cutoff size information */
if(H5P_register_real(pclass,H5F_CRT_SHMSG_LIST_MAX_NAME, H5F_CRT_SHMSG_LIST_MAX_SIZE, &sohm_list_max,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
if(H5P_register_real(pclass, H5F_CRT_SHMSG_LIST_MAX_NAME, H5F_CRT_SHMSG_LIST_MAX_SIZE, &H5F_def_sohm_list_max_g,
NULL, NULL, NULL, H5F_CRT_SHMSG_LIST_MAX_ENC, H5F_CRT_SHMSG_LIST_MAX_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
if(H5P_register_real(pclass,H5F_CRT_SHMSG_BTREE_MIN_NAME, H5F_CRT_SHMSG_BTREE_MIN_SIZE, &sohm_btree_min,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
if(H5P_register_real(pclass, H5F_CRT_SHMSG_BTREE_MIN_NAME, H5F_CRT_SHMSG_BTREE_MIN_SIZE, &H5F_def_sohm_btree_min_g,
NULL, NULL, NULL, H5F_CRT_SHMSG_BTREE_MIN_ENC, H5F_CRT_SHMSG_BTREE_MIN_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the file space handling strategy */
if(H5P_register_real(pclass, H5F_CRT_FILE_SPACE_STRATEGY_NAME, H5F_CRT_FILE_SPACE_STRATEGY_SIZE, &file_space_strategy, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_CRT_FILE_SPACE_STRATEGY_NAME, H5F_CRT_FILE_SPACE_STRATEGY_SIZE, &H5F_def_file_space_strategy_g,
NULL, NULL, NULL, H5F_CRT_FILE_SPACE_STRATEGY_ENC, H5F_CRT_FILE_SPACE_STRATEGY_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the free space section threshold */
if(H5P_register_real(pclass, H5F_CRT_FREE_SPACE_THRESHOLD_NAME, H5F_CRT_FREE_SPACE_THRESHOLD_SIZE, &free_space_threshold, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5F_CRT_FREE_SPACE_THRESHOLD_NAME, H5F_CRT_FREE_SPACE_THRESHOLD_SIZE, &H5F_def_free_space_threshold_g,
NULL, NULL, NULL, H5F_CRT_FREE_SPACE_THRESHOLD_ENC, H5F_CRT_FREE_SPACE_THRESHOLD_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
done:
@ -613,6 +673,95 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Pget_istore_k() */
/*-------------------------------------------------------------------------
* Function: H5P__fcrt_btree_rank_enc
*
* Purpose: Callback routine which is called whenever the index storage
* btree in file creation property list is encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* August 7, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__fcrt_btree_rank_enc(const void *value, uint8_t **pp, size_t *size)
{
const unsigned *btree_k = (const unsigned *)value; /* Create local alias for values */
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(btree_k);
HDassert(size);
if(NULL != *pp) {
unsigned u; /* Local index variable */
/* Encode the size of an unsigned*/
*(*pp)++ = (uint8_t)sizeof(unsigned);
/* Encode all the btree */
for(u = 0 ; u < H5B_NUM_BTREE_ID; u++) {
/* Encode the left split value */
H5_ENCODE_UNSIGNED(*pp, *(const unsigned *)btree_k)
btree_k++;
} /* end for */
} /* end if */
/* Size of type flags values */
*size += 1 + (H5B_NUM_BTREE_ID * sizeof(unsigned));
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__fcrt_btree_rank_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__fcrt_btree_rank_dec
*
* Purpose: Callback routine which is called whenever the index storage
* btree in file creation property list is decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* August 7, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__fcrt_btree_rank_dec(const uint8_t **pp, void *_value)
{
unsigned *btree_k = (unsigned *)_value;
unsigned enc_size; /* Size of encoded property */
unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(btree_k);
/* Decode the size */
enc_size = *(*pp)++;
if(enc_size != sizeof(unsigned))
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "unsigned value can't be decoded")
/* Decode all the type flags */
for(u = 0 ; u < H5B_NUM_BTREE_ID; u++)
H5_DECODE_UNSIGNED(*pp, btree_k[u])
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__fcrt_btree_rank_dec() */
/*-------------------------------------------------------------------------
* Function: H5Pset_shared_mesg_nindexes
@ -812,6 +961,188 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Pset_shared_mesg_index() */
/*-------------------------------------------------------------------------
* Function: H5P__fcrt_shmsg_index_types_enc
*
* Purpose: Callback routine which is called whenever the shared
* message indec types in file creation property list
* is encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* August 7, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__fcrt_shmsg_index_types_enc(const void *value, uint8_t **pp, size_t *size)
{
const unsigned *type_flags = (const unsigned *)value; /* Create local alias for values */
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(type_flags);
HDassert(size);
if(NULL != *pp) {
unsigned u; /* Local index variable */
/* Encode the size of a double*/
*(*pp)++ = (uint8_t)sizeof(unsigned);
/* Encode all the type flags */
for(u = 0; u < H5O_SHMESG_MAX_NINDEXES; u++) {
/* Encode the left split value */
H5_ENCODE_UNSIGNED(*pp, *(const unsigned *)type_flags)
type_flags++;
} /* end for */
} /* end if */
/* Size of type flags values */
*size += 1 + (H5O_SHMESG_MAX_NINDEXES * sizeof(unsigned));
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__fcrt_shmsg_index_types_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__fcrt_shmsg_index_types_dec
*
* Purpose: Callback routine which is called whenever the shared
* message indec types in file creation property list
* is decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* August 7, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__fcrt_shmsg_index_types_dec(const uint8_t **pp, void *_value)
{
unsigned *type_flags = (unsigned *)_value;
unsigned enc_size; /* Size of encoded property */
unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(type_flags);
/* Decode the size */
enc_size = *(*pp)++;
if(enc_size != sizeof(unsigned))
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "unsigned value can't be decoded")
/* Decode all the type flags */
for(u = 0; u < H5O_SHMESG_MAX_NINDEXES; u++)
H5_DECODE_UNSIGNED(*pp, type_flags[u])
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__fcrt_shmsg_index_types_dec() */
/*-------------------------------------------------------------------------
* Function: H5P__fcrt_shmsg_index_minsize_enc
*
* Purpose: Callback routine which is called whenever the shared
* message index minsize in file creation property list
* is encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* August 7, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__fcrt_shmsg_index_minsize_enc(const void *value, uint8_t **pp, size_t *size)
{
const unsigned *minsizes = (const unsigned *)value; /* Create local alias for values */
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(minsizes);
HDassert(size);
if(NULL != *pp) {
unsigned u; /* Local index variable */
/* Encode the size of a double*/
*(*pp)++ = (uint8_t)sizeof(unsigned);
/* Encode all the minsize values */
for(u = 0 ; u < H5O_SHMESG_MAX_NINDEXES; u++) {
/* Encode the left split value */
H5_ENCODE_UNSIGNED(*pp, *(const unsigned *)minsizes)
minsizes++;
} /* end for */
} /* end if */
/* Size of type flags values */
*size += 1 + (H5O_SHMESG_MAX_NINDEXES * sizeof(unsigned));
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__fcrt_shmsg_index_minsize_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__fcrt_shmsg_index_minsize_dec
*
* Purpose: Callback routine which is called whenever the shared
* message indec minsize in file creation property list
* is decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* August 7, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__fcrt_shmsg_index_minsize_dec(const uint8_t **pp, void *_value)
{
unsigned *minsizes = (unsigned *)_value;
unsigned enc_size; /* Size of encoded property */
unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(minsizes);
/* Decode the size */
enc_size = *(*pp)++;
if(enc_size != sizeof(unsigned))
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "unsigned value can't be decoded")
/* Decode all the minsize values */
for(u = 0 ; u < H5O_SHMESG_MAX_NINDEXES; u++)
H5_DECODE_UNSIGNED(*pp, minsizes[u])
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__fcrt_shmsg_index_minsize_dec() */
/*-------------------------------------------------------------------------
* Function: H5Pset_shared_mesg_phase_change

View File

@ -93,6 +93,14 @@ const H5P_libclass_t H5P_CLS_FMNT[1] = {{
/*****************************/
/*******************/
/* Local Variables */
/*******************/
/* Property value defaults */
static const hbool_t H5F_def_local_g = H5F_MNT_SYM_LOCAL_DEF; /* Whether symlinks are local to file */
/*-------------------------------------------------------------------------
* Function: H5P_fmnt_reg_prop
@ -108,14 +116,14 @@ const H5P_libclass_t H5P_CLS_FMNT[1] = {{
static herr_t
H5P_fmnt_reg_prop(H5P_genclass_t *pclass)
{
hbool_t local = H5F_MNT_SYM_LOCAL_DEF; /* Whether symlinks are local to file */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
/* Register property of whether symlinks is local to file */
if(H5P_register_real(pclass, H5F_MNT_SYM_LOCAL_NAME, H5F_MNT_SYM_LOCAL_SIZE, &local, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
if(H5P_register_real(pclass, H5F_MNT_SYM_LOCAL_NAME, H5F_MNT_SYM_LOCAL_SIZE, &H5F_def_local_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
done:
FUNC_LEAVE_NOAPI(ret_value)

View File

@ -42,6 +42,12 @@
/* Local Macros */
/****************/
/* ========= Group Creation properties ============ */
#define H5G_CRT_GROUP_INFO_ENC H5P__gcrt_group_info_enc
#define H5G_CRT_GROUP_INFO_DEC H5P__gcrt_group_info_dec
#define H5G_CRT_LINK_INFO_ENC H5P__gcrt_link_info_enc
#define H5G_CRT_LINK_INFO_DEC H5P__gcrt_link_info_dec
/******************/
/* Local Typedefs */
@ -60,6 +66,12 @@
/* Property class callbacks */
static herr_t H5P__gcrt_reg_prop(H5P_genclass_t *pclass);
/* Property callbacks */
static herr_t H5P__gcrt_group_info_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__gcrt_group_info_dec(const uint8_t **pp, void *value);
static herr_t H5P__gcrt_link_info_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__gcrt_link_info_dec(const uint8_t **pp, void *value);
/*********************/
/* Package Variables */
@ -91,6 +103,10 @@ const H5P_libclass_t H5P_CLS_GCRT[1] = {{
/* Local Variables */
/*******************/
/* Property value defaults */
static const H5O_ginfo_t H5G_def_ginfo_g = H5G_CRT_GROUP_INFO_DEF; /* Default group info settings */
static const H5O_linfo_t H5G_def_linfo_g = H5G_CRT_LINK_INFO_DEF; /* Default link info settings */
/*-------------------------------------------------------------------------
@ -107,18 +123,20 @@ const H5P_libclass_t H5P_CLS_GCRT[1] = {{
static herr_t
H5P__gcrt_reg_prop(H5P_genclass_t *pclass)
{
H5O_ginfo_t ginfo = H5G_CRT_GROUP_INFO_DEF; /* Default group info settings */
H5O_linfo_t linfo = H5G_CRT_LINK_INFO_DEF; /* Default link info settings */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Register group info property */
if(H5P_register_real(pclass, H5G_CRT_GROUP_INFO_NAME, H5G_CRT_GROUP_INFO_SIZE, &ginfo, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5G_CRT_GROUP_INFO_NAME, H5G_CRT_GROUP_INFO_SIZE, &H5G_def_ginfo_g,
NULL, NULL, NULL, H5G_CRT_GROUP_INFO_ENC, H5G_CRT_GROUP_INFO_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register link info property */
if(H5P_register_real(pclass, H5G_CRT_LINK_INFO_NAME, H5G_CRT_LINK_INFO_SIZE, &linfo, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5G_CRT_LINK_INFO_NAME, H5G_CRT_LINK_INFO_SIZE, &H5G_def_linfo_g,
NULL, NULL, NULL, H5G_CRT_LINK_INFO_ENC, H5G_CRT_LINK_INFO_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
done:
@ -506,3 +524,172 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Pget_link_creation_order() */
/*-------------------------------------------------------------------------
* Function: H5P__gcrt_group_info_enc
*
* Purpose: Callback routine which is called whenever the group
* property in the dataset access property list is
* encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* Monday, October 10, 2011
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__gcrt_group_info_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5O_ginfo_t *ginfo = (const H5O_ginfo_t *)value; /* Create local aliases for values */
FUNC_ENTER_STATIC_NOERR
if(NULL != *pp) {
UINT32ENCODE(*pp, ginfo->lheap_size_hint)
UINT16ENCODE(*pp, ginfo->max_compact)
UINT16ENCODE(*pp, ginfo->min_dense)
UINT16ENCODE(*pp, ginfo->est_num_entries)
UINT16ENCODE(*pp, ginfo->est_name_len)
} /* end if */
*size += sizeof(uint16_t) * 4 + sizeof(uint32_t);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__gcrt_group_info_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__gcrt_group_info_dec
*
* Purpose: Callback routine which is called whenever the group info
* property in the dataset access property list is
* decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* Monday, October 10, 2011
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__gcrt_group_info_dec(const uint8_t **pp, void *_value)
{
H5O_ginfo_t *ginfo = (H5O_ginfo_t *)_value; /* Group info settings */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC_NOERR
/* Set property to default value */
*ginfo = H5G_def_ginfo_g;
UINT32DECODE(*pp, ginfo->lheap_size_hint)
UINT16DECODE(*pp, ginfo->max_compact)
UINT16DECODE(*pp, ginfo->min_dense)
UINT16DECODE(*pp, ginfo->est_num_entries)
UINT16DECODE(*pp, ginfo->est_name_len)
/* Update fields */
if(ginfo->max_compact != H5G_CRT_GINFO_MAX_COMPACT ||
ginfo->min_dense != H5G_CRT_GINFO_MIN_DENSE)
ginfo->store_link_phase_change = TRUE;
else
ginfo->store_link_phase_change = FALSE;
if(ginfo->est_num_entries != H5G_CRT_GINFO_EST_NUM_ENTRIES ||
ginfo->est_name_len != H5G_CRT_GINFO_EST_NAME_LEN)
ginfo->store_est_entry_info = TRUE;
else
ginfo->store_est_entry_info = FALSE;
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__gcrt_group_info_dec() */
/*-------------------------------------------------------------------------
* Function: H5P__gcrt_link_info_enc
*
* Purpose: Callback routine which is called whenever the link
* property in the dataset access property list is
* encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* Monday, October 10, 2011
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__gcrt_link_info_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5O_linfo_t *linfo = (const H5O_linfo_t *)value; /* Create local aliases for values */
FUNC_ENTER_STATIC_NOERR
if(NULL != *pp) {
unsigned crt_order_flags = 0;
crt_order_flags |= linfo->track_corder ? H5P_CRT_ORDER_TRACKED : 0;
crt_order_flags |= linfo->index_corder ? H5P_CRT_ORDER_INDEXED : 0;
/* Encode the size of unsigned*/
*(*pp)++ = (uint8_t)sizeof(unsigned);
/* Encode the value */
H5_ENCODE_UNSIGNED(*pp, crt_order_flags)
} /* end if */
*size += (1 + sizeof(unsigned));
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__gcrt_link_info_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__gcrt_link_info_dec
*
* Purpose: Callback routine which is called whenever the link info
* property in the dataset access property list is
* decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* Monday, October 10, 2011
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__gcrt_link_info_dec(const uint8_t **pp, void *_value)
{
H5O_linfo_t *linfo = (H5O_linfo_t *)_value; /* Link info settings */
unsigned crt_order_flags;
unsigned enc_size;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
enc_size = *(*pp)++;
if(enc_size != sizeof(unsigned))
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "unsigned value can't be decoded")
/* Set property to default value */
*linfo = H5G_def_linfo_g;
H5_DECODE_UNSIGNED(*pp, crt_order_flags)
/* Update fields */
linfo->track_corder = (hbool_t)((crt_order_flags & H5P_CRT_ORDER_TRACKED) ? TRUE : FALSE);
linfo->index_corder = (hbool_t)((crt_order_flags & H5P_CRT_ORDER_INDEXED) ? TRUE : FALSE);
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__gcrt_link_info_dec() */

View File

@ -970,7 +970,7 @@ done:
Internal routine to create a new property
USAGE
H5P_genprop_t *H5P_create_prop(name,size,type,value,prp_create,prp_set,
prp_get,prp_delete,prp_close)
prp_get,prp_delete,prp_close, prp_encode, prp_decode)
const char *name; IN: Name of property to register
size_t size; IN: Size of property in bytes
H5P_prop_within_t type; IN: Type of object the property will be inserted into
@ -979,6 +979,8 @@ done:
creation callback
H5P_prp_set_func_t prp_set; IN: Function pointer to property set callback
H5P_prp_get_func_t prp_get; IN: Function pointer to property get callback
H5P_prp_encode_func_t prp_encode; IN: Function pointer to property encode
H5P_prp_decode_func_t prp_decode; IN: Function pointer to property decode
H5P_prp_delete_func_t prp_delete; IN: Function pointer to property delete callback
H5P_prp_copy_func_t prp_copy; IN: Function pointer to property copy callback
H5P_prp_compare_func_t prp_cmp; IN: Function pointer to property compare callback
@ -996,9 +998,10 @@ done:
--------------------------------------------------------------------------*/
static H5P_genprop_t *
H5P_create_prop(const char *name, size_t size, H5P_prop_within_t type,
const void *value,
H5P_prp_create_func_t prp_create, H5P_prp_set_func_t prp_set,
H5P_prp_get_func_t prp_get, H5P_prp_delete_func_t prp_delete,
const void *value, H5P_prp_create_func_t prp_create,
H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
H5P_prp_encode_func_t prp_encode, H5P_prp_decode_func_t prp_decode,
H5P_prp_delete_func_t prp_delete,
H5P_prp_copy_func_t prp_copy, H5P_prp_compare_func_t prp_cmp,
H5P_prp_close_func_t prp_close)
{
@ -1034,6 +1037,8 @@ H5P_create_prop(const char *name, size_t size, H5P_prop_within_t type,
prop->create = prp_create;
prop->set = prp_set;
prop->get = prp_get;
prop->encode = prp_encode;
prop->decode = prp_decode;
prop->del = prp_delete;
prop->copy = prp_copy;
/* Use custom comparison routine if available, otherwise default to memcmp() */
@ -1782,7 +1787,8 @@ done:
PURPOSE
Internal routine to register a new property in a property list class.
USAGE
herr_t H5P_register_real(class, name, size, default, prp_create, prp_set, prp_get, prp_close)
herr_t H5P_register_real(class, name, size, default, prp_create, prp_set,
prp_get, prp_close, prp_encode, prp_decode)
H5P_genclass_t *class; IN: Property list class to modify
const char *name; IN: Name of property to register
size_t size; IN: Size of property in bytes
@ -1792,6 +1798,8 @@ done:
creation callback
H5P_prp_set_func_t prp_set; IN: Function pointer to property set callback
H5P_prp_get_func_t prp_get; IN: Function pointer to property get callback
H5P_prp_encode_func_t prp_encode; IN: Function pointer to property encode
H5P_prp_decode_func_t prp_decode; IN: Function pointer to property decode
H5P_prp_delete_func_t prp_delete; IN: Function pointer to property delete callback
H5P_prp_copy_func_t prp_copy; IN: Function pointer to property copy callback
H5P_prp_compare_func_t prp_cmp; IN: Function pointer to property compare callback
@ -1911,6 +1919,33 @@ done:
'close' routine returns a negative value, the property list close
routine returns an error value but the property list is still closed.
The 'encode' callback is called when a property list with this
property is being encoded. H5P_prp_encode_func_t is defined as:
typedef herr_t (*H5P_prp_encode_func_t)(void *f, size_t *size,
void *value, void *plist, uint8_t **buf);
where the parameters to the callback function are:
void *f; IN: A fake file structure used to encode.
size_t *size; IN/OUT: The size of the buffer to encode the property.
void *value; IN: The value of the property being encoded.
void *plist; IN: The property list structure.
uint8_t **buf; OUT: The buffer that holds the encoded property;
The 'encode' routine returns the size needed to encode the property value
if the buffer passed in is NULL or the size is zero. Otherwise it encodes
the property value into binary in buf.
The 'decode' callback is called when a property list with this
property is being decoded. H5P_prp_encode_func_t is defined as:
typedef herr_t (*H5P_prp_encode_func_t)(void *f, size_t *size,
void *value, void *plist, uint8_t **buf);
where the parameters to the callback function are:
void *f; IN: A fake file structure used to decode.
size_t *size; IN: UNUSED
void *value; IN: UNUSED
void *plist; IN: The property list structure.
uint8_t **buf; IN: The buffer that holds the binary encoded property;
The 'decode' routine decodes the binary buffer passed in and transforms it into
corresponding property values that are set in the property list passed in.
GLOBAL VARIABLES
COMMENTS, BUGS, ASSUMPTIONS
The 'set' callback function may be useful to range check the value being
@ -1932,8 +1967,10 @@ done:
--------------------------------------------------------------------------*/
herr_t
H5P_register_real(H5P_genclass_t *pclass, const char *name, size_t size,
const void *def_value, H5P_prp_create_func_t prp_create, H5P_prp_set_func_t prp_set,
H5P_prp_get_func_t prp_get, H5P_prp_delete_func_t prp_delete,
const void *def_value, H5P_prp_create_func_t prp_create,
H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
H5P_prp_encode_func_t prp_encode, H5P_prp_decode_func_t prp_decode,
H5P_prp_delete_func_t prp_delete,
H5P_prp_copy_func_t prp_copy, H5P_prp_compare_func_t prp_cmp,
H5P_prp_close_func_t prp_close)
{
@ -1953,7 +1990,9 @@ H5P_register_real(H5P_genclass_t *pclass, const char *name, size_t size,
HGOTO_ERROR(H5E_PLIST, H5E_EXISTS, FAIL, "property already exists")
/* Create property object from parameters */
if(NULL == (new_prop = H5P_create_prop(name, size, H5P_PROP_WITHIN_CLASS, def_value, prp_create, prp_set, prp_get, prp_delete, prp_copy, prp_cmp, prp_close)))
if(NULL == (new_prop = H5P_create_prop(name, size, H5P_PROP_WITHIN_CLASS,
def_value, prp_create, prp_set, prp_get, prp_encode, prp_decode,
prp_delete, prp_copy, prp_cmp, prp_close)))
HGOTO_ERROR(H5E_PLIST, H5E_CANTCREATE, FAIL,"Can't create property")
/* Insert property into property list class */
@ -1991,6 +2030,8 @@ done:
creation callback
H5P_prp_set_func_t prp_set; IN: Function pointer to property set callback
H5P_prp_get_func_t prp_get; IN: Function pointer to property get callback
H5P_prp_encode_func_t prp_encode; IN: Function pointer to property encode
H5P_prp_decode_func_t prp_decode; IN: Function pointer to property decode
H5P_prp_delete_func_t prp_delete; IN: Function pointer to property delete callback
H5P_prp_copy_func_t prp_copy; IN: Function pointer to property copy callback
H5P_prp_compare_func_t prp_cmp; IN: Function pointer to property compare callback
@ -2056,6 +2097,33 @@ done:
negative value, the property value is returned and the property list get
routine returns an error value.
The 'encode' callback is called when a property list with this
property is being encoded. H5P_prp_encode_func_t is defined as:
typedef herr_t (*H5P_prp_encode_func_t)(void *f, size_t *size,
void *value, void *plist, uint8_t **buf);
where the parameters to the callback function are:
void *f; IN: A fake file structure used to encode.
size_t *size; IN/OUT: The size of the buffer to encode the property.
void *value; IN: The value of the property being encoded.
void *plist; IN: The property list structure.
uint8_t **buf; OUT: The buffer that holds the encoded property;
The 'encode' routine returns the size needed to encode the property value
if the buffer passed in is NULL or the size is zero. Otherwise it encodes
the property value into binary in buf.
The 'decode' callback is called when a property list with this
property is being decoded. H5P_prp_encode_func_t is defined as:
typedef herr_t (*H5P_prp_encode_func_t)(void *f, size_t *size,
void *value, void *plist, uint8_t **buf);
where the parameters to the callback function are:
void *f; IN: A fake file structure used to decode.
size_t *size; IN: UNUSED
void *value; IN: UNUSED
void *plist; IN: The property list structure.
uint8_t **buf; IN: The buffer that holds the binary encoded property;
The 'decode' routine decodes the binary buffer passed in and transforms it into
corresponding property values that are set in the property list passed in.
The 'delete' callback is called when a property is deleted from a
property list. H5P_prp_del_func_t is defined as:
typedef herr_t (*H5P_prp_del_func_t)(hid_t prop_id, const char *name,
@ -2131,8 +2199,10 @@ done:
--------------------------------------------------------------------------*/
herr_t
H5P_register(H5P_genclass_t **ppclass, const char *name, size_t size,
const void *def_value, H5P_prp_create_func_t prp_create, H5P_prp_set_func_t prp_set,
H5P_prp_get_func_t prp_get, H5P_prp_delete_func_t prp_delete,
const void *def_value, H5P_prp_create_func_t prp_create,
H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
H5P_prp_encode_func_t prp_encode, H5P_prp_decode_func_t prp_decode,
H5P_prp_delete_func_t prp_delete,
H5P_prp_copy_func_t prp_copy, H5P_prp_compare_func_t prp_cmp,
H5P_prp_close_func_t prp_close)
{
@ -2186,7 +2256,8 @@ H5P_register(H5P_genclass_t **ppclass, const char *name, size_t size,
} /* end if */
/* Really register the property in the class */
if(H5P_register_real(pclass, name, size, def_value, prp_create, prp_set, prp_get, prp_delete, prp_copy, prp_cmp, prp_close) < 0)
if(H5P_register_real(pclass, name, size, def_value, prp_create, prp_set, prp_get,
prp_encode, prp_decode, prp_delete, prp_copy, prp_cmp, prp_close) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTCREATE, FAIL, "can't register property")
/* Update pointer to pointer to class, if a new one was generated */
@ -2208,13 +2279,16 @@ done:
PURPOSE
Internal routine to insert a new property in a property list.
USAGE
herr_t H5P_insert(plist, name, size, value, prp_set, prp_get, prp_close)
herr_t H5P_insert(plist, name, size, value, prp_set, prp_get, prp_close,
prp_encode, prp_decode)
H5P_genplist_t *plist; IN: Property list to add property to
const char *name; IN: Name of property to add
size_t size; IN: Size of property in bytes
void *value; IN: Pointer to the value for the property
H5P_prp_set_func_t prp_set; IN: Function pointer to property set callback
H5P_prp_get_func_t prp_get; IN: Function pointer to property get callback
H5P_prp_encode_func_t prp_encode; IN: Function pointer to property encode
H5P_prp_decode_func_t prp_decode; IN: Function pointer to property decode
H5P_prp_delete_func_t prp_delete; IN: Function pointer to property delete callback
H5P_prp_copy_func_t prp_copy; IN: Function pointer to property copy callback
H5P_prp_compare_func_t prp_cmp; IN: Function pointer to property compare callback
@ -2264,6 +2338,33 @@ done:
negative value, the property value is returned and the property list get
routine returns an error value.
The 'encode' callback is called when a property list with this
property is being encoded. H5P_prp_encode_func_t is defined as:
typedef herr_t (*H5P_prp_encode_func_t)(void *f, size_t *size,
void *value, void *plist, uint8_t **buf);
where the parameters to the callback function are:
void *f; IN: A fake file structure used to encode.
size_t *size; IN/OUT: The size of the buffer to encode the property.
void *value; IN: The value of the property being encoded.
void *plist; IN: The property list structure.
uint8_t **buf; OUT: The buffer that holds the encoded property;
The 'encode' routine returns the size needed to encode the property value
if the buffer passed in is NULL or the size is zero. Otherwise it encodes
the property value into binary in buf.
The 'decode' callback is called when a property list with this
property is being decoded. H5P_prp_encode_func_t is defined as:
typedef herr_t (*H5P_prp_encode_func_t)(void *f, size_t *size,
void *value, void *plist, uint8_t **buf);
where the parameters to the callback function are:
void *f; IN: A fake file structure used to decode.
size_t *size; IN: UNUSED
void *value; IN: UNUSED
void *plist; IN: The property list structure.
uint8_t **buf; IN: The buffer that holds the binary encoded property;
The 'decode' routine decodes the binary buffer passed in and transforms it into
corresponding property values that are set in the property list passed in.
The 'delete' callback is called when a property is deleted from a
property list. H5P_prp_del_func_t is defined as:
typedef herr_t (*H5P_prp_del_func_t)(hid_t prop_id, const char *name,
@ -2344,6 +2445,7 @@ done:
herr_t
H5P_insert(H5P_genplist_t *plist, const char *name, size_t size,
void *value, H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
H5P_prp_encode_func_t prp_encode, H5P_prp_decode_func_t prp_decode,
H5P_prp_delete_func_t prp_delete, H5P_prp_copy_func_t prp_copy,
H5P_prp_compare_func_t prp_cmp, H5P_prp_close_func_t prp_close)
{
@ -2391,7 +2493,9 @@ H5P_insert(H5P_genplist_t *plist, const char *name, size_t size,
/* Ok to add to property list */
/* Create property object from parameters */
if(NULL == (new_prop = H5P_create_prop(name, size, H5P_PROP_WITHIN_LIST, value, NULL, prp_set, prp_get, prp_delete, prp_copy, prp_cmp, prp_close)))
if(NULL == (new_prop = H5P_create_prop(name, size, H5P_PROP_WITHIN_LIST, value, NULL,
prp_set, prp_get, prp_encode, prp_decode, prp_delete, prp_copy,
prp_cmp, prp_close)))
HGOTO_ERROR(H5E_PLIST, H5E_CANTCREATE, FAIL, "Can't create property")
/* Insert property into property list class */
@ -2950,6 +3054,16 @@ H5P_cmp_prop(const H5P_genprop_t *prop1, const H5P_genprop_t *prop2)
if(prop1->get != NULL && prop2->get == NULL) HGOTO_DONE(1);
if(prop1->get != prop2->get) HGOTO_DONE(-1);
/* Check if they both have the same 'encode' callback */
if(prop1->encode == NULL && prop2->encode != NULL) HGOTO_DONE(-1);
if(prop1->encode != NULL && prop2->encode == NULL) HGOTO_DONE(1);
if(prop1->encode != prop2->encode) HGOTO_DONE(-1);
/* Check if they both have the same 'decode' callback */
if(prop1->decode == NULL && prop2->decode != NULL) HGOTO_DONE(-1);
if(prop1->decode != NULL && prop2->decode == NULL) HGOTO_DONE(1);
if(prop1->decode != prop2->decode) HGOTO_DONE(-1);
/* Check if they both have the same 'delete' callback */
if(prop1->del == NULL && prop2->del != NULL) HGOTO_DONE(-1);
if(prop1->del != NULL && prop2->del == NULL) HGOTO_DONE(1);
@ -4270,7 +4384,7 @@ H5P_copy_prop_plist(hid_t dst_id, hid_t src_id, const char *name)
/* Create property object from parameters */
if(NULL == (new_prop = H5P_create_prop(prop->name, prop->size, H5P_PROP_WITHIN_LIST, prop->value,
prop->create, prop->set, prop->get,
prop->create, prop->set, prop->get, prop->encode, prop->decode,
prop->del, prop->copy, prop->cmp, prop->close)))
HGOTO_ERROR(H5E_PLIST, H5E_CANTCREATE, FAIL,"Can't create property")
@ -4362,7 +4476,7 @@ H5P_copy_prop_pclass(hid_t dst_id, hid_t src_id, const char *name)
/* Register the property into the destination */
orig_dst_pclass = dst_pclass;
if(H5P_register(&dst_pclass, name, prop->size, prop->value, prop->create, prop->set, prop->get,
prop->del, prop->copy, prop->cmp, prop->close) < 0)
prop->encode, prop->decode, prop->del, prop->copy, prop->cmp, prop->close) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTDELETE, FAIL, "unable to remove property")
/* Check if the property class changed and needs to be substituted in the ID */
@ -4871,3 +4985,121 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5P_close_class() */
/*-------------------------------------------------------------------------
* Function: H5P__new_plist_of_type
*
* Purpose: Create a new property list, of a given type
*
* Return: Success: ID of new property list
* Failure: Negative
*
* Programmer: Quincey Koziol
* Thursday, August 2, 2012
*
*-------------------------------------------------------------------------
*/
hid_t
H5P__new_plist_of_type(H5P_plist_type_t type)
{
H5P_genclass_t *pclass; /* Class of property list to create */
hid_t class_id; /* ID of class to create */
hid_t ret_value; /* Return value */
FUNC_ENTER_PACKAGE
/* Sanity checks */
HDcompile_assert(H5P_TYPE_LINK_ACCESS == (H5P_TYPE_MAX_TYPE - 1));
HDassert(type >= H5P_TYPE_USER && type <= H5P_TYPE_LINK_ACCESS);
/* Check arguments */
if(type == H5P_TYPE_USER)
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "can't create user property list");
if(type == H5P_TYPE_ROOT)
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "shouldn't be creating root class property list");
/* Instantiate a property list of the proper type */
switch(type) {
case H5P_TYPE_OBJECT_CREATE:
class_id = H5P_CLS_OBJECT_CREATE_g;
break;
case H5P_TYPE_FILE_CREATE:
class_id = H5P_CLS_FILE_CREATE_g;
break;
case H5P_TYPE_FILE_ACCESS:
class_id = H5P_CLS_FILE_ACCESS_g;
break;
case H5P_TYPE_DATASET_CREATE:
class_id = H5P_CLS_DATASET_CREATE_g;
break;
case H5P_TYPE_DATASET_ACCESS:
class_id = H5P_CLS_DATASET_ACCESS_g;
break;
case H5P_TYPE_DATASET_XFER:
class_id = H5P_CLS_DATASET_XFER_g;
break;
case H5P_TYPE_FILE_MOUNT:
class_id = H5P_CLS_FILE_MOUNT_g;
break;
case H5P_TYPE_GROUP_CREATE:
class_id = H5P_CLS_GROUP_CREATE_g;
break;
case H5P_TYPE_GROUP_ACCESS:
class_id = H5P_CLS_GROUP_ACCESS_g;
break;
case H5P_TYPE_DATATYPE_CREATE:
class_id = H5P_CLS_DATATYPE_CREATE_g;
break;
case H5P_TYPE_DATATYPE_ACCESS:
class_id = H5P_CLS_DATATYPE_ACCESS_g;
break;
case H5P_TYPE_STRING_CREATE:
class_id = H5P_CLS_STRING_CREATE_g;
break;
case H5P_TYPE_ATTRIBUTE_CREATE:
class_id = H5P_CLS_ATTRIBUTE_CREATE_g;
break;
case H5P_TYPE_OBJECT_COPY:
class_id = H5P_CLS_OBJECT_COPY_g;
break;
case H5P_TYPE_LINK_CREATE:
class_id = H5P_CLS_LINK_CREATE_g;
break;
case H5P_TYPE_LINK_ACCESS:
class_id = H5P_CLS_LINK_ACCESS_g;
break;
case H5P_TYPE_USER: /* shut compiler warnings up */
case H5P_TYPE_ROOT:
case H5P_TYPE_MAX_TYPE:
default:
HGOTO_ERROR(H5E_PLIST, H5E_BADRANGE, FAIL, "invalid property list type: %u\n", (unsigned)type);
} /* end switch */
/* Get the class object */
if(NULL == (pclass = (H5P_genclass_t *)H5I_object(class_id)))
HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a property class")
/* Create the new property list */
if((ret_value = H5P_create_id(pclass, TRUE)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTCREATE, FAIL, "unable to create property list")
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__new_plist_of_type() */

View File

@ -48,10 +48,15 @@
/* Definitions for number of soft links to traverse */
#define H5L_ACS_NLINKS_SIZE sizeof(size_t)
#define H5L_ACS_NLINKS_DEF H5L_NUM_LINKS /*max symlinks to follow per lookup */
#define H5L_ACS_NLINKS_ENC H5P__encode_size_t
#define H5L_ACS_NLINKS_DEC H5P__decode_size_t
/* Definitions for external link prefix */
#define H5L_ACS_ELINK_PREFIX_SIZE sizeof(char *)
#define H5L_ACS_ELINK_PREFIX_DEF NULL /*default is no prefix */
#define H5L_ACS_ELINK_PREFIX_ENC H5P_lacc_elink_pref_enc
#define H5L_ACS_ELINK_PREFIX_DEC H5P_lacc_elink_pref_dec
#define H5L_ACS_ELINK_PREFIX_DEL H5P_lacc_elink_pref_del
#define H5L_ACS_ELINK_PREFIX_COPY H5P_lacc_elink_pref_copy
#define H5L_ACS_ELINK_PREFIX_CMP H5P_lacc_elink_pref_cmp
@ -60,6 +65,8 @@
/* Definitions for setting fapl of external link access */
#define H5L_ACS_ELINK_FAPL_SIZE sizeof(hid_t)
#define H5L_ACS_ELINK_FAPL_DEF H5P_DEFAULT
#define H5L_ACS_ELINK_FAPL_ENC H5P_lacc_elink_fapl_enc
#define H5L_ACS_ELINK_FAPL_DEC H5P_lacc_elink_fapl_dec
#define H5L_ACS_ELINK_FAPL_DEL H5P_lacc_elink_fapl_del
#define H5L_ACS_ELINK_FAPL_COPY H5P_lacc_elink_fapl_copy
#define H5L_ACS_ELINK_FAPL_CMP H5P_lacc_elink_fapl_cmp
@ -68,6 +75,8 @@
/* Definitions for file access flags for external link traversal */
#define H5L_ACS_ELINK_FLAGS_SIZE sizeof(unsigned)
#define H5L_ACS_ELINK_FLAGS_DEF H5F_ACC_DEFAULT
#define H5L_ACS_ELINK_FLAGS_ENC H5P__encode_unsigned
#define H5L_ACS_ELINK_FLAGS_DEC H5P__decode_unsigned
/* Definitions for callback function for external link traversal */
#define H5L_ACS_ELINK_CB_SIZE sizeof(H5L_elink_cb_t)
@ -92,10 +101,14 @@
static herr_t H5P_lacc_reg_prop(H5P_genclass_t *pclass);
/* Property list callbacks */
static herr_t H5P_lacc_elink_pref_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P_lacc_elink_pref_dec(const uint8_t **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);
static int H5P_lacc_elink_pref_cmp(const void *value1, const void *value2, size_t size);
static herr_t H5P_lacc_elink_pref_close(const char* name, size_t size, void* value);
static herr_t H5P_lacc_elink_fapl_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P_lacc_elink_fapl_dec(const uint8_t **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);
static int H5P_lacc_elink_fapl_cmp(const void *value1, const void *value2, size_t size);
@ -132,6 +145,13 @@ const H5P_libclass_t H5P_CLS_LACC[1] = {{
/* Local Variables */
/*******************/
/* Property value defaults */
static const size_t H5L_def_nlinks_g = H5L_ACS_NLINKS_DEF; /* Default number of soft links to traverse */
static const char *H5L_def_elink_prefix_g = H5L_ACS_ELINK_PREFIX_DEF; /* Default external link prefix string */
static const hid_t H5L_def_fapl_id_g = H5L_ACS_ELINK_FAPL_DEF; /* Default fapl for external link access */
static const unsigned H5L_def_elink_flags_g = H5L_ACS_ELINK_FLAGS_DEF; /* Default file access flags for external link traversal */
static const H5L_elink_cb_t H5L_def_elink_cb_g = H5L_ACS_ELINK_CB_DEF; /* Default external link traversal callback */
/*-------------------------------------------------------------------------
@ -153,40 +173,156 @@ const H5P_libclass_t H5P_CLS_LACC[1] = {{
static herr_t
H5P_lacc_reg_prop(H5P_genclass_t *pclass)
{
size_t nlinks = H5L_ACS_NLINKS_DEF; /* Default number of soft links to traverse */
char *elink_prefix = H5L_ACS_ELINK_PREFIX_DEF; /* Default external link prefix string */
hid_t def_fapl_id = H5L_ACS_ELINK_FAPL_DEF; /* Default fapl for external link access */
unsigned elink_flags = H5L_ACS_ELINK_FLAGS_DEF; /* Default file access flags for external link traversal */
H5L_elink_cb_t elink_cb = H5L_ACS_ELINK_CB_DEF; /* Default external link traversal callback */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
/* Register property for number of links traversed */
if(H5P_register_real(pclass, H5L_ACS_NLINKS_NAME, H5L_ACS_NLINKS_SIZE, &nlinks, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5L_ACS_NLINKS_NAME, H5L_ACS_NLINKS_SIZE, &H5L_def_nlinks_g,
NULL, NULL, NULL, H5L_ACS_NLINKS_ENC, H5L_ACS_NLINKS_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register property for external link prefix */
if(H5P_register_real(pclass, H5L_ACS_ELINK_PREFIX_NAME, H5L_ACS_ELINK_PREFIX_SIZE, &elink_prefix, NULL, NULL, NULL, H5L_ACS_ELINK_PREFIX_DEL, H5L_ACS_ELINK_PREFIX_COPY, H5L_ACS_ELINK_PREFIX_CMP, H5L_ACS_ELINK_PREFIX_CLOSE) < 0)
if(H5P_register_real(pclass, H5L_ACS_ELINK_PREFIX_NAME, H5L_ACS_ELINK_PREFIX_SIZE, &H5L_def_elink_prefix_g,
NULL, NULL, NULL, H5L_ACS_ELINK_PREFIX_ENC, H5L_ACS_ELINK_PREFIX_DEC,
H5L_ACS_ELINK_PREFIX_DEL, H5L_ACS_ELINK_PREFIX_COPY, H5L_ACS_ELINK_PREFIX_CMP, H5L_ACS_ELINK_PREFIX_CLOSE) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register fapl for link access */
if(H5P_register_real(pclass, H5L_ACS_ELINK_FAPL_NAME, H5L_ACS_ELINK_FAPL_SIZE, &def_fapl_id, NULL, NULL, NULL, H5L_ACS_ELINK_FAPL_DEL, H5L_ACS_ELINK_FAPL_COPY, H5L_ACS_ELINK_FAPL_CMP, H5L_ACS_ELINK_FAPL_CLOSE) < 0)
if(H5P_register_real(pclass, H5L_ACS_ELINK_FAPL_NAME, H5L_ACS_ELINK_FAPL_SIZE, &H5L_def_fapl_id_g,
NULL, NULL, NULL, H5L_ACS_ELINK_FAPL_ENC, H5L_ACS_ELINK_FAPL_DEC,
H5L_ACS_ELINK_FAPL_DEL, H5L_ACS_ELINK_FAPL_COPY, H5L_ACS_ELINK_FAPL_CMP, H5L_ACS_ELINK_FAPL_CLOSE) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register property for external link file access flags */
if(H5P_register_real(pclass, H5L_ACS_ELINK_FLAGS_NAME, H5L_ACS_ELINK_FLAGS_SIZE, &elink_flags, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5L_ACS_ELINK_FLAGS_NAME, H5L_ACS_ELINK_FLAGS_SIZE, &H5L_def_elink_flags_g,
NULL, NULL, NULL, H5L_ACS_ELINK_FLAGS_ENC, H5L_ACS_ELINK_FLAGS_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register property for external link file traversal callback */
if(H5P_register_real(pclass, H5L_ACS_ELINK_CB_NAME, H5L_ACS_ELINK_CB_SIZE, &elink_cb, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5L_ACS_ELINK_CB_NAME, H5L_ACS_ELINK_CB_SIZE, &H5L_def_elink_cb_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P_lacc_reg_prop() */
/*-------------------------------------------------------------------------
* Function: H5P_lacc_elink_fapl_enc
*
* Purpose: Callback routine which is called whenever the elink FAPL
* property in the dataset access property list is
* encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Wednesday, August 15, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P_lacc_elink_fapl_enc(const void *value, uint8_t **pp, size_t *size)
{
const hid_t *elink_fapl = (const hid_t *)value; /* Property to encode */
H5P_genplist_t *fapl_plist; /* Pointer to property list */
hbool_t non_default_fapl = FALSE; /* Whether the FAPL is non-default */
size_t enc_size = 0; /* FAPL's encoded size */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
/* Check for non-default FAPL */
if(*elink_fapl != H5P_DEFAULT) {
if(NULL == (fapl_plist = (H5P_genplist_t *)H5P_object_verify(*elink_fapl, H5P_FILE_ACCESS)))
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get property list")
non_default_fapl = TRUE;
} /* end if */
if(NULL != *pp) {
/* Store whether the FAPL is non-default */
*(*pp)++ = (uint8_t)non_default_fapl;
} /* end if */
/* 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, *pp, &enc_size) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTENCODE, FAIL, "can't encode property list")
if(*pp)
*pp += enc_size;
} /* end if */
*size += (1 + enc_size); /* Non-default flag, plus encoded property list size */
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P_lacc_elink_fapl_enc() */
/*-------------------------------------------------------------------------
* Function: H5P_lacc_elink_fapl_dec
*
* Purpose: Callback routine which is called whenever the elink FAPL
* property in the dataset access property list is
* decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Wednesday, August 15, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P_lacc_elink_fapl_dec(const uint8_t **pp, void *_value)
{
hid_t *elink_fapl = (hid_t *)_value; /* The elink FAPL value */
hbool_t non_default_fapl; /* Whether the FAPL is non-default */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
HDassert(pp);
HDassert(*pp);
HDassert(elink_fapl);
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
/* Determine if the FAPL is non-default */
non_default_fapl = (hbool_t)*(*pp)++;
if(non_default_fapl) {
H5P_genplist_t *fapl_plist; /* Pointer to property list */
size_t enc_size = 0; /* Encoded size of property list */
/* Decode the property list */
if((*elink_fapl = H5P__decode(*pp)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTDECODE, FAIL, "can't decode property")
/* Get the property list object */
if(NULL == (fapl_plist = (H5P_genplist_t *)H5P_object_verify(*elink_fapl, H5P_FILE_ACCESS)))
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get property list")
/* Compute the encoded size of the property list */
if(H5P__encode(fapl_plist, TRUE, NULL, &enc_size) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTENCODE, FAIL, "can't compute encoded property list size")
*pp += enc_size;
} /* end if */
else
*elink_fapl = H5P_DEFAULT;
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P_lacc_elink_fapl_dec() */
/*--------------------------------------------------------------------------
* Function: H5P_lacc_elink_fapl_del
@ -342,6 +478,117 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P_lacc_elink_fapl_close() */
/*-------------------------------------------------------------------------
* Function: H5P_lacc_elink_pref_enc
*
* Purpose: Callback routine which is called whenever the elink flags
* property in the dataset access property list is
* encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* Monday, October 10, 2011
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P_lacc_elink_pref_enc(const void *value, uint8_t **pp, size_t *size)
{
const char *elink_pref = *(const char * const *)value;
size_t len = 0;
uint64_t enc_value;
unsigned enc_size;
FUNC_ENTER_NOAPI_NOINIT_NOERR
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
/* calculate prefix length */
if(NULL != elink_pref)
len = HDstrlen(elink_pref);
enc_value = (uint64_t)len;
enc_size = H5V_limit_enc_size(enc_value);
HDassert(enc_size < 256);
if(NULL != *pp) {
/* encode the length of the prefix */
*(*pp)++ = (uint8_t)enc_size;
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
/* encode the prefix */
if(NULL != elink_pref) {
HDmemcpy(*(char **)pp, elink_pref, len);
*pp += len;
} /* end if */
} /* end if */
*size += (1 + enc_size);
if(NULL != elink_pref)
*size += len;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P_lacc_elink_pref_enc() */
/*-------------------------------------------------------------------------
* Function: H5P_lacc_elink_pref_dec
*
* Purpose: Callback routine which is called whenever the elink prefix
* property in the dataset access property list is
* decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* Monday, October 10, 2011
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P_lacc_elink_pref_dec(const uint8_t **pp, void *_value)
{
char **elink_pref = (char **)_value;
size_t len;
uint64_t enc_value; /* Decoded property value */
unsigned enc_size; /* Size of encoded property */
herr_t ret_value = SUCCEED;
FUNC_ENTER_NOAPI_NOINIT
HDassert(pp);
HDassert(*pp);
HDassert(elink_pref);
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
/* Decode the size */
enc_size = *(*pp)++;
HDassert(enc_size < 256);
/* Decode the value */
UINT64DECODE_VAR(*pp, enc_value, enc_size);
len = enc_value;
if(0 != len) {
/* Make a copy of the user's prefix string */
if(NULL == (*elink_pref = (char *)H5MM_malloc(len + 1)))
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, FAIL, "memory allocation failed for prefix")
HDstrncpy(*elink_pref, *(const char **)pp, len);
(*elink_pref)[len] = '\0';
*pp += len;
} /* end if */
else
*elink_pref = NULL;
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P_lacc_elink_pref_dec() */
/*-------------------------------------------------------------------------
* Function: H5P_lacc_elink_pref_del

View File

@ -48,7 +48,8 @@
/* Definitions for create intermediate groups flag */
#define H5L_CRT_INTERMEDIATE_GROUP_SIZE sizeof(unsigned)
#define H5L_CRT_INTERMEDIATE_GROUP_DEF 0
#define H5L_CRT_INTERMEDIATE_GROUP_ENC H5P__encode_unsigned
#define H5L_CRT_INTERMEDIATE_GROUP_DEC H5P__decode_unsigned
/******************/
/* Local Typedefs */
@ -98,6 +99,9 @@ const H5P_libclass_t H5P_CLS_LCRT[1] = {{
/* Local Variables */
/*******************/
/* Property value defaults */
static const unsigned H5L_def_intmd_group_g = H5L_CRT_INTERMEDIATE_GROUP_DEF; /* Default setting for creating intermediate groups */
/*-------------------------------------------------------------------------
@ -114,13 +118,14 @@ const H5P_libclass_t H5P_CLS_LCRT[1] = {{
herr_t
H5P_lcrt_reg_prop(H5P_genclass_t *pclass)
{
unsigned intmd_group = H5L_CRT_INTERMEDIATE_GROUP_DEF; /* Default setting for creating intermediate groups */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
/* Register create intermediate groups property */
if(H5P_register_real(pclass, H5L_CRT_INTERMEDIATE_GROUP_NAME, H5L_CRT_INTERMEDIATE_GROUP_SIZE, &intmd_group, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5L_CRT_INTERMEDIATE_GROUP_NAME, H5L_CRT_INTERMEDIATE_GROUP_SIZE, &H5L_def_intmd_group_g,
NULL, NULL, NULL, H5L_CRT_INTERMEDIATE_GROUP_ENC, H5L_CRT_INTERMEDIATE_GROUP_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
done:

View File

@ -37,6 +37,7 @@
#include "H5private.h" /* Generic Functions */
#include "H5Eprivate.h" /* Error handling */
#include "H5Iprivate.h" /* IDs */
#include "H5MMprivate.h" /* Memory management */
#include "H5Opkg.h" /* Object headers */
#include "H5Ppkg.h" /* Property lists */
@ -48,12 +49,20 @@
/* ========= Object Creation properties ============ */
/* Definitions for the max. # of attributes to store compactly */
#define H5O_CRT_ATTR_MAX_COMPACT_SIZE sizeof(unsigned)
#define H5O_CRT_ATTR_MAX_COMPACT_ENC H5P__encode_unsigned
#define H5O_CRT_ATTR_MAX_COMPACT_DEC H5P__decode_unsigned
/* Definitions for the min. # of attributes to store densely */
#define H5O_CRT_ATTR_MIN_DENSE_SIZE sizeof(unsigned)
#define H5O_CRT_ATTR_MIN_DENSE_ENC H5P__encode_unsigned
#define H5O_CRT_ATTR_MIN_DENSE_DEC H5P__decode_unsigned
/* Definitions for object header flags */
#define H5O_CRT_OHDR_FLAGS_SIZE sizeof(uint8_t)
#define H5O_CRT_OHDR_FLAGS_ENC H5P__encode_uint8_t
#define H5O_CRT_OHDR_FLAGS_DEC H5P__decode_uint8_t
/* Definitions for filter pipeline */
#define H5O_CRT_PIPELINE_SIZE sizeof(H5O_pline_t)
#define H5O_CRT_PIPELINE_ENC H5P__ocrt_pipeline_enc
#define H5O_CRT_PIPELINE_DEC H5P__ocrt_pipeline_dec
#define H5O_CRT_PIPELINE_CMP H5P__ocrt_pipeline_cmp
@ -77,6 +86,8 @@ static herr_t H5P__ocrt_copy(hid_t new_plist_t, hid_t old_plist_t, void *copy_da
static herr_t H5P__ocrt_close(hid_t dxpl_id, void *close_data);
/* Property callbacks */
static herr_t H5P__ocrt_pipeline_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__ocrt_pipeline_dec(const uint8_t **pp, void *value);
static int H5P__ocrt_pipeline_cmp(const void *value1, const void *value2, size_t size);
@ -111,6 +122,12 @@ const H5P_libclass_t H5P_CLS_OCRT[1] = {{
/* Local Variables */
/*******************/
/* Property value defaults */
static const unsigned H5O_def_attr_max_compact_g = H5O_CRT_ATTR_MAX_COMPACT_DEF; /* Default max. compact attribute storage settings */
static const unsigned H5O_def_attr_min_dense_g = H5O_CRT_ATTR_MIN_DENSE_DEF; /* Default min. dense attribute storage settings */
static const uint8_t H5O_def_ohdr_flags_g = H5O_CRT_OHDR_FLAGS_DEF; /* Default object header flag settings */
static const H5O_pline_t H5O_def_pline_g = H5O_CRT_PIPELINE_DEF; /* Default I/O pipeline setting */
/*-------------------------------------------------------------------------
@ -128,28 +145,32 @@ const H5P_libclass_t H5P_CLS_OCRT[1] = {{
static herr_t
H5P__ocrt_reg_prop(H5P_genclass_t *pclass)
{
unsigned attr_max_compact = H5O_CRT_ATTR_MAX_COMPACT_DEF; /* Default max. compact attribute storage settings */
unsigned attr_min_dense = H5O_CRT_ATTR_MIN_DENSE_DEF; /* Default min. dense attribute storage settings */
uint8_t ohdr_flags = H5O_CRT_OHDR_FLAGS_DEF; /* Default object header flag settings */
H5O_pline_t pline = H5O_CRT_PIPELINE_DEF; /* Default I/O pipeline setting */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Register max. compact attribute storage property */
if(H5P_register_real(pclass, H5O_CRT_ATTR_MAX_COMPACT_NAME, H5O_CRT_ATTR_MAX_COMPACT_SIZE, &attr_max_compact, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5O_CRT_ATTR_MAX_COMPACT_NAME, H5O_CRT_ATTR_MAX_COMPACT_SIZE, &H5O_def_attr_max_compact_g,
NULL, NULL, NULL, H5O_CRT_ATTR_MAX_COMPACT_ENC, H5O_CRT_ATTR_MAX_COMPACT_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register min. dense attribute storage property */
if(H5P_register_real(pclass, H5O_CRT_ATTR_MIN_DENSE_NAME, H5O_CRT_ATTR_MIN_DENSE_SIZE, &attr_min_dense, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5O_CRT_ATTR_MIN_DENSE_NAME, H5O_CRT_ATTR_MIN_DENSE_SIZE, &H5O_def_attr_min_dense_g,
NULL, NULL, NULL, H5O_CRT_ATTR_MIN_DENSE_ENC, H5O_CRT_ATTR_MIN_DENSE_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register object header flags property */
if(H5P_register_real(pclass, H5O_CRT_OHDR_FLAGS_NAME, H5O_CRT_OHDR_FLAGS_SIZE, &ohdr_flags, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5O_CRT_OHDR_FLAGS_NAME, H5O_CRT_OHDR_FLAGS_SIZE, &H5O_def_ohdr_flags_g,
NULL, NULL, NULL, H5O_CRT_OHDR_FLAGS_ENC, H5O_CRT_OHDR_FLAGS_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the pipeline property */
if(H5P_register_real(pclass, H5O_CRT_PIPELINE_NAME, H5O_CRT_PIPELINE_SIZE, &pline, NULL, NULL, NULL, NULL, NULL, H5O_CRT_PIPELINE_CMP, NULL) < 0)
if(H5P_register_real(pclass, H5O_CRT_PIPELINE_NAME, H5O_CRT_PIPELINE_SIZE, &H5O_def_pline_g,
NULL, NULL, NULL, H5O_CRT_PIPELINE_ENC, H5O_CRT_PIPELINE_DEC,
NULL, NULL, H5O_CRT_PIPELINE_CMP, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
done:
@ -1328,6 +1349,186 @@ H5P_get_filter(const H5Z_filter_info_t *filter, unsigned int *flags/*out*/,
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P_get_filter() */
/*-------------------------------------------------------------------------
* Function: H5P__ocrt_pipeline_enc
*
* Purpose: Callback routine which is called whenever the pipeline
* property in the dataset access property list is
* decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* Monday, October 10, 2011
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__ocrt_pipeline_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5O_pline_t *pline = (const H5O_pline_t *)value;
size_t u; /* Local index variable */
FUNC_ENTER_STATIC_NOERR
HDassert(pline);
HDassert(size);
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
if(NULL != *pp) {
unsigned enc_size;
uint64_t enc_value;
/* Encode size of unsigned */
*(*pp)++ = (uint8_t)sizeof(unsigned);
/* encode nused value */
enc_value = (uint64_t)pline->nused;
enc_size = H5V_limit_enc_size(enc_value);
HDassert(enc_size < 256);
*(*pp)++ = (uint8_t)enc_size;
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
/* encode each pipeline */
for(u = 0; u < pline->nused; u++) {
unsigned v; /* Local index variable */
/* encode filter ID */
INT32ENCODE(*pp, pline->filter[u].id)
/* encode filter flags */
H5_ENCODE_UNSIGNED(*pp, pline->filter[u].flags)
/* encode filter name if it exists */
if(NULL != pline->filter[u].name) {
/* encode TRUE indicating that it exits */
*(*pp)++ = (uint8_t)TRUE;
/* encode filter name */
HDmemcpy(*pp, (uint8_t *)(pline->filter[u].name), H5Z_COMMON_NAME_LEN);
*pp += H5Z_COMMON_NAME_LEN;
} /* end if */
else
/* encode FALSE indicating that it does not exist */
*(*pp)++ = (uint8_t)FALSE;
/* encode cd_nelmts */
enc_value = (uint64_t)pline->filter[u].cd_nelmts;
enc_size = H5V_limit_enc_size(enc_value);
HDassert(enc_size < 256);
*(*pp)++ = (uint8_t)enc_size;
UINT64ENCODE_VAR(*pp, enc_value, enc_size);
/* encode all values */
for(v = 0; v < pline->filter[u].cd_nelmts; v++)
H5_ENCODE_UNSIGNED(*pp, pline->filter[u].cd_values[v])
} /* end for */
} /* end if */
/* calculate size required for encoding */
*size += 1;
*size += (1 + H5V_limit_enc_size((uint64_t)pline->nused));
for(u = 0; u < pline->nused; u++) {
*size += (sizeof(int32_t) + sizeof(unsigned) + 1);
if(NULL != pline->filter[u].name)
*size += H5Z_COMMON_NAME_LEN;
*size += (1 + H5V_limit_enc_size((uint64_t)pline->filter[u].cd_nelmts));
*size += pline->filter[u].cd_nelmts * sizeof(unsigned);
} /* end for */
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__ocrt_pipeline_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__ocrt_pipeline_dec
*
* Purpose: Callback routine which is called whenever the pipeline
* property in the dataset access property list is
* decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Mohamad Chaarawi
* Monday, October 10, 2011
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__ocrt_pipeline_dec(const uint8_t **pp, void *_value)
{
H5O_pline_t *pline = (H5O_pline_t *)_value; /* Property to set */
size_t nused; /* Number of filters used for pipeline */
unsigned enc_size; /* Size of encoded value (in bytes) */
uint64_t enc_value; /* Value to encode */
size_t u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
/* Decode the size of size_t */
enc_size = *(*pp)++;
if(enc_size != sizeof(unsigned))
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "unsigned value can't be decoded")
/* decode nused */
enc_size = *(*pp)++;
HDassert(enc_size < 256);
UINT64DECODE_VAR(*pp, enc_value, enc_size);
nused = (size_t)enc_value;
/* Set property default value */
*pline = H5O_def_pline_g;
for(u = 0; u < nused; u++) {
H5Z_filter_info_t filter; /* Filter info, for pipeline */
uint8_t has_name; /* Flag to indicate whether filter has a name */
unsigned v; /* Local index variable */
/* decode filter id */
INT32DECODE(*pp, filter.id)
/* decode filter flags */
H5_DECODE_UNSIGNED(*pp, filter.flags)
/* decode value indicating if the name is encoded */
has_name = *(*pp)++;
if(has_name) {
/* decode name */
filter.name = H5MM_xstrdup((const char *)(*pp));
*pp += H5Z_COMMON_NAME_LEN;
} /* end if */
else
filter.name = NULL;
/* decode num elements */
enc_size = *(*pp)++;
HDassert(enc_size < 256);
UINT64DECODE_VAR(*pp, enc_value, enc_size);
filter.cd_nelmts = (size_t)enc_value;
if(filter.cd_nelmts)
if(NULL == (filter.cd_values = (unsigned *)H5MM_malloc(sizeof(unsigned) * filter.cd_nelmts)))
HGOTO_ERROR(H5E_PLIST, H5E_CANTALLOC, FAIL, "memory allocation failed for cd_values")
/* decode values */
for(v = 0; v < filter.cd_nelmts; v++)
H5_DECODE_UNSIGNED(*pp, filter.cd_values[v])
/* Add the filter to the I/O pipeline */
if(H5Z_append(pline, filter.id, filter.flags, filter.cd_nelmts, filter.cd_values) < 0)
HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, FAIL, "unable to add filter to pipeline")
} /* end for */
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5P__ocrt_pipeline_dec() */
/*-------------------------------------------------------------------------
* Function: H5P__ocrt_pipeline_cmp

View File

@ -49,9 +49,13 @@
/* Definitions for copy options */
#define H5O_CPY_OPTION_SIZE sizeof(unsigned)
#define H5O_CPY_OPTION_DEF 0
#define H5O_CPY_OPTION_ENC H5P__encode_unsigned
#define H5O_CPY_OPTION_DEC H5P__decode_unsigned
/* Definitions for merge committed dtype list */
#define H5O_CPY_MERGE_COMM_DT_LIST_SIZE sizeof(char *)
#define H5O_CPY_MERGE_COMM_DT_LIST_DEF NULL
#define H5O_CPY_MERGE_COMM_DT_LIST_ENC H5P__ocpy_merge_comm_dt_list_enc
#define H5O_CPY_MERGE_COMM_DT_LIST_DEC H5P__ocpy_merge_comm_dt_list_dec
#define H5O_CPY_MERGE_COMM_DT_LIST_COPY H5P__ocpy_merge_comm_dt_list_copy
#define H5O_CPY_MERGE_COMM_DT_LIST_CMP H5P__ocpy_merge_comm_dt_list_cmp
#define H5O_CPY_MERGE_COMM_DT_LIST_CLOSE H5P__ocpy_merge_comm_dt_list_close
@ -81,6 +85,8 @@ static H5O_copy_dtype_merge_list_t *H5P__free_merge_comm_dtype_list(H5O_copy_dty
static herr_t H5P__ocpy_reg_prop(H5P_genclass_t *pclass);
/* Property callbacks */
static herr_t H5P__ocpy_merge_comm_dt_list_enc(const void *value, uint8_t **pp, size_t *size);
static herr_t H5P__ocpy_merge_comm_dt_list_dec(const uint8_t **pp, void *value);
static herr_t H5P__ocpy_merge_comm_dt_list_copy(const char* name, size_t size, void* value);
static int H5P__ocpy_merge_comm_dt_list_cmp(const void *value1, const void *value2, size_t size);
static herr_t H5P__ocpy_merge_comm_dt_list_close(const char* name, size_t size, void* value);
@ -116,6 +122,11 @@ const H5P_libclass_t H5P_CLS_OCPY[1] = {{
/* Local Variables */
/*******************/
/* Property value defaults */
static const unsigned H5O_def_ocpy_option_g = H5O_CPY_OPTION_DEF; /* Default object copy flags */
static const H5O_copy_dtype_merge_list_t *H5O_def_merge_comm_dtype_list_g = H5O_CPY_MERGE_COMM_DT_LIST_DEF; /* Default merge committed dtype list */
static const H5O_mcdt_cb_info_t H5O_def_mcdt_cb_g = H5O_CPY_MCDT_SEARCH_CB_DEF; /* Default callback before searching the global list of committed datatypes at destination */
/* Declare a free list to manage the H5O_copy_dtype_merge_list_t struct */
H5FL_DEFINE(H5O_copy_dtype_merge_list_t);
@ -135,23 +146,26 @@ H5FL_DEFINE(H5O_copy_dtype_merge_list_t);
static herr_t
H5P__ocpy_reg_prop(H5P_genclass_t *pclass)
{
unsigned ocpy_option = H5O_CPY_OPTION_DEF; /* Default object copy flags */
H5O_copy_dtype_merge_list_t *merge_comm_dtype_list = H5O_CPY_MERGE_COMM_DT_LIST_DEF; /* Default merge committed dtype list */
H5O_mcdt_cb_info_t mcdt_cb = H5O_CPY_MCDT_SEARCH_CB_DEF; /* Default callback before searching the global list of committed datatypes at destination */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Register copy options property */
if(H5P_register_real(pclass, H5O_CPY_OPTION_NAME, H5O_CPY_OPTION_SIZE, &ocpy_option, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5O_CPY_OPTION_NAME, H5O_CPY_OPTION_SIZE, &H5O_def_ocpy_option_g,
NULL, NULL, NULL, H5O_CPY_OPTION_ENC, H5O_CPY_OPTION_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register merge named dtype list property */
if(H5P_register_real(pclass, H5O_CPY_MERGE_COMM_DT_LIST_NAME, H5O_CPY_MERGE_COMM_DT_LIST_SIZE, &merge_comm_dtype_list, NULL, NULL, NULL, NULL, H5O_CPY_MERGE_COMM_DT_LIST_COPY, H5O_CPY_MERGE_COMM_DT_LIST_CMP, H5O_CPY_MERGE_COMM_DT_LIST_CLOSE) < 0)
if(H5P_register_real(pclass, H5O_CPY_MERGE_COMM_DT_LIST_NAME, H5O_CPY_MERGE_COMM_DT_LIST_SIZE, &H5O_def_merge_comm_dtype_list_g,
NULL, NULL, NULL, H5O_CPY_MERGE_COMM_DT_LIST_ENC, H5O_CPY_MERGE_COMM_DT_LIST_DEC,
NULL, H5O_CPY_MERGE_COMM_DT_LIST_COPY, H5O_CPY_MERGE_COMM_DT_LIST_CMP, H5O_CPY_MERGE_COMM_DT_LIST_CLOSE) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register property for callback when completing the search for a matching named datatype from the named dtype list */
if(H5P_register_real(pclass, H5O_CPY_MCDT_SEARCH_CB_NAME, H5O_CPY_MCDT_SEARCH_CB_SIZE, &mcdt_cb, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
/* (Note: this property should not have an encode/decode callback -QAK) */
if(H5P_register_real(pclass, H5O_CPY_MCDT_SEARCH_CB_NAME, H5O_CPY_MCDT_SEARCH_CB_SIZE, &H5O_def_mcdt_cb_g,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
done:
@ -188,6 +202,135 @@ H5P__free_merge_comm_dtype_list(H5O_copy_dtype_merge_list_t *dt_list)
FUNC_LEAVE_NOAPI(NULL);
} /* H5P__free_merge_comm_dtype_list */
/*-------------------------------------------------------------------------
* Function: H5P__ocpy_merge_comm_dt_list_enc
*
* Purpose: Callback routine which is called whenever the common
* datatype property in the object copy property list is
* decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 31, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__ocpy_merge_comm_dt_list_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5O_copy_dtype_merge_list_t * const *dt_list_ptr = (const H5O_copy_dtype_merge_list_t * const *)value;
const H5O_copy_dtype_merge_list_t *dt_list; /* Pointer to merge named datatype list */
size_t len; /* Length of path component */
FUNC_ENTER_STATIC_NOERR
HDassert(dt_list_ptr);
HDassert(size);
/* Iterate over merge committed dtype list */
dt_list = *dt_list_ptr;
while(dt_list) {
/* Get length of encoded path */
len = HDstrlen(dt_list->path) + 1;
/* Encode merge committed dtype list */
if(*pp) {
HDmemcpy(*(char **)pp, dt_list->path, len);
*pp += len;
} /* end if */
/* Increment the size of the buffer */
*size += len;
/* Advance to the next node */
dt_list = dt_list->next;
} /* end while */
/* Encode the terminator for the string sequence */
if(*pp)
*(*pp)++ = (uint8_t)'\0';
/* Account for the string sequence terminator */
*size += 1;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__ocpy_merge_comm_dt_list_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__ocpy_merge_comm_dt_list_dec
*
* Purpose: Callback routine which is called whenever the common
* datatype property in the dataset access property list is
* decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 31, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__ocpy_merge_comm_dt_list_dec(const uint8_t **pp, void *_value)
{
H5O_copy_dtype_merge_list_t **dt_list = (H5O_copy_dtype_merge_list_t **)_value; /* Pointer to merge named datatype list */
H5O_copy_dtype_merge_list_t *dt_list_tail = NULL, *tmp_dt_list = NULL; /* temporary merge named datatype lists */
size_t len; /* Length of path component */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Sanity check */
HDassert(pp);
HDassert(*pp);
HDassert(dt_list);
/* Decode the string sequence */
len = HDstrlen(*(const char **)pp);
while(len > 0) {
/* Create new node & duplicate string */
if(NULL == (tmp_dt_list = H5FL_CALLOC(H5O_copy_dtype_merge_list_t)))
HGOTO_ERROR(H5E_PLIST, H5E_CANTALLOC, FAIL, "memory allocation failed")
if(NULL == (tmp_dt_list->path = H5MM_strdup(*(const char **)pp)))
HGOTO_ERROR(H5E_PLIST, H5E_CANTALLOC, FAIL, "memory allocation failed")
*pp += len + 1;
HDassert(len == HDstrlen(tmp_dt_list->path));
/* Add copied node to dtype list */
if(dt_list_tail) {
dt_list_tail->next = tmp_dt_list;
dt_list_tail = tmp_dt_list;
} /* end if */
else {
*dt_list = tmp_dt_list;
dt_list_tail = tmp_dt_list;
} /* end else */
tmp_dt_list = NULL;
/* Compute length of next string */
len = HDstrlen(*(const char **)pp);
} /* end while */
/* Advance past terminator for string sequence */
*pp += 1;
done:
if(ret_value < 0) {
*dt_list = H5P__free_merge_comm_dtype_list(*dt_list);
if(tmp_dt_list) {
tmp_dt_list->path = (char *)H5MM_xfree(tmp_dt_list->path);
tmp_dt_list = H5FL_FREE(H5O_copy_dtype_merge_list_t, tmp_dt_list);
} /* end if */
} /* end if */
FUNC_LEAVE_NOAPI(ret_value)
} /* H5P__ocpy_merge_comm_dt_list_dec() */
/*--------------------------------------------------------------------------
* Function: H5P__ocpy_merge_comm_dt_list_copy

View File

@ -75,6 +75,8 @@ typedef struct H5P_genprop_t {
H5P_prp_create_func_t create; /* Function to call when a property is created */
H5P_prp_set_func_t set; /* Function to call when a property value is set */
H5P_prp_get_func_t get; /* Function to call when a property value is retrieved */
H5P_prp_encode_func_t encode; /* Function to call when a property is encoded */
H5P_prp_decode_func_t decode; /* Function to call when a property is decoded */
H5P_prp_delete_func_t del; /* Function to call when a property is deleted */
H5P_prp_copy_func_t copy; /* Function to call when a property is copied */
H5P_prp_compare_func_t cmp; /* Function to call when a property is compared */
@ -159,13 +161,17 @@ H5_DLL H5P_genclass_t *H5P_create_class(H5P_genclass_t *par_class,
H5P_cls_close_func_t cls_close, void *close_data);
H5_DLL H5P_genclass_t *H5P_copy_pclass(H5P_genclass_t *pclass);
H5_DLL herr_t H5P_register_real(H5P_genclass_t *pclass, const char *name, size_t size,
const void *def_value, H5P_prp_create_func_t prp_create, H5P_prp_set_func_t prp_set,
H5P_prp_get_func_t prp_get, H5P_prp_delete_func_t prp_delete,
const void *def_value, H5P_prp_create_func_t prp_create,
H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
H5P_prp_encode_func_t prp_encode, H5P_prp_decode_func_t prp_decode,
H5P_prp_delete_func_t prp_delete,
H5P_prp_copy_func_t prp_copy, H5P_prp_compare_func_t prp_cmp,
H5P_prp_close_func_t prp_close);
H5_DLL herr_t H5P_register(H5P_genclass_t **pclass, const char *name, size_t size,
const void *def_value, H5P_prp_create_func_t prp_create, H5P_prp_set_func_t prp_set,
H5P_prp_get_func_t prp_get, H5P_prp_delete_func_t prp_delete,
const void *def_value, H5P_prp_create_func_t prp_create,
H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
H5P_prp_encode_func_t prp_encode, H5P_prp_decode_func_t prp_decode,
H5P_prp_delete_func_t prp_delete,
H5P_prp_copy_func_t prp_copy, H5P_prp_compare_func_t prp_cmp,
H5P_prp_close_func_t prp_close);
H5_DLL herr_t H5P_add_prop(H5SL_t *props, H5P_genprop_t *prop);
@ -195,6 +201,24 @@ H5_DLL herr_t H5P_get_filter(const H5Z_filter_info_t *filter,
unsigned int *flags, size_t *cd_nelmts, unsigned cd_values[],
size_t namelen, char name[], unsigned *filter_config);
H5_DLL H5P_genprop_t *H5P__find_prop_plist(const H5P_genplist_t *plist, const char *name);
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);
H5_DLL hid_t H5P__decode(const void *buf);
H5_DLL herr_t H5P__encode_hsize_t(const void *value, uint8_t **pp, size_t *size);
H5_DLL herr_t H5P__encode_size_t(const void *value, uint8_t **pp, size_t *size);
H5_DLL herr_t H5P__encode_unsigned(const void *value, uint8_t **pp, size_t *size);
H5_DLL herr_t H5P__encode_uint8_t(const void *value, uint8_t **pp, size_t *size);
H5_DLL herr_t H5P__encode_hbool_t(const void *value, uint8_t **pp, size_t *size);
H5_DLL herr_t H5P__encode_double(const void *value, uint8_t **pp, size_t *size);
H5_DLL herr_t H5P__decode_hsize_t(const uint8_t **pp, void *value);
H5_DLL herr_t H5P__decode_size_t(const uint8_t **pp, void *value);
H5_DLL herr_t H5P__decode_unsigned(const uint8_t **pp, void *value);
H5_DLL herr_t H5P__decode_uint8_t(const uint8_t **pp, void *value);
H5_DLL herr_t H5P__decode_hbool_t(const uint8_t **pp, void *value);
H5_DLL herr_t H5P__decode_double(const uint8_t **pp, void *value);
/* Testing functions */
#ifdef H5P_TESTING

View File

@ -84,6 +84,7 @@ H5_DLL herr_t H5P_get(const H5P_genplist_t *plist, const char *name, void *value
H5_DLL herr_t H5P_set(H5P_genplist_t *plist, const char *name, const void *value);
H5_DLL herr_t H5P_insert(H5P_genplist_t *plist, const char *name, size_t size,
void *value, H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
H5P_prp_encode_func_t prp_encode, H5P_prp_decode_func_t prp_decode,
H5P_prp_delete_func_t prp_delete, H5P_prp_copy_func_t prp_copy,
H5P_prp_compare_func_t prp_cmp, H5P_prp_close_func_t prp_close);
H5_DLL herr_t H5P_remove(hid_t plist_id, H5P_genplist_t *plist, const char *name);

View File

@ -113,6 +113,8 @@ 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, uint8_t **buf, size_t *size);
typedef herr_t (*H5P_prp_decode_func_t)(const uint8_t **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);
@ -229,6 +231,8 @@ H5_DLL herr_t H5Pinsert2(hid_t plist_id, const char *name, size_t size,
H5P_prp_compare_func_t prp_cmp, H5P_prp_close_func_t prp_close);
H5_DLL herr_t H5Pset(hid_t plist_id, const char *name, void *value);
H5_DLL htri_t H5Pexist(hid_t plist_id, const char *name);
H5_DLL herr_t H5Pencode(hid_t plist_id, void *buf, size_t *nalloc);
H5_DLL hid_t H5Pdecode(const void *buf);
H5_DLL herr_t H5Pget_size(hid_t id, const char *name, size_t *size);
H5_DLL herr_t H5Pget_nprops(hid_t id, size_t *nprops);
H5_DLL hid_t H5Pget_class(hid_t plist_id);

View File

@ -46,6 +46,8 @@
/* Definitions for character set encoding property */
#define H5P_STRCRT_CHAR_ENCODING_SIZE sizeof(H5T_cset_t)
#define H5P_STRCRT_CHAR_ENCODING_DEF H5F_DEFAULT_CSET
#define H5P_STRCRT_CHAR_ENCODING_ENC H5P__strcrt_char_encoding_enc
#define H5P_STRCRT_CHAR_ENCODING_DEC H5P__strcrt_char_encoding_dec
/******************/
@ -65,6 +67,10 @@
/* Property class callbacks */
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, uint8_t **pp, size_t *size);
static herr_t H5P__strcrt_char_encoding_dec(const uint8_t **pp, void *value);
/*********************/
/* Package Variables */
@ -96,6 +102,9 @@ const H5P_libclass_t H5P_CLS_STRCRT[1] = {{
/* Local Variables */
/*******************/
/* Property value defaults */
static const H5T_cset_t H5P_def_char_encoding_g = H5P_STRCRT_CHAR_ENCODING_DEF; /* Default character set encoding */
/*-------------------------------------------------------------------------
@ -112,13 +121,14 @@ const H5P_libclass_t H5P_CLS_STRCRT[1] = {{
static herr_t
H5P__strcrt_reg_prop(H5P_genclass_t *pclass)
{
H5T_cset_t char_encoding = H5P_STRCRT_CHAR_ENCODING_DEF; /* Default character set encoding */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Register character encoding */
if(H5P_register_real(pclass, H5P_STRCRT_CHAR_ENCODING_NAME, H5P_STRCRT_CHAR_ENCODING_SIZE, &char_encoding, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
if(H5P_register_real(pclass, H5P_STRCRT_CHAR_ENCODING_NAME, H5P_STRCRT_CHAR_ENCODING_SIZE, &H5P_def_char_encoding_g,
NULL, NULL, NULL, H5P_STRCRT_CHAR_ENCODING_ENC, H5P_STRCRT_CHAR_ENCODING_DEC,
NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
done:
@ -196,3 +206,74 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Pget_char_encoding() */
/*-------------------------------------------------------------------------
* Function: H5P__strcrt_char_encoding_enc
*
* Purpose: Callback routine which is called whenever the character
* set encoding property in the string create property list
* is encoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 31, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__strcrt_char_encoding_enc(const void *value, uint8_t **pp, size_t *size)
{
const H5T_cset_t *encoding = (const H5T_cset_t *)value; /* Create local alias for values */
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(encoding);
HDassert(size);
if(NULL != *pp)
/* Encode character set encoding */
*(*pp)++ = (uint8_t)*encoding;
/* Size of character set encoding */
(*size)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__strcrt_char_encoding_enc() */
/*-------------------------------------------------------------------------
* Function: H5P__strcrt_char_encoding_dec
*
* Purpose: Callback routine which is called whenever the character
* set encoding property in the string create property list
* is decoded.
*
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* Friday, August 31, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
H5P__strcrt_char_encoding_dec(const uint8_t **pp, void *_value)
{
H5T_cset_t *encoding = (H5T_cset_t *)_value; /* Character set encoding */
FUNC_ENTER_STATIC_NOERR
/* Sanity checks */
HDassert(pp);
HDassert(*pp);
HDassert(encoding);
/* Decode character set encoding */
*encoding = (H5T_cset_t)*(*pp)++;
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__strcrt_char_encoding_dec() */

View File

@ -292,8 +292,6 @@ static herr_t H5T_unregister(H5T_pers_t pers, const char *name, H5T_t *src,
static herr_t H5T_register(H5T_pers_t pers, const char *name, H5T_t *src,
H5T_t *dst, H5T_conv_t func, hid_t dxpl_id, hbool_t api_call);
static htri_t H5T_compiler_conv(H5T_t *src, H5T_t *dst);
static herr_t H5T_encode(H5T_t *obj, unsigned char *buf, size_t *nalloc);
static H5T_t *H5T_decode(const unsigned char *buf);
static herr_t H5T_set_size(H5T_t *dt, size_t size);
@ -2897,7 +2895,7 @@ done:
*
*-------------------------------------------------------------------------
*/
static herr_t
herr_t
H5T_encode(H5T_t *obj, unsigned char *buf, size_t *nalloc)
{
size_t buf_size; /* Encoded size of datatype */
@ -2954,7 +2952,7 @@ done:
*
*-------------------------------------------------------------------------
*/
static H5T_t *
H5T_t *
H5T_decode(const unsigned char *buf)
{
H5F_t *f = NULL; /* Fake file structure*/

View File

@ -114,6 +114,8 @@ H5_DLL H5T_class_t H5T_get_class(const H5T_t *dt, htri_t internal);
H5_DLL htri_t H5T_detect_class(const H5T_t *dt, H5T_class_t cls, hbool_t from_api);
H5_DLL size_t H5T_get_size(const H5T_t *dt);
H5_DLL int H5T_cmp(const H5T_t *dt1, const H5T_t *dt2, hbool_t superset);
H5_DLL herr_t H5T_encode(H5T_t *obj, unsigned char *buf, size_t *nalloc);
H5_DLL H5T_t *H5T_decode(const unsigned char *buf);
H5_DLL herr_t H5T_debug(const H5T_t *dt, FILE * stream);
H5_DLL struct H5O_loc_t *H5T_oloc(H5T_t *dt);
H5_DLL H5G_name_t *H5T_nameof(H5T_t *dt);

View File

@ -86,7 +86,8 @@ libhdf5_la_SOURCES= H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
H5Osdspace.c H5Oshared.c H5Ostab.c \
H5Oshmesg.c H5Otest.c H5Ounknown.c \
H5P.c H5Pacpl.c H5Pdapl.c H5Pdcpl.c \
H5Pdeprec.c H5Pdxpl.c H5Pfapl.c H5Pfcpl.c H5Pfmpl.c \
H5Pdeprec.c H5Pdxpl.c H5Pencdec.c \
H5Pfapl.c H5Pfcpl.c H5Pfmpl.c \
H5Pgcpl.c H5Pint.c \
H5Plapl.c H5Plcpl.c H5Pocpl.c H5Pocpypl.c H5Pstrcpl.c H5Ptest.c \
H5R.c H5Rdeprec.c \

View File

@ -157,20 +157,21 @@ am_libhdf5_la_OBJECTS = H5.lo H5checksum.lo H5dbg.lo H5system.lo \
H5Omessage.lo H5Omtime.lo H5Oname.lo H5Onull.lo H5Opline.lo \
H5Orefcount.lo H5Osdspace.lo H5Oshared.lo H5Ostab.lo \
H5Oshmesg.lo H5Otest.lo H5Ounknown.lo H5P.lo H5Pacpl.lo \
H5Pdapl.lo H5Pdcpl.lo H5Pdeprec.lo H5Pdxpl.lo H5Pfapl.lo \
H5Pfcpl.lo H5Pfmpl.lo H5Pgcpl.lo H5Pint.lo H5Plapl.lo \
H5Plcpl.lo H5Pocpl.lo H5Pocpypl.lo H5Pstrcpl.lo H5Ptest.lo \
H5R.lo H5Rdeprec.lo H5RC.lo H5RS.lo H5S.lo H5Sall.lo H5Sdbg.lo \
H5Shyper.lo H5Smpio.lo H5Snone.lo H5Spoint.lo H5Sselect.lo \
H5Stest.lo H5SL.lo H5SM.lo H5SMbtree2.lo H5SMcache.lo \
H5SMmessage.lo H5SMtest.lo H5ST.lo H5T.lo H5Tarray.lo \
H5Tbit.lo H5Tcommit.lo H5Tcompound.lo H5Tconv.lo H5Tcset.lo \
H5Tdbg.lo H5Tdeprec.lo H5Tenum.lo H5Tfields.lo H5Tfixed.lo \
H5Tfloat.lo H5Tinit.lo H5Tnative.lo H5Toffset.lo H5Toh.lo \
H5Topaque.lo H5Torder.lo H5Tpad.lo H5Tprecis.lo H5Tstrpad.lo \
H5Tvisit.lo H5Tvlen.lo H5TS.lo H5V.lo H5WB.lo H5Z.lo \
H5Zdeflate.lo H5Zfletcher32.lo H5Znbit.lo H5Zshuffle.lo \
H5Zszip.lo H5Zscaleoffset.lo H5Ztrans.lo
H5Pdapl.lo H5Pdcpl.lo H5Pdeprec.lo H5Pdxpl.lo H5Pencdec.lo \
H5Pfapl.lo H5Pfcpl.lo H5Pfmpl.lo H5Pgcpl.lo H5Pint.lo \
H5Plapl.lo H5Plcpl.lo H5Pocpl.lo H5Pocpypl.lo H5Pstrcpl.lo \
H5Ptest.lo H5R.lo H5Rdeprec.lo H5RC.lo H5RS.lo H5S.lo \
H5Sall.lo H5Sdbg.lo H5Shyper.lo H5Smpio.lo H5Snone.lo \
H5Spoint.lo H5Sselect.lo H5Stest.lo H5SL.lo H5SM.lo \
H5SMbtree2.lo H5SMcache.lo H5SMmessage.lo H5SMtest.lo H5ST.lo \
H5T.lo H5Tarray.lo H5Tbit.lo H5Tcommit.lo H5Tcompound.lo \
H5Tconv.lo H5Tcset.lo H5Tdbg.lo H5Tdeprec.lo H5Tenum.lo \
H5Tfields.lo H5Tfixed.lo H5Tfloat.lo H5Tinit.lo H5Tnative.lo \
H5Toffset.lo H5Toh.lo H5Topaque.lo H5Torder.lo H5Tpad.lo \
H5Tprecis.lo H5Tstrpad.lo H5Tvisit.lo H5Tvlen.lo H5TS.lo \
H5V.lo H5WB.lo H5Z.lo H5Zdeflate.lo H5Zfletcher32.lo \
H5Znbit.lo H5Zshuffle.lo H5Zszip.lo H5Zscaleoffset.lo \
H5Ztrans.lo
libhdf5_la_OBJECTS = $(am_libhdf5_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@ -582,7 +583,8 @@ libhdf5_la_SOURCES = H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
H5Osdspace.c H5Oshared.c H5Ostab.c \
H5Oshmesg.c H5Otest.c H5Ounknown.c \
H5P.c H5Pacpl.c H5Pdapl.c H5Pdcpl.c \
H5Pdeprec.c H5Pdxpl.c H5Pfapl.c H5Pfcpl.c H5Pfmpl.c \
H5Pdeprec.c H5Pdxpl.c H5Pencdec.c \
H5Pfapl.c H5Pfcpl.c H5Pfmpl.c \
H5Pgcpl.c H5Pint.c \
H5Plapl.c H5Plcpl.c H5Pocpl.c H5Pocpypl.c H5Pstrcpl.c H5Ptest.c \
H5R.c H5Rdeprec.c \
@ -938,6 +940,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Pdcpl.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Pdeprec.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Pdxpl.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Pencdec.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Pfapl.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Pfcpl.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Pfmpl.Plo@am__quote@

View File

@ -40,7 +40,7 @@ TEST_PROG= testhdf5 lheap ohdr stab gheap cache cache_api cache_tagging \
pool accum hyperslab istore bittests dt_arith \
dtypes dsets cmpd_dset filter_fail extend external efc objcopy links unlink \
big mtime fillval mount flush1 flush2 app_ref enum \
set_extent ttsafe \
set_extent ttsafe enc_dec_plist enc_dec_plist_with_endianess\
getname vfd ntypes dangle dtransform reserved cross_read \
freespace mf farray earray btree2 fheap file_image
@ -63,7 +63,7 @@ check_PROGRAMS=$(TEST_PROG) error_test err_compat tcheck_version testmeta links_
BUILD_ALL_PROGS=gen_bad_ohdr gen_bogus gen_cross gen_deflate gen_filters gen_new_array \
gen_new_fill gen_new_group gen_new_mtime gen_new_super gen_noencoder \
gen_nullspace gen_udlinks space_overflow gen_filespace gen_specmetaread \
gen_sizes_lheap gen_file_image
gen_sizes_lheap gen_file_image gen_plist
if BUILD_ALL_CONDITIONAL
noinst_PROGRAMS=$(BUILD_ALL_PROGS)

View File

@ -108,11 +108,12 @@ am__EXEEXT_1 = testhdf5$(EXEEXT) lheap$(EXEEXT) ohdr$(EXEEXT) \
unlink$(EXEEXT) big$(EXEEXT) mtime$(EXEEXT) fillval$(EXEEXT) \
mount$(EXEEXT) flush1$(EXEEXT) flush2$(EXEEXT) \
app_ref$(EXEEXT) enum$(EXEEXT) set_extent$(EXEEXT) \
ttsafe$(EXEEXT) getname$(EXEEXT) vfd$(EXEEXT) ntypes$(EXEEXT) \
dangle$(EXEEXT) dtransform$(EXEEXT) reserved$(EXEEXT) \
cross_read$(EXEEXT) freespace$(EXEEXT) mf$(EXEEXT) \
farray$(EXEEXT) earray$(EXEEXT) btree2$(EXEEXT) fheap$(EXEEXT) \
file_image$(EXEEXT)
ttsafe$(EXEEXT) enc_dec_plist$(EXEEXT) \
enc_dec_plist_with_endianess$(EXEEXT) getname$(EXEEXT) \
vfd$(EXEEXT) ntypes$(EXEEXT) dangle$(EXEEXT) \
dtransform$(EXEEXT) reserved$(EXEEXT) cross_read$(EXEEXT) \
freespace$(EXEEXT) mf$(EXEEXT) farray$(EXEEXT) earray$(EXEEXT) \
btree2$(EXEEXT) fheap$(EXEEXT) file_image$(EXEEXT)
am__EXEEXT_2 = gen_bad_ohdr$(EXEEXT) gen_bogus$(EXEEXT) \
gen_cross$(EXEEXT) gen_deflate$(EXEEXT) gen_filters$(EXEEXT) \
gen_new_array$(EXEEXT) gen_new_fill$(EXEEXT) \
@ -121,7 +122,7 @@ am__EXEEXT_2 = gen_bad_ohdr$(EXEEXT) gen_bogus$(EXEEXT) \
gen_nullspace$(EXEEXT) gen_udlinks$(EXEEXT) \
space_overflow$(EXEEXT) gen_filespace$(EXEEXT) \
gen_specmetaread$(EXEEXT) gen_sizes_lheap$(EXEEXT) \
gen_file_image$(EXEEXT)
gen_file_image$(EXEEXT) gen_plist$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
accum_SOURCES = accum.c
accum_OBJECTS = accum.$(OBJEXT)
@ -191,6 +192,15 @@ efc_SOURCES = efc.c
efc_OBJECTS = efc.$(OBJEXT)
efc_LDADD = $(LDADD)
efc_DEPENDENCIES = libh5test.la $(LIBHDF5)
enc_dec_plist_SOURCES = enc_dec_plist.c
enc_dec_plist_OBJECTS = enc_dec_plist.$(OBJEXT)
enc_dec_plist_LDADD = $(LDADD)
enc_dec_plist_DEPENDENCIES = libh5test.la $(LIBHDF5)
enc_dec_plist_with_endianess_SOURCES = enc_dec_plist_with_endianess.c
enc_dec_plist_with_endianess_OBJECTS = \
enc_dec_plist_with_endianess.$(OBJEXT)
enc_dec_plist_with_endianess_LDADD = $(LDADD)
enc_dec_plist_with_endianess_DEPENDENCIES = libh5test.la $(LIBHDF5)
enum_SOURCES = enum.c
enum_OBJECTS = enum.$(OBJEXT)
enum_LDADD = $(LDADD)
@ -299,6 +309,10 @@ gen_nullspace_SOURCES = gen_nullspace.c
gen_nullspace_OBJECTS = gen_nullspace.$(OBJEXT)
gen_nullspace_LDADD = $(LDADD)
gen_nullspace_DEPENDENCIES = libh5test.la $(LIBHDF5)
gen_plist_SOURCES = gen_plist.c
gen_plist_OBJECTS = gen_plist.$(OBJEXT)
gen_plist_LDADD = $(LDADD)
gen_plist_DEPENDENCIES = libh5test.la $(LIBHDF5)
gen_sizes_lheap_SOURCES = gen_sizes_lheap.c
gen_sizes_lheap_OBJECTS = gen_sizes_lheap.$(OBJEXT)
gen_sizes_lheap_LDADD = $(LDADD)
@ -454,28 +468,30 @@ am__v_CCLD_1 =
SOURCES = $(libh5test_la_SOURCES) accum.c app_ref.c big.c bittests.c \
btree2.c cache.c cache_api.c cache_tagging.c cmpd_dset.c \
cross_read.c dangle.c dsets.c dt_arith.c dtransform.c dtypes.c \
earray.c efc.c enum.c err_compat.c error_test.c extend.c \
external.c farray.c fheap.c file_image.c fillval.c \
filter_fail.c flush1.c flush2.c freespace.c gen_bad_ohdr.c \
gen_bogus.c gen_cross.c gen_deflate.c gen_file_image.c \
gen_filespace.c gen_filters.c gen_new_array.c gen_new_fill.c \
gen_new_group.c gen_new_mtime.c gen_new_super.c \
gen_noencoder.c gen_nullspace.c gen_sizes_lheap.c \
gen_specmetaread.c gen_udlinks.c getname.c gheap.c hyperslab.c \
istore.c lheap.c links.c links_env.c mf.c mount.c mtime.c \
ntypes.c objcopy.c ohdr.c pool.c reserved.c set_extent.c \
space_overflow.c stab.c tcheck_version.c $(testhdf5_SOURCES) \
testmeta.c $(ttsafe_SOURCES) unlink.c vfd.c
earray.c efc.c enc_dec_plist.c enc_dec_plist_with_endianess.c \
enum.c err_compat.c error_test.c extend.c external.c farray.c \
fheap.c file_image.c fillval.c filter_fail.c flush1.c flush2.c \
freespace.c gen_bad_ohdr.c gen_bogus.c gen_cross.c \
gen_deflate.c gen_file_image.c gen_filespace.c gen_filters.c \
gen_new_array.c gen_new_fill.c gen_new_group.c gen_new_mtime.c \
gen_new_super.c gen_noencoder.c gen_nullspace.c gen_plist.c \
gen_sizes_lheap.c gen_specmetaread.c gen_udlinks.c getname.c \
gheap.c hyperslab.c istore.c lheap.c links.c links_env.c mf.c \
mount.c mtime.c ntypes.c objcopy.c ohdr.c pool.c reserved.c \
set_extent.c space_overflow.c stab.c tcheck_version.c \
$(testhdf5_SOURCES) testmeta.c $(ttsafe_SOURCES) unlink.c \
vfd.c
DIST_SOURCES = $(libh5test_la_SOURCES) accum.c app_ref.c big.c \
bittests.c btree2.c cache.c cache_api.c cache_tagging.c \
cmpd_dset.c cross_read.c dangle.c dsets.c dt_arith.c \
dtransform.c dtypes.c earray.c efc.c enum.c err_compat.c \
dtransform.c dtypes.c earray.c efc.c enc_dec_plist.c \
enc_dec_plist_with_endianess.c enum.c err_compat.c \
error_test.c extend.c external.c farray.c fheap.c file_image.c \
fillval.c filter_fail.c flush1.c flush2.c freespace.c \
gen_bad_ohdr.c gen_bogus.c gen_cross.c gen_deflate.c \
gen_file_image.c gen_filespace.c gen_filters.c gen_new_array.c \
gen_new_fill.c gen_new_group.c gen_new_mtime.c gen_new_super.c \
gen_noencoder.c gen_nullspace.c gen_sizes_lheap.c \
gen_noencoder.c gen_nullspace.c gen_plist.c gen_sizes_lheap.c \
gen_specmetaread.c gen_udlinks.c getname.c gheap.c hyperslab.c \
istore.c lheap.c links.c links_env.c mf.c mount.c mtime.c \
ntypes.c objcopy.c ohdr.c pool.c reserved.c set_extent.c \
@ -820,7 +836,7 @@ TEST_PROG = testhdf5 lheap ohdr stab gheap cache cache_api cache_tagging \
pool accum hyperslab istore bittests dt_arith \
dtypes dsets cmpd_dset filter_fail extend external efc objcopy links unlink \
big mtime fillval mount flush1 flush2 app_ref enum \
set_extent ttsafe \
set_extent ttsafe enc_dec_plist enc_dec_plist_with_endianess\
getname vfd ntypes dangle dtransform reserved cross_read \
freespace mf farray earray btree2 fheap file_image
@ -835,7 +851,7 @@ TEST_PROG = testhdf5 lheap ohdr stab gheap cache cache_api cache_tagging \
BUILD_ALL_PROGS = gen_bad_ohdr gen_bogus gen_cross gen_deflate gen_filters gen_new_array \
gen_new_fill gen_new_group gen_new_mtime gen_new_super gen_noencoder \
gen_nullspace gen_udlinks space_overflow gen_filespace gen_specmetaread \
gen_sizes_lheap gen_file_image
gen_sizes_lheap gen_file_image gen_plist
# The libh5test library provides common support code for the tests.
@ -1008,6 +1024,12 @@ earray$(EXEEXT): $(earray_OBJECTS) $(earray_DEPENDENCIES) $(EXTRA_earray_DEPENDE
efc$(EXEEXT): $(efc_OBJECTS) $(efc_DEPENDENCIES) $(EXTRA_efc_DEPENDENCIES)
@rm -f efc$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(efc_OBJECTS) $(efc_LDADD) $(LIBS)
enc_dec_plist$(EXEEXT): $(enc_dec_plist_OBJECTS) $(enc_dec_plist_DEPENDENCIES) $(EXTRA_enc_dec_plist_DEPENDENCIES)
@rm -f enc_dec_plist$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(enc_dec_plist_OBJECTS) $(enc_dec_plist_LDADD) $(LIBS)
enc_dec_plist_with_endianess$(EXEEXT): $(enc_dec_plist_with_endianess_OBJECTS) $(enc_dec_plist_with_endianess_DEPENDENCIES) $(EXTRA_enc_dec_plist_with_endianess_DEPENDENCIES)
@rm -f enc_dec_plist_with_endianess$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(enc_dec_plist_with_endianess_OBJECTS) $(enc_dec_plist_with_endianess_LDADD) $(LIBS)
enum$(EXEEXT): $(enum_OBJECTS) $(enum_DEPENDENCIES) $(EXTRA_enum_DEPENDENCIES)
@rm -f enum$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(enum_OBJECTS) $(enum_LDADD) $(LIBS)
@ -1089,6 +1111,9 @@ gen_noencoder$(EXEEXT): $(gen_noencoder_OBJECTS) $(gen_noencoder_DEPENDENCIES) $
gen_nullspace$(EXEEXT): $(gen_nullspace_OBJECTS) $(gen_nullspace_DEPENDENCIES) $(EXTRA_gen_nullspace_DEPENDENCIES)
@rm -f gen_nullspace$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(gen_nullspace_OBJECTS) $(gen_nullspace_LDADD) $(LIBS)
gen_plist$(EXEEXT): $(gen_plist_OBJECTS) $(gen_plist_DEPENDENCIES) $(EXTRA_gen_plist_DEPENDENCIES)
@rm -f gen_plist$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(gen_plist_OBJECTS) $(gen_plist_LDADD) $(LIBS)
gen_sizes_lheap$(EXEEXT): $(gen_sizes_lheap_OBJECTS) $(gen_sizes_lheap_DEPENDENCIES) $(EXTRA_gen_sizes_lheap_DEPENDENCIES)
@rm -f gen_sizes_lheap$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(gen_sizes_lheap_OBJECTS) $(gen_sizes_lheap_LDADD) $(LIBS)
@ -1195,6 +1220,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtypes.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earray.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/efc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enc_dec_plist.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enc_dec_plist_with_endianess.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enum.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/err_compat.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error_test.Po@am__quote@
@ -1222,6 +1249,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gen_new_super.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gen_noencoder.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gen_nullspace.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gen_plist.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gen_sizes_lheap.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gen_specmetaread.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gen_udlinks.Po@am__quote@

480
test/enc_dec_plist.c Normal file
View File

@ -0,0 +1,480 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* Copyright by the Board of Trustees of the University of Illinois. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the files COPYING and Copyright.html. COPYING can be found at the root *
* of the source code distribution tree; Copyright.html can be found at the *
* root level of an installed copy of the electronic HDF5 document set and *
* is linked from the top-level documents page. It can also be found at *
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
* access to either file, you may request a copy from help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Serial tests for encoding/decoding plists
*/
#include "h5test.h"
#include "H5Pprivate.h"
static int
test_encode_decode(hid_t orig_pl)
{
hid_t pl = (-1); /* Decoded property list */
void *temp_buf = NULL; /* Pointer to encoding buffer */
size_t temp_size = 0; /* Size of encoding buffer */
/* first call to encode returns only the size of the buffer needed */
if(H5Pencode(orig_pl, NULL, &temp_size) < 0)
STACK_ERROR
if(NULL == (temp_buf = (void *)HDmalloc(temp_size)))
TEST_ERROR
if(H5Pencode(orig_pl, temp_buf, &temp_size) < 0)
STACK_ERROR
if((pl = H5Pdecode(temp_buf)) < 0)
STACK_ERROR
if(!H5Pequal(orig_pl, pl))
PUTS_ERROR("encoding-decoding cycle failed\n")
if((H5Pclose(pl)) < 0)
STACK_ERROR
HDfree(temp_buf);
/* Success */
return(0);
error:
if(pl > 0)
H5Pclose(pl);
if(temp_buf)
HDfree(temp_buf);
return(-1);
} /* end test_encode_decode() */
int
main(void)
{
hid_t dcpl; /* dataset create prop. list */
hid_t dapl; /* dataset access prop. list */
hid_t dxpl; /* dataset xfer prop. list */
hid_t gcpl; /* group create prop. list */
hid_t ocpypl; /* object copy prop. list */
hid_t ocpl; /* object create prop. list */
hid_t lcpl; /* link create prop. list */
hid_t lapl; /* link access prop. list */
hid_t fapl; /* file access prop. list */
hid_t fcpl; /* file create prop. list */
hid_t strcpl; /* string create prop. list */
hid_t acpl; /* attribute create prop. list */
hsize_t chunk_size[2] = {16384, 4}; /* chunk size */
double fill = 2.7f; /* Fill value */
hsize_t max_size[1]; /* data space maximum size */
size_t nslots = 521 * 2;
size_t nbytes = 1048576 * 10;
double w0 = 0.5f;
unsigned max_compact;
unsigned min_dense;
const char* c_to_f = "x+32";
H5AC_cache_config_t my_cache_config = {
H5AC__CURR_CACHE_CONFIG_VERSION,
TRUE,
FALSE,
FALSE,
"temp",
TRUE,
FALSE,
( 2 * 2048 * 1024),
0.3f,
(64 * 1024 * 1024),
(4 * 1024 * 1024),
60000,
H5C_incr__threshold,
0.8f,
3.0f,
TRUE,
(8 * 1024 * 1024),
H5C_flash_incr__add_space,
2.0f,
0.25f,
H5C_decr__age_out_with_threshold,
0.997f,
0.8f,
TRUE,
(3 * 1024 * 1024),
3,
FALSE,
0.2f,
(256 * 2048),
H5AC__DEFAULT_METADATA_WRITE_STRATEGY};
if(VERBOSE_MED)
printf("Encode/Decode DCPLs\n");
/******* ENCODE/DECODE DCPLS *****/
TESTING("DCPL Encoding/Decoding");
if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
FAIL_STACK_ERROR
if((H5Pset_chunk(dcpl, 2, &chunk_size)) < 0)
FAIL_STACK_ERROR
if((H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_LATE)) < 0)
FAIL_STACK_ERROR
if((H5Pset_fill_value(dcpl, H5T_NATIVE_DOUBLE, &fill)) < 0)
FAIL_STACK_ERROR
max_size[0] = 100;
if((H5Pset_external(dcpl, "ext1.data", (off_t)0,
(hsize_t)(max_size[0] * sizeof(int)/4))) < 0)
FAIL_STACK_ERROR
if((H5Pset_external(dcpl, "ext2.data", (off_t)0,
(hsize_t)(max_size[0] * sizeof(int)/4))) < 0)
FAIL_STACK_ERROR
if((H5Pset_external(dcpl, "ext3.data", (off_t)0,
(hsize_t)(max_size[0] * sizeof(int)/4))) < 0)
FAIL_STACK_ERROR
if((H5Pset_external(dcpl, "ext4.data", (off_t)0,
(hsize_t)(max_size[0] * sizeof(int)/4))) < 0)
FAIL_STACK_ERROR
/* Test encoding & decoding property list */
if(test_encode_decode(dcpl) < 0)
FAIL_PUTS_ERROR("DCPL encoding/decoding failed\n")
/* release resource */
if((H5Pclose(dcpl)) < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE DAPLS *****/
TESTING("DAPL Encoding/Decoding");
if((dapl = H5Pcreate(H5P_DATASET_ACCESS)) < 0)
FAIL_STACK_ERROR
if((H5Pset_chunk_cache(dapl, nslots, nbytes, w0)) < 0)
FAIL_STACK_ERROR
/* Test encoding & decoding property list */
if(test_encode_decode(dapl) < 0)
FAIL_PUTS_ERROR("DAPL encoding/decoding failed\n")
/* release resource */
if((H5Pclose(dapl)) < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE OCPLS *****/
TESTING("OCPL Encoding/Decoding");
if((ocpl = H5Pcreate(H5P_OBJECT_CREATE)) < 0)
FAIL_STACK_ERROR
if((H5Pset_attr_creation_order(ocpl, (H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED))) < 0)
FAIL_STACK_ERROR
if((H5Pset_attr_phase_change (ocpl, 110, 105)) < 0)
FAIL_STACK_ERROR
if((H5Pset_filter (ocpl, H5Z_FILTER_FLETCHER32, 0, (size_t)0, NULL)) < 0)
FAIL_STACK_ERROR
/* Test encoding & decoding property list */
if(test_encode_decode(ocpl) < 0)
FAIL_PUTS_ERROR("OCPL encoding/decoding failed\n")
/* release resource */
if((H5Pclose(ocpl)) < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE DXPLS *****/
TESTING("DXPL Encoding/Decoding");
if((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
FAIL_STACK_ERROR
if((H5Pset_btree_ratios(dxpl, 0.2f, 0.6f, 0.2f)) < 0)
FAIL_STACK_ERROR
if((H5Pset_hyper_vector_size(dxpl, 5)) < 0)
FAIL_STACK_ERROR
#ifdef H5_HAVE_PARALLEL
if((H5Pset_dxpl_mpio(dxpl, H5FD_MPIO_COLLECTIVE)) < 0)
FAIL_STACK_ERROR
if((H5Pset_dxpl_mpio_collective_opt(dxpl, H5FD_MPIO_INDIVIDUAL_IO)) < 0)
FAIL_STACK_ERROR
if((H5Pset_dxpl_mpio_chunk_opt(dxpl, H5FD_MPIO_CHUNK_MULTI_IO)) < 0)
FAIL_STACK_ERROR
if((H5Pset_dxpl_mpio_chunk_opt_ratio(dxpl, 30)) < 0)
FAIL_STACK_ERROR
if((H5Pset_dxpl_mpio_chunk_opt_num(dxpl, 40)) < 0)
FAIL_STACK_ERROR
#endif/* H5_HAVE_PARALLEL */
if((H5Pset_edc_check(dxpl, H5Z_DISABLE_EDC)) < 0)
FAIL_STACK_ERROR
if((H5Pset_data_transform(dxpl, c_to_f)) < 0)
FAIL_STACK_ERROR
/* Test encoding & decoding property list */
if(test_encode_decode(dxpl) < 0)
FAIL_PUTS_ERROR("DXPL encoding/decoding failed\n")
/* release resource */
if((H5Pclose(dxpl)) < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE GCPLS *****/
TESTING("GCPL Encoding/Decoding");
if((gcpl = H5Pcreate(H5P_GROUP_CREATE)) < 0)
FAIL_STACK_ERROR
if((H5Pset_local_heap_size_hint(gcpl, 256)) < 0)
FAIL_STACK_ERROR
if((H5Pset_link_phase_change(gcpl, 2, 2)) < 0)
FAIL_STACK_ERROR
/* Query the group creation properties */
if((H5Pget_link_phase_change(gcpl, &max_compact, &min_dense)) < 0)
FAIL_STACK_ERROR
if((H5Pset_est_link_info(gcpl, 3, 9)) < 0)
FAIL_STACK_ERROR
if((H5Pset_link_creation_order(gcpl, (H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED))) < 0)
FAIL_STACK_ERROR
/* Test encoding & decoding property list */
if(test_encode_decode(gcpl) < 0)
FAIL_PUTS_ERROR("GCPL encoding/decoding failed\n")
/* release resource */
if((H5Pclose(gcpl)) < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE LCPLS *****/
TESTING("LCPL Encoding/Decoding");
if((lcpl = H5Pcreate(H5P_LINK_CREATE)) < 0)
FAIL_STACK_ERROR
if((H5Pset_create_intermediate_group(lcpl, TRUE)) < 0)
FAIL_STACK_ERROR
/* Test encoding & decoding property list */
if(test_encode_decode(lcpl) < 0)
FAIL_PUTS_ERROR("LCPL encoding/decoding failed\n")
/* release resource */
if((H5Pclose(lcpl)) < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE LAPLS *****/
TESTING("LAPL Encoding/Decoding");
if((lapl = H5Pcreate(H5P_LINK_ACCESS)) < 0)
FAIL_STACK_ERROR
if((H5Pset_nlinks(lapl, (size_t)134)) < 0)
FAIL_STACK_ERROR
if((H5Pset_elink_acc_flags(lapl, H5F_ACC_RDONLY)) < 0)
FAIL_STACK_ERROR
if((H5Pset_elink_prefix(lapl, "/tmpasodiasod")) < 0)
FAIL_STACK_ERROR
/* Create FAPL for the elink FAPL */
if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0)
FAIL_STACK_ERROR
if((H5Pset_alignment(fapl, 2, 1024)) < 0)
FAIL_STACK_ERROR
if((H5Pset_elink_fapl(lapl, fapl)) < 0)
FAIL_STACK_ERROR
/* Close the elink's FAPL */
if((H5Pclose(fapl)) < 0)
FAIL_STACK_ERROR
/* Test encoding & decoding property list */
if(test_encode_decode(lapl) < 0)
FAIL_PUTS_ERROR("LAPL encoding/decoding failed\n")
/* release resource */
if((H5Pclose(lapl)) < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE OCPYPLS *****/
TESTING("OCPYPL Encoding/Decoding");
if((ocpypl = H5Pcreate(H5P_OBJECT_COPY)) < 0)
FAIL_STACK_ERROR
if((H5Pset_copy_object(ocpypl, H5O_COPY_EXPAND_EXT_LINK_FLAG)) < 0)
FAIL_STACK_ERROR
if((H5Padd_merge_committed_dtype_path(ocpypl, "foo")) < 0)
FAIL_STACK_ERROR
if((H5Padd_merge_committed_dtype_path(ocpypl, "bar")) < 0)
FAIL_STACK_ERROR
/* Test encoding & decoding property list */
if(test_encode_decode(ocpypl) < 0)
FAIL_PUTS_ERROR("OCPYPL encoding/decoding failed\n")
/* release resource */
if((H5Pclose(ocpypl)) < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE FAPLS *****/
TESTING("FAPL Encoding/Decoding");
if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0)
FAIL_STACK_ERROR
if((H5Pset_family_offset(fapl, 1024)) < 0)
FAIL_STACK_ERROR
if((H5Pset_meta_block_size(fapl, 2098452)) < 0)
FAIL_STACK_ERROR
if((H5Pset_sieve_buf_size(fapl, 1048576)) < 0)
FAIL_STACK_ERROR
if((H5Pset_alignment(fapl, 2, 1024)) < 0)
FAIL_STACK_ERROR
if((H5Pset_cache(fapl, 1024, 128, 10485760, 0.3f)) < 0)
FAIL_STACK_ERROR
if((H5Pset_elink_file_cache_size(fapl, 10485760)) < 0)
FAIL_STACK_ERROR
if((H5Pset_gc_references(fapl, 1)) < 0)
FAIL_STACK_ERROR
if((H5Pset_small_data_block_size(fapl, 2048)) < 0)
FAIL_STACK_ERROR
if((H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST)) < 0)
FAIL_STACK_ERROR
if((H5Pset_fclose_degree(fapl, H5F_CLOSE_WEAK)) < 0)
FAIL_STACK_ERROR
if((H5Pset_multi_type(fapl, H5FD_MEM_GHEAP)) < 0)
FAIL_STACK_ERROR
if((H5Pset_mdc_config(fapl, &my_cache_config)) < 0)
FAIL_STACK_ERROR
/* Test encoding & decoding property list */
if(test_encode_decode(fapl) < 0)
FAIL_PUTS_ERROR("FAPL encoding/decoding failed\n")
/* release resource */
if((H5Pclose(fapl)) < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE FCPLS *****/
TESTING("FCPL Encoding/Decoding");
if((fcpl = H5Pcreate(H5P_FILE_CREATE)) < 0)
FAIL_STACK_ERROR
if((H5Pset_userblock(fcpl, 1024) < 0))
FAIL_STACK_ERROR
if((H5Pset_istore_k(fcpl, 3) < 0))
FAIL_STACK_ERROR
if((H5Pset_sym_k(fcpl, 4, 5) < 0))
FAIL_STACK_ERROR
if((H5Pset_shared_mesg_nindexes(fcpl, 8) < 0))
FAIL_STACK_ERROR
if((H5Pset_shared_mesg_index(fcpl, 1, H5O_SHMESG_SDSPACE_FLAG, 32) < 0))
FAIL_STACK_ERROR
if((H5Pset_shared_mesg_phase_change(fcpl, 60, 20) < 0))
FAIL_STACK_ERROR
if((H5Pset_sizes(fcpl, 8, 4) < 0))
FAIL_STACK_ERROR
/* Test encoding & decoding property list */
if(test_encode_decode(fcpl) < 0)
FAIL_PUTS_ERROR("FCPL encoding/decoding failed\n")
/* release resource */
if((H5Pclose(fcpl)) < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE STRCPLS *****/
TESTING("STRCPL Encoding/Decoding");
if((strcpl = H5Pcreate(H5P_STRING_CREATE)) < 0)
FAIL_STACK_ERROR
if((H5Pset_char_encoding(strcpl, H5T_CSET_UTF8) < 0))
FAIL_STACK_ERROR
/* Test encoding & decoding property list */
if(test_encode_decode(strcpl) < 0)
FAIL_PUTS_ERROR("STRCPL encoding/decoding failed\n")
/* release resource */
if((H5Pclose(strcpl)) < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE ACPLS *****/
TESTING("ACPL Encoding/Decoding");
if((acpl = H5Pcreate(H5P_ATTRIBUTE_CREATE)) < 0)
FAIL_STACK_ERROR
if((H5Pset_char_encoding(acpl, H5T_CSET_UTF8) < 0))
FAIL_STACK_ERROR
/* Test encoding & decoding property list */
if(test_encode_decode(acpl) < 0)
FAIL_PUTS_ERROR("ACPL encoding/decoding failed\n")
/* release resource */
if((H5Pclose(acpl)) < 0)
FAIL_STACK_ERROR
PASSED();
return 0;
error:
printf("***** Plist Encode/Decode tests FAILED! *****\n");
return 1;
}

View File

@ -0,0 +1,160 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* Copyright by the Board of Trustees of the University of Illinois. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the files COPYING and Copyright.html. COPYING can be found at the root *
* of the source code distribution tree; Copyright.html can be found at the *
* root level of an installed copy of the electronic HDF5 document set and *
* is linked from the top-level documents page. It can also be found at *
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
* access to either file, you may request a copy from help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Serial tests for encoding/decoding plists
*/
#include "h5test.h"
#include "H5srcdir.h"
static int test_plists(const char *filename1, const char *filename2);
int
main(void)
{
if(VERBOSE_MED)
printf("Encode/Decode property list endianess\n");
/******* ENCODE/DECODE DCPLS *****/
TESTING("DCPL Encoding/Decoding");
if(test_plists("testfiles/plist_files/dcpl_le", "testfiles/plist_files/dcpl_be") < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE DAPLS *****/
TESTING("DAPL Encoding/Decoding");
if(test_plists("testfiles/plist_files/dapl_le", "testfiles/plist_files/dapl_be") < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE DXPLS *****/
TESTING("DXPL Encoding/Decoding");
if(test_plists("testfiles/plist_files/dxpl_le", "testfiles/plist_files/dxpl_be") < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE GCPLS *****/
TESTING("GCPL Encoding/Decoding");
if(test_plists("testfiles/plist_files/gcpl_le", "testfiles/plist_files/gcpl_be") < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE LCPLS *****/
TESTING("LCPL Encoding/Decoding");
if(test_plists("testfiles/plist_files/lcpl_le", "testfiles/plist_files/lcpl_be") < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE LAPLS *****/
TESTING("LAPL Encoding/Decoding");
if(test_plists("testfiles/plist_files/lapl_le", "testfiles/plist_files/lapl_be") < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE OCPLS *****/
TESTING("OCPL Encoding/Decoding");
if(test_plists("testfiles/plist_files/ocpl_le", "testfiles/plist_files/ocpl_be") < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE OCPYPLS *****/
TESTING("OCPYPL Encoding/Decoding");
if(test_plists("testfiles/plist_files/ocpypl_le", "testfiles/plist_files/ocpypl_be") < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE FCPLS *****/
TESTING("FCPL Encoding/Decoding");
if(test_plists("testfiles/plist_files/fcpl_le", "testfiles/plist_files/fcpl_be") < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE FAPLS *****/
TESTING("FAPL Encoding/Decoding");
if(test_plists("testfiles/plist_files/fapl_le", "testfiles/plist_files/fapl_be") < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE STRCPLS *****/
TESTING("STRCPL Encoding/Decoding");
if(test_plists("testfiles/plist_files/strcpl_le", "testfiles/plist_files/strcpl_be") < 0)
FAIL_STACK_ERROR
PASSED();
/******* ENCODE/DECODE ACPLS *****/
TESTING("ACPL Encoding/Decoding");
if(test_plists("testfiles/plist_files/acpl_le", "testfiles/plist_files/acpl_be") < 0)
FAIL_STACK_ERROR
PASSED();
return 0;
error:
return 1;
}
static int
test_plists(const char *filename1, const char *filename2)
{
int fd_le, fd_be;
size_t size_le = 0, size_be = 0;
void *buf_le = NULL, *buf_be = NULL;
hid_t plist_le, plist_be; /* dataset create prop. list */
const char *testfile;
testfile = H5_get_srcdir_filename(filename1);
if((fd_le = HDopen(testfile, O_RDONLY, 0666)) < 0)
TEST_ERROR
size_le = HDlseek(fd_le, (HDoff_t)0, SEEK_END);
HDlseek(fd_le, (HDoff_t)0, SEEK_SET);
buf_le = (void *)HDmalloc(size_le);
if(HDread(fd_le, buf_le, size_le) < 0)
TEST_ERROR
HDclose(fd_le);
testfile = H5_get_srcdir_filename(filename2);
if((fd_be = HDopen(testfile, O_RDONLY, 0666)) < 0)
TEST_ERROR
size_be = HDlseek(fd_be, (HDoff_t)0, SEEK_END);
HDlseek(fd_be, (HDoff_t)0, SEEK_SET);
buf_be = (void *)HDmalloc(size_be);
if(HDread(fd_be, buf_be, size_be) < 0)
TEST_ERROR
HDclose(fd_be);
if((plist_le = H5Pdecode(buf_le)) < 0)
FAIL_STACK_ERROR
if((plist_be = H5Pdecode(buf_be)) < 0)
FAIL_STACK_ERROR
if(!H5Pequal(plist_le, plist_be))
FAIL_PUTS_ERROR("PLIST encoding/decoding comparison failed\n")
if((H5Pclose(plist_le)) < 0)
FAIL_STACK_ERROR
if((H5Pclose(plist_be)) < 0)
FAIL_STACK_ERROR
HDfree(buf_le);
HDfree(buf_be);
return 1;
error:
printf("***** Plist Encode/Decode tests FAILED! *****\n");
return -1;
}

435
test/gen_plist.c Normal file
View File

@ -0,0 +1,435 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* Copyright by the Board of Trustees of the University of Illinois. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the files COPYING and Copyright.html. COPYING can be found at the root *
* of the source code distribution tree; Copyright.html can be found at the *
* root level of an installed copy of the electronic HDF5 document set and *
* is linked from the top-level documents page. It can also be found at *
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
* access to either file, you may request a copy from help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* generate plist file
*/
#include <assert.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include "H5private.h"
#include "hdf5.h"
static int encode_plist(hid_t plist_id, int little_endian, const char *filename_le, const char *filename_be);
int
main(void)
{
hid_t dcpl1; /* dataset create prop. list */
hid_t dapl1; /* dataset access prop. list */
hid_t dxpl1; /* dataset xfer prop. list */
hid_t gcpl1; /* group create prop. list */
hid_t ocpypl1; /* object copy prop. list */
hid_t ocpl1; /* object create prop. list */
hid_t lcpl1; /* link create prop. list */
hid_t lapl1; /* link access prop. list */
hid_t fapl1; /* file access prop. list */
hid_t fcpl1; /* file create prop. list */
hid_t strcpl1; /* string create prop. list */
hid_t acpl1; /* attribute create prop. list */
herr_t ret = 0;
hsize_t chunk_size = 16384; /* chunk size */
int fill = 2; /* Fill value */
hsize_t max_size[1]; /* data space maximum size */
size_t nslots = 521 * 2;
size_t nbytes = 1048576 * 10;
double w0 = 0.5f;
unsigned max_compact;
unsigned min_dense;
const char* c_to_f = "x+32";
int little_endian;
H5AC_cache_config_t my_cache_config = {
H5AC__CURR_CACHE_CONFIG_VERSION,
1 /*TRUE*/,
0 /*FALSE*/,
0 /*FALSE*/,
"temp",
1 /*TRUE*/,
0 /*FALSE*/,
( 2 * 2048 * 1024),
0.3f,
(64 * 1024 * 1024),
(4 * 1024 * 1024),
60000,
H5C_incr__threshold,
0.8f,
3.0f,
1 /*TRUE*/,
(8 * 1024 * 1024),
H5C_flash_incr__add_space,
2.0f,
0.25f,
H5C_decr__age_out_with_threshold,
0.997f,
0.8f,
1 /*TRUE*/,
(3 * 1024 * 1024),
3,
0 /*FALSE*/,
0.2f,
(256 * 2048),
H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY};
/* check endianess */
{
short int word = 0x0001;
char *byte = (char *) &word;
if(byte[0] == 1)
/* little endian */
little_endian = 1;
else
/* big endian */
little_endian = 0;
}
/* Explicitly initialize the library, since we are including the private header file */
H5open();
/******* ENCODE/DECODE DCPLS *****/
if((dcpl1 = H5Pcreate(H5P_DATASET_CREATE)) < 0)
assert(dcpl1 > 0);
if((ret = H5Pset_chunk(dcpl1, 1, &chunk_size)) < 0)
assert(ret > 0);
if((ret = H5Pset_alloc_time(dcpl1, H5D_ALLOC_TIME_LATE)) < 0)
assert(ret > 0);
ret = H5Tconvert(H5T_NATIVE_INT, H5T_STD_I32BE, (size_t)1, &fill, NULL, H5P_DEFAULT);
assert(ret >= 0);
if((ret = H5Pset_fill_value(dcpl1, H5T_STD_I32BE, &fill)) < 0)
assert(ret > 0);
max_size[0] = 100;
if((ret = H5Pset_external(dcpl1, "ext1.data", (off_t)0,
(hsize_t)(max_size[0] * sizeof(int)/4))) < 0)
assert(ret > 0);
if((ret = H5Pset_external(dcpl1, "ext2.data", (off_t)0,
(hsize_t)(max_size[0] * sizeof(int)/4))) < 0)
assert(ret > 0);
if((ret = H5Pset_external(dcpl1, "ext3.data", (off_t)0,
(hsize_t)(max_size[0] * sizeof(int)/4))) < 0)
assert(ret > 0);
if((ret = H5Pset_external(dcpl1, "ext4.data", (off_t)0,
(hsize_t)(max_size[0] * sizeof(int)/4))) < 0)
assert(ret > 0);
if((ret = encode_plist(dcpl1, little_endian, "testfiles/plist_files/dcpl_le", "testfiles/plist_files/dcpl_be")) < 0)
assert(ret > 0);
/* release resource */
if((ret = H5Pclose(dcpl1)) < 0)
assert(ret > 0);
/******* ENCODE/DECODE DAPLS *****/
if((dapl1 = H5Pcreate(H5P_DATASET_ACCESS)) < 0)
assert(dapl1 > 0);
if((ret = H5Pset_chunk_cache(dapl1, nslots, nbytes, w0)) < 0)
assert(ret > 0);
if((ret = encode_plist(dapl1, little_endian, "testfiles/plist_files/dapl_le", "testfiles/plist_files/dapl_be")) < 0)
assert(ret > 0);
/* release resource */
if((ret = H5Pclose(dapl1)) < 0)
assert(ret > 0);
/******* ENCODE/DECODE DXPLS *****/
if((dxpl1 = H5Pcreate(H5P_DATASET_XFER)) < 0)
assert(dxpl1 > 0);
if((ret = H5Pset_btree_ratios(dxpl1, 0.2f, 0.6f, 0.2f)) < 0)
assert(ret > 0);
if((ret = H5Pset_hyper_vector_size(dxpl1, 5)) < 0)
assert(ret > 0);
#ifdef H5_HAVE_PARALLEL
if((ret = H5Pset_dxpl_mpio(dxpl1, H5FD_MPIO_COLLECTIVE)) < 0)
assert(ret > 0);
if((ret = H5Pset_dxpl_mpio_collective_opt(dxpl1, H5FD_MPIO_INDIVIDUAL_IO)) < 0)
assert(ret > 0);
if((ret = H5Pset_dxpl_mpio_chunk_opt(dxpl1, H5FD_MPIO_CHUNK_MULTI_IO)) < 0)
assert(ret > 0);
if((ret = H5Pset_dxpl_mpio_chunk_opt_ratio(dxpl1, 30)) < 0)
assert(ret > 0);
if((ret = H5Pset_dxpl_mpio_chunk_opt_num(dxpl1, 40)) < 0)
assert(ret > 0);
#endif/* H5_HAVE_PARALLEL */
if((ret = H5Pset_edc_check(dxpl1, H5Z_DISABLE_EDC)) < 0)
assert(ret > 0);
if((ret = H5Pset_data_transform(dxpl1, c_to_f)) < 0)
assert(ret > 0);
if((ret = encode_plist(dxpl1, little_endian, "testfiles/plist_files/dxpl_le", "testfiles/plist_files/dxpl_be")) < 0)
assert(ret > 0);
/* release resource */
if((ret = H5Pclose(dxpl1)) < 0)
assert(ret > 0);
/******* ENCODE/DECODE GCPLS *****/
if((gcpl1 = H5Pcreate(H5P_GROUP_CREATE)) < 0)
assert(gcpl1 > 0);
if((ret = H5Pset_local_heap_size_hint(gcpl1, 256)) < 0)
assert(ret > 0);
if((ret = H5Pset_link_phase_change(gcpl1, 2, 2)) < 0)
assert(ret > 0);
/* Query the group creation properties */
if((ret = H5Pget_link_phase_change(gcpl1, &max_compact, &min_dense)) < 0)
assert(ret > 0);
if((ret = H5Pset_est_link_info(gcpl1, 3, 9)) < 0)
assert(ret > 0);
if((ret = H5Pset_link_creation_order(gcpl1, (H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED))) < 0)
assert(ret > 0);
if((ret = encode_plist(gcpl1, little_endian, "testfiles/plist_files/gcpl_le", "testfiles/plist_files/gcpl_be")) < 0)
assert(ret > 0);
/* release resource */
if((ret = H5Pclose(gcpl1)) < 0)
assert(ret > 0);
/******* ENCODE/DECODE LCPLS *****/
if((lcpl1 = H5Pcreate(H5P_LINK_CREATE)) < 0)
assert(lcpl1 > 0);
if((ret = H5Pset_create_intermediate_group(lcpl1, 1 /*TRUE*/)) < 0)
assert(ret > 0);
if((ret = encode_plist(lcpl1, little_endian, "testfiles/plist_files/lcpl_le", "testfiles/plist_files/lcpl_be")) < 0)
assert(ret > 0);
/* release resource */
if((ret = H5Pclose(lcpl1)) < 0)
assert(ret > 0);
/******* ENCODE/DECODE OCPYLS *****/
if((ocpypl1 = H5Pcreate(H5P_OBJECT_COPY)) < 0)
assert(ocpypl1 > 0);
ret = H5Pset_copy_object(ocpypl1, H5O_COPY_EXPAND_EXT_LINK_FLAG);
assert(ret >= 0);
ret = H5Padd_merge_committed_dtype_path(ocpypl1, "foo");
assert(ret >= 0);
ret = H5Padd_merge_committed_dtype_path(ocpypl1, "bar");
assert(ret >= 0);
if((ret = encode_plist(ocpypl1, little_endian, "testfiles/plist_files/ocpypl_le", "testfiles/plist_files/ocpypl_be")) < 0)
assert(ret > 0);
/* release resource */
if((ret = H5Pclose(ocpypl1)) < 0)
assert(ret > 0);
/******* ENCODE/DECODE OCPLS *****/
if((ocpl1 = H5Pcreate(H5P_OBJECT_CREATE)) < 0)
assert(ocpl1 > 0);
if((ret = H5Pset_attr_creation_order(ocpl1, (H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED))) < 0)
assert(ret > 0);
if((ret = H5Pset_attr_phase_change (ocpl1, 110, 105)) < 0)
assert(ret > 0);
if((ret = H5Pset_filter (ocpl1, H5Z_FILTER_FLETCHER32, 0, (size_t)0, NULL)) < 0)
assert(ret > 0);
if((ret = encode_plist(ocpl1, little_endian, "testfiles/plist_files/ocpl_le", "testfiles/plist_files/ocpl_be")) < 0)
assert(ret > 0);
/* release resource */
if((ret = H5Pclose(ocpl1)) < 0)
assert(ret > 0);
/******* ENCODE/DECODE LAPLS *****/
if((lapl1 = H5Pcreate(H5P_LINK_ACCESS)) < 0)
assert(lapl1 > 0);
if((ret = H5Pset_nlinks(lapl1, (size_t)134)) < 0)
assert(ret > 0);
if((ret = H5Pset_elink_acc_flags(lapl1, H5F_ACC_RDONLY)) < 0)
assert(ret > 0);
if((ret = H5Pset_elink_prefix(lapl1, "/tmpasodiasod")) < 0)
assert(ret > 0);
/* Create FAPL for the elink FAPL */
if((fapl1 = ret = H5Pcreate(ret = H5P_FILE_ACCESS)) < 0)
assert(ret > 0);
if((ret = H5Pset_alignment(fapl1, 2, 1024)) < 0)
assert(ret > 0);
if((ret = H5Pset_elink_fapl(lapl1, fapl1)) < 0)
assert(ret > 0);
/* Close the elink's FAPL */
if((ret = H5Pclose(fapl1)) < 0)
assert(ret > 0);
if((ret = encode_plist(lapl1, little_endian, "testfiles/plist_files/lapl_le", "testfiles/plist_files/lapl_be")) < 0)
assert(ret > 0);
/* release resource */
if((ret = H5Pclose(lapl1)) < 0)
assert(ret > 0);
/******* ENCODE/DECODE FAPLS *****/
if((fapl1 = H5Pcreate(H5P_FILE_ACCESS)) < 0)
assert(fapl1 > 0);
if((ret = H5Pset_family_offset(fapl1, 1024)) < 0)
assert(ret > 0);
if((ret = H5Pset_meta_block_size(fapl1, 2098452)) < 0)
assert(ret > 0);
if((ret = H5Pset_sieve_buf_size(fapl1, 1048576)) < 0)
assert(ret > 0);
if((ret = H5Pset_alignment(fapl1, 2, 1024)) < 0)
assert(ret > 0);
if((ret = H5Pset_cache(fapl1, 1024, 128, 10485760, 0.3f)) < 0)
assert(ret > 0);
if((ret = H5Pset_elink_file_cache_size(fapl1, 10485760)) < 0)
assert(ret > 0);
if((ret = H5Pset_gc_references(fapl1, 1)) < 0)
assert(ret > 0);
if((ret = H5Pset_small_data_block_size(fapl1, 2048)) < 0)
assert(ret > 0);
if((ret = H5Pset_libver_bounds(fapl1, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST)) < 0)
assert(ret > 0);
if((ret = H5Pset_fclose_degree(fapl1, H5F_CLOSE_WEAK)) < 0)
assert(ret > 0);
if((ret = H5Pset_multi_type(fapl1, H5FD_MEM_GHEAP)) < 0)
assert(ret > 0);
if((ret = H5Pset_mdc_config(fapl1, &my_cache_config)) < 0)
assert(ret > 0);
if((ret = encode_plist(fapl1, little_endian, "testfiles/plist_files/fapl_le", "testfiles/plist_files/fapl_be")) < 0)
assert(ret > 0);
/* release resource */
if((ret = H5Pclose(fapl1)) < 0)
assert(ret > 0);
/******* ENCODE/DECODE FCPLS *****/
if((fcpl1 = H5Pcreate(H5P_FILE_CREATE)) < 0)
assert(fcpl1 > 0);
if((ret = H5Pset_userblock(fcpl1, 1024) < 0))
assert(ret > 0);
if((ret = H5Pset_istore_k(fcpl1, 3) < 0))
assert(ret > 0);
if((ret = H5Pset_sym_k(fcpl1, 4, 5) < 0))
assert(ret > 0);
if((ret = H5Pset_shared_mesg_nindexes(fcpl1, 8) < 0))
assert(ret > 0);
if((ret = H5Pset_shared_mesg_index(fcpl1, 1, H5O_SHMESG_SDSPACE_FLAG, 32) < 0))
assert(ret > 0);
if((ret = H5Pset_shared_mesg_phase_change(fcpl1, 60, 20) < 0))
assert(ret > 0);
if((ret = H5Pset_sizes(fcpl1, 8, 4) < 0))
assert(ret > 0);
if((ret = encode_plist(fcpl1, little_endian, "testfiles/plist_files/fcpl_le", "testfiles/plist_files/fcpl_be")) < 0)
assert(ret > 0);
/* release resource */
if((ret = H5Pclose(fcpl1)) < 0)
assert(ret > 0);
/******* ENCODE/DECODE STRCPLS *****/
strcpl1 = H5Pcreate(H5P_STRING_CREATE);
assert(strcpl1 > 0);
ret = H5Pset_char_encoding(strcpl1, H5T_CSET_UTF8);
assert(ret >= 0);
ret = encode_plist(strcpl1, little_endian, "testfiles/plist_files/strcpl_le", "testfiles/plist_files/strcpl_be");
assert(ret > 0);
/* release resource */
ret = H5Pclose(strcpl1);
assert(ret >= 0);
/******* ENCODE/DECODE ACPLS *****/
acpl1 = H5Pcreate(H5P_ATTRIBUTE_CREATE);
assert(acpl1 > 0);
ret = H5Pset_char_encoding(acpl1, H5T_CSET_UTF8);
assert(ret >= 0);
ret = encode_plist(acpl1, little_endian, "testfiles/plist_files/acpl_le", "testfiles/plist_files/acpl_be");
assert(ret > 0);
/* release resource */
ret = H5Pclose(acpl1);
assert(ret >= 0);
return 0;
}
static int
encode_plist(hid_t plist_id, int little_endian, const char *filename_le, const char *filename_be)
{
int fd = 0; /* file descriptor */
herr_t ret = 0;
void *temp_buf = NULL;
size_t temp_size = 0;
ssize_t write_size;
/* first call to encode returns only the size of the buffer needed */
if((ret = H5Pencode(plist_id, NULL, &temp_size)) < 0)
assert(ret > 0);
temp_buf = (void *)HDmalloc(temp_size);
assert(temp_buf);
if((ret = H5Pencode(plist_id, temp_buf, &temp_size)) < 0)
assert(ret > 0);
if(little_endian)
fd = HDopen(filename_le, O_RDWR | O_CREAT | O_TRUNC, 0666);
else
fd = HDopen(filename_be, O_RDWR | O_CREAT | O_TRUNC, 0666);
assert(fd > 0);
write_size = HDwrite(fd, temp_buf, temp_size);
assert(write_size == (ssize_t)temp_size);
HDclose(fd);
HDfree(temp_buf);
return 1;
}

View File

@ -104,6 +104,7 @@ H5TEST_DLLVAR MPI_Info h5_io_info_g; /* MPI INFO object for IO */
#define H5_FAILED() {puts("*FAILED*");fflush(stdout);}
#define H5_WARNING() {puts("*WARNING*");fflush(stdout);}
#define SKIPPED() {puts(" -SKIP-");fflush(stdout);}
#define PUTS_ERROR(s) {puts(s); AT(); goto error;}
#define TEST_ERROR {H5_FAILED(); AT(); goto error;}
#define STACK_ERROR {H5Eprint2(H5E_DEFAULT, stdout); goto error;}
#define FAIL_STACK_ERROR {H5_FAILED(); AT(); H5Eprint2(H5E_DEFAULT, stdout); \

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -32,7 +32,8 @@ check_PROGRAMS = $(TEST_PROG_PARA)
check_SCRIPTS= $(TEST_SCRIPT)
testphdf5_SOURCES=testphdf5.c t_dset.c t_file.c t_file_image.c t_mdset.c \
t_ph5basic.c t_coll_chunk.c t_span_tree.c t_chunk_alloc.c t_filter_read.c
t_ph5basic.c t_coll_chunk.c t_span_tree.c t_chunk_alloc.c t_filter_read.c \
t_prop.c
# The tests all depend on the hdf5 library and the test library
LDADD = $(LIBH5TEST) $(LIBHDF5)

View File

@ -117,7 +117,7 @@ am_testphdf5_OBJECTS = testphdf5.$(OBJEXT) t_dset.$(OBJEXT) \
t_file.$(OBJEXT) t_file_image.$(OBJEXT) t_mdset.$(OBJEXT) \
t_ph5basic.$(OBJEXT) t_coll_chunk.$(OBJEXT) \
t_span_tree.$(OBJEXT) t_chunk_alloc.$(OBJEXT) \
t_filter_read.$(OBJEXT)
t_filter_read.$(OBJEXT) t_prop.$(OBJEXT)
testphdf5_OBJECTS = $(am_testphdf5_OBJECTS)
testphdf5_LDADD = $(LDADD)
testphdf5_DEPENDENCIES = $(LIBH5TEST) $(LIBHDF5)
@ -463,7 +463,8 @@ TEST_PROG_PARA = t_mpi t_posix_compliant testphdf5 t_cache t_pflush1 t_pflush2 t
TEST_SCRIPT_PARA = testph5.sh
check_SCRIPTS = $(TEST_SCRIPT)
testphdf5_SOURCES = testphdf5.c t_dset.c t_file.c t_file_image.c t_mdset.c \
t_ph5basic.c t_coll_chunk.c t_span_tree.c t_chunk_alloc.c t_filter_read.c
t_ph5basic.c t_coll_chunk.c t_span_tree.c t_chunk_alloc.c t_filter_read.c \
t_prop.c
# The tests all depend on the hdf5 library and the test library
@ -576,6 +577,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_pflush2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_ph5basic.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_posix_compliant.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_prop.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_shapesame.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_span_tree.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testphdf5.Po@am__quote@

452
testpar/t_prop.c Normal file
View File

@ -0,0 +1,452 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* Copyright by the Board of Trustees of the University of Illinois. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the files COPYING and Copyright.html. COPYING can be found at the root *
* of the source code distribution tree; Copyright.html can be found at the *
* root level of an installed copy of the electronic HDF5 document set and *
* is linked from the top-level documents page. It can also be found at *
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
* access to either file, you may request a copy from help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Parallel tests for encoding/decoding plists sent between processes
*/
#include "testphdf5.h"
#include "H5Pprivate.h"
static int
test_encode_decode(hid_t orig_pl, int mpi_rank, int recv_proc)
{
MPI_Request req[2];
MPI_Status status;
hid_t pl; /* Decoded property list */
void *buf = NULL;
size_t buf_size = 0;
herr_t ret; /* Generic return value */
if(mpi_rank == 0) {
/* first call to encode returns only the size of the buffer needed */
ret = H5Pencode(orig_pl, NULL, &buf_size);
VRFY((ret >= 0), "H5Pencode succeeded");
buf = (uint8_t *)HDmalloc(buf_size);
ret = H5Pencode(orig_pl, buf, &buf_size);
VRFY((ret >= 0), "H5Pencode succeeded");
MPI_Isend(&buf_size, 1, MPI_INT, recv_proc, 123, MPI_COMM_WORLD, &req[0]);
MPI_Isend(buf, (int)buf_size, MPI_BYTE, recv_proc, 124, MPI_COMM_WORLD, &req[1]);
} /* end if */
if(mpi_rank == recv_proc) {
MPI_Recv(&buf_size, 1, MPI_INT, 0, 123, MPI_COMM_WORLD, &status);
buf = (uint8_t *)HDmalloc(buf_size);
MPI_Recv(buf, (int)buf_size, MPI_BYTE, 0, 124, MPI_COMM_WORLD, &status);
pl = H5Pdecode(buf);
VRFY((pl >= 0), "H5Pdecode succeeded");
VRFY(H5Pequal(orig_pl, pl), "Property List Equal Succeeded");
ret = H5Pclose(pl);
VRFY((ret >= 0), "H5Pclose succeeded");
} /* end if */
if(0 == mpi_rank)
MPI_Waitall(2, req, MPI_STATUSES_IGNORE);
if(NULL != buf)
HDfree(buf);
MPI_Barrier(MPI_COMM_WORLD);
return(0);
}
void
test_plist_ed(void)
{
hid_t dcpl; /* dataset create prop. list */
hid_t dapl; /* dataset access prop. list */
hid_t dxpl; /* dataset transfer prop. list */
hid_t gcpl; /* group create prop. list */
hid_t lcpl; /* link create prop. list */
hid_t lapl; /* link access prop. list */
hid_t ocpypl; /* object copy prop. list */
hid_t ocpl; /* object create prop. list */
hid_t fapl; /* file access prop. list */
hid_t fcpl; /* file create prop. list */
hid_t strcpl; /* string create prop. list */
hid_t acpl; /* attribute create prop. list */
int mpi_size, mpi_rank, recv_proc;
hsize_t chunk_size = 16384; /* chunk size */
double fill = 2.7f; /* Fill value */
size_t nslots = 521*2;
size_t nbytes = 1048576 * 10;
double w0 = 0.5f;
unsigned max_compact;
unsigned min_dense;
hsize_t max_size[1]; /*data space maximum size */
const char* c_to_f = "x+32";
H5AC_cache_config_t my_cache_config = {
H5AC__CURR_CACHE_CONFIG_VERSION,
TRUE,
FALSE,
FALSE,
"temp",
TRUE,
FALSE,
( 2 * 2048 * 1024),
0.3f,
(64 * 1024 * 1024),
(4 * 1024 * 1024),
60000,
H5C_incr__threshold,
0.8f,
3.0f,
TRUE,
(8 * 1024 * 1024),
H5C_flash_incr__add_space,
2.0f,
0.25f,
H5C_decr__age_out_with_threshold,
0.997f,
0.8f,
TRUE,
(3 * 1024 * 1024),
3,
FALSE,
0.2f,
(256 * 2048),
H5AC__DEFAULT_METADATA_WRITE_STRATEGY};
herr_t ret; /* Generic return value */
if(VERBOSE_MED)
printf("Encode/Decode DCPLs\n");
/* set up MPI parameters */
MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
if(mpi_size == 1)
recv_proc = 0;
else
recv_proc = 1;
dcpl = H5Pcreate(H5P_DATASET_CREATE);
VRFY((dcpl >= 0), "H5Pcreate succeeded");
ret = H5Pset_chunk(dcpl, 1, &chunk_size);
VRFY((ret >= 0), "H5Pset_chunk succeeded");
ret = H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_LATE);
VRFY((ret >= 0), "H5Pset_alloc_time succeeded");
ret = H5Pset_fill_value(dcpl, H5T_NATIVE_DOUBLE, &fill);
VRFY((ret>=0), "set fill-value succeeded");
max_size[0] = 100;
ret = H5Pset_external(dcpl, "ext1.data", (off_t)0,
(hsize_t)(max_size[0] * sizeof(int)/4));
VRFY((ret>=0), "set external succeeded");
ret = H5Pset_external(dcpl, "ext2.data", (off_t)0,
(hsize_t)(max_size[0] * sizeof(int)/4));
VRFY((ret>=0), "set external succeeded");
ret = H5Pset_external(dcpl, "ext3.data", (off_t)0,
(hsize_t)(max_size[0] * sizeof(int)/4));
VRFY((ret>=0), "set external succeeded");
ret = H5Pset_external(dcpl, "ext4.data", (off_t)0,
(hsize_t)(max_size[0] * sizeof(int)/4));
VRFY((ret>=0), "set external succeeded");
ret = test_encode_decode(dcpl, mpi_rank, recv_proc);
VRFY((ret >= 0), "test_encode_decode succeeded");
ret = H5Pclose(dcpl);
VRFY((ret >= 0), "H5Pclose succeeded");
/******* ENCODE/DECODE DAPLS *****/
dapl = H5Pcreate(H5P_DATASET_ACCESS);
VRFY((dapl >= 0), "H5Pcreate succeeded");
ret = H5Pset_chunk_cache(dapl, nslots, nbytes, w0);
VRFY((ret >= 0), "H5Pset_chunk_cache succeeded");
ret = test_encode_decode(dapl, mpi_rank, recv_proc);
VRFY((ret >= 0), "test_encode_decode succeeded");
ret = H5Pclose(dapl);
VRFY((ret >= 0), "H5Pclose succeeded");
/******* ENCODE/DECODE OCPLS *****/
ocpl = H5Pcreate(H5P_OBJECT_CREATE);
VRFY((ocpl >= 0), "H5Pcreate succeeded");
ret = H5Pset_attr_creation_order(ocpl, (H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED));
VRFY((ret >= 0), "H5Pset_attr_creation_order succeeded");
ret = H5Pset_attr_phase_change(ocpl, 110, 105);
VRFY((ret >= 0), "H5Pset_attr_phase_change succeeded");
ret = H5Pset_filter(ocpl, H5Z_FILTER_FLETCHER32, 0, (size_t)0, NULL);
VRFY((ret >= 0), "H5Pset_filter succeeded");
ret = test_encode_decode(ocpl, mpi_rank, recv_proc);
VRFY((ret >= 0), "test_encode_decode succeeded");
ret = H5Pclose(ocpl);
VRFY((ret >= 0), "H5Pclose succeeded");
/******* ENCODE/DECODE DXPLS *****/
dxpl = H5Pcreate(H5P_DATASET_XFER);
VRFY((dxpl >= 0), "H5Pcreate succeeded");
ret = H5Pset_btree_ratios(dxpl, 0.2f, 0.6f, 0.2f);
VRFY((ret >= 0), "H5Pset_btree_ratios succeeded");
ret = H5Pset_hyper_vector_size(dxpl, 5);
VRFY((ret >= 0), "H5Pset_hyper_vector_size succeeded");
ret = H5Pset_dxpl_mpio(dxpl, H5FD_MPIO_COLLECTIVE);
VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
ret = H5Pset_dxpl_mpio_collective_opt(dxpl, H5FD_MPIO_INDIVIDUAL_IO);
VRFY((ret >= 0), "H5Pset_dxpl_mpio_collective_opt succeeded");
ret = H5Pset_dxpl_mpio_chunk_opt(dxpl, H5FD_MPIO_CHUNK_MULTI_IO);
VRFY((ret >= 0), "H5Pset_dxpl_mpio_chunk_opt succeeded");
ret = H5Pset_dxpl_mpio_chunk_opt_ratio(dxpl, 30);
VRFY((ret >= 0), "H5Pset_dxpl_mpio_chunk_opt_ratio succeeded");
ret = H5Pset_dxpl_mpio_chunk_opt_num(dxpl, 40);
VRFY((ret >= 0), "H5Pset_dxpl_mpio_chunk_opt_num succeeded");
ret = H5Pset_edc_check(dxpl, H5Z_DISABLE_EDC);
VRFY((ret >= 0), "H5Pset_edc_check succeeded");
ret = H5Pset_data_transform(dxpl, c_to_f);
VRFY((ret >= 0), "H5Pset_data_transform succeeded");
ret = test_encode_decode(dxpl, mpi_rank, recv_proc);
VRFY((ret >= 0), "test_encode_decode succeeded");
ret = H5Pclose(dxpl);
VRFY((ret >= 0), "H5Pclose succeeded");
/******* ENCODE/DECODE GCPLS *****/
gcpl = H5Pcreate(H5P_GROUP_CREATE);
VRFY((gcpl >= 0), "H5Pcreate succeeded");
ret = H5Pset_local_heap_size_hint(gcpl, 256);
VRFY((ret >= 0), "H5Pset_local_heap_size_hint succeeded");
ret = H5Pset_link_phase_change(gcpl, 2, 2);
VRFY((ret >= 0), "H5Pset_link_phase_change succeeded");
/* Query the group creation properties */
ret = H5Pget_link_phase_change(gcpl, &max_compact, &min_dense);
VRFY((ret >= 0), "H5Pget_est_link_info succeeded");
ret = H5Pset_est_link_info(gcpl, 3, 9);
VRFY((ret >= 0), "H5Pset_est_link_info succeeded");
ret = H5Pset_link_creation_order(gcpl, (H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED));
VRFY((ret >= 0), "H5Pset_link_creation_order succeeded");
ret = test_encode_decode(gcpl, mpi_rank, recv_proc);
VRFY((ret >= 0), "test_encode_decode succeeded");
ret = H5Pclose(gcpl);
VRFY((ret >= 0), "H5Pclose succeeded");
/******* ENCODE/DECODE LCPLS *****/
lcpl = H5Pcreate(H5P_LINK_CREATE);
VRFY((lcpl >= 0), "H5Pcreate succeeded");
ret= H5Pset_create_intermediate_group(lcpl, TRUE);
VRFY((ret >= 0), "H5Pset_create_intermediate_group succeeded");
ret = test_encode_decode(lcpl, mpi_rank, recv_proc);
VRFY((ret >= 0), "test_encode_decode succeeded");
ret = H5Pclose(lcpl);
VRFY((ret >= 0), "H5Pclose succeeded");
/******* ENCODE/DECODE LAPLS *****/
lapl = H5Pcreate(H5P_LINK_ACCESS);
VRFY((lapl >= 0), "H5Pcreate succeeded");
ret = H5Pset_nlinks(lapl, (size_t)134);
VRFY((ret >= 0), "H5Pset_nlinks succeeded");
ret = H5Pset_elink_acc_flags(lapl, H5F_ACC_RDONLY);
VRFY((ret >= 0), "H5Pset_elink_acc_flags succeeded");
ret = H5Pset_elink_prefix(lapl, "/tmpasodiasod");
VRFY((ret >= 0), "H5Pset_nlinks succeeded");
/* Create FAPL for the elink FAPL */
fapl = H5Pcreate(H5P_FILE_ACCESS);
VRFY((fapl >= 0), "H5Pcreate succeeded");
ret = H5Pset_alignment(fapl, 2, 1024);
VRFY((ret >= 0), "H5Pset_alignment succeeded");
ret = H5Pset_elink_fapl(lapl, fapl);
VRFY((ret >= 0), "H5Pset_elink_fapl succeeded");
/* Close the elink's FAPL */
ret = H5Pclose(fapl);
VRFY((ret >= 0), "H5Pclose succeeded");
ret = test_encode_decode(lapl, mpi_rank, recv_proc);
VRFY((ret >= 0), "test_encode_decode succeeded");
ret = H5Pclose(lapl);
VRFY((ret >= 0), "H5Pclose succeeded");
/******* ENCODE/DECODE OCPYPLS *****/
ocpypl = H5Pcreate(H5P_OBJECT_COPY);
VRFY((ocpypl >= 0), "H5Pcreate succeeded");
ret = H5Pset_copy_object(ocpypl, H5O_COPY_EXPAND_EXT_LINK_FLAG);
VRFY((ret >= 0), "H5Pset_copy_object succeeded");
ret = H5Padd_merge_committed_dtype_path(ocpypl, "foo");
VRFY((ret >= 0), "H5Padd_merge_committed_dtype_path succeeded");
ret = H5Padd_merge_committed_dtype_path(ocpypl, "bar");
VRFY((ret >= 0), "H5Padd_merge_committed_dtype_path succeeded");
ret = test_encode_decode(ocpypl, mpi_rank, recv_proc);
VRFY((ret >= 0), "test_encode_decode succeeded");
ret = H5Pclose(ocpypl);
VRFY((ret >= 0), "H5Pclose succeeded");
/******* ENCODE/DECODE FAPLS *****/
fapl = H5Pcreate(H5P_FILE_ACCESS);
VRFY((fapl >= 0), "H5Pcreate succeeded");
ret = H5Pset_family_offset(fapl, 1024);
VRFY((ret >= 0), "H5Pset_family_offset succeeded");
ret = H5Pset_meta_block_size(fapl, 2098452);
VRFY((ret >= 0), "H5Pset_meta_block_size succeeded");
ret = H5Pset_sieve_buf_size(fapl, 1048576);
VRFY((ret >= 0), "H5Pset_sieve_buf_size succeeded");
ret = H5Pset_alignment(fapl, 2, 1024);
VRFY((ret >= 0), "H5Pset_alignment succeeded");
ret = H5Pset_cache(fapl, 1024, 128, 10485760, 0.3f);
VRFY((ret >= 0), "H5Pset_cache succeeded");
ret = H5Pset_elink_file_cache_size(fapl, 10485760);
VRFY((ret >= 0), "H5Pset_elink_file_cache_size succeeded");
ret = H5Pset_gc_references(fapl, 1);
VRFY((ret >= 0), "H5Pset_gc_references succeeded");
ret = H5Pset_small_data_block_size(fapl, 2048);
VRFY((ret >= 0), "H5Pset_small_data_block_size succeeded");
ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST);
VRFY((ret >= 0), "H5Pset_libver_bounds succeeded");
ret = H5Pset_fclose_degree(fapl, H5F_CLOSE_WEAK);
VRFY((ret >= 0), "H5Pset_fclose_degree succeeded");
ret = H5Pset_multi_type(fapl, H5FD_MEM_GHEAP);
VRFY((ret >= 0), "H5Pset_multi_type succeeded");
ret = H5Pset_mdc_config(fapl, &my_cache_config);
VRFY((ret >= 0), "H5Pset_mdc_config succeeded");
ret = test_encode_decode(fapl, mpi_rank, recv_proc);
VRFY((ret >= 0), "test_encode_decode succeeded");
ret = H5Pclose(fapl);
VRFY((ret >= 0), "H5Pclose succeeded");
/******* ENCODE/DECODE FCPLS *****/
fcpl = H5Pcreate(H5P_FILE_CREATE);
VRFY((fcpl >= 0), "H5Pcreate succeeded");
ret = H5Pset_userblock(fcpl, 1024);
VRFY((ret >= 0), "H5Pset_userblock succeeded");
ret = H5Pset_istore_k(fcpl, 3);
VRFY((ret >= 0), "H5Pset_istore_k succeeded");
ret = H5Pset_sym_k(fcpl, 4, 5);
VRFY((ret >= 0), "H5Pset_sym_k succeeded");
ret = H5Pset_shared_mesg_nindexes(fcpl, 8);
VRFY((ret >= 0), "H5Pset_shared_mesg_nindexes succeeded");
ret = H5Pset_shared_mesg_index(fcpl, 1, H5O_SHMESG_SDSPACE_FLAG, 32);
VRFY((ret >= 0), "H5Pset_shared_mesg_index succeeded");
ret = H5Pset_shared_mesg_phase_change(fcpl, 60, 20);
VRFY((ret >= 0), "H5Pset_shared_mesg_phase_change succeeded");
ret = H5Pset_sizes(fcpl, 8, 4);
VRFY((ret >= 0), "H5Pset_sizes succeeded");
ret = test_encode_decode(fcpl, mpi_rank, recv_proc);
VRFY((ret >= 0), "test_encode_decode succeeded");
ret = H5Pclose(fcpl);
VRFY((ret >= 0), "H5Pclose succeeded");
/******* ENCODE/DECODE STRCPLS *****/
strcpl = H5Pcreate(H5P_STRING_CREATE);
VRFY((strcpl >= 0), "H5Pcreate succeeded");
ret = H5Pset_char_encoding(strcpl, H5T_CSET_UTF8);
VRFY((ret >= 0), "H5Pset_char_encoding succeeded");
ret = test_encode_decode(strcpl, mpi_rank, recv_proc);
VRFY((ret >= 0), "test_encode_decode succeeded");
ret = H5Pclose(strcpl);
VRFY((ret >= 0), "H5Pclose succeeded");
/******* ENCODE/DECODE ACPLS *****/
acpl = H5Pcreate(H5P_ATTRIBUTE_CREATE);
VRFY((acpl >= 0), "H5Pcreate succeeded");
ret = H5Pset_char_encoding(acpl, H5T_CSET_UTF8);
VRFY((ret >= 0), "H5Pset_char_encoding succeeded");
ret = test_encode_decode(acpl, mpi_rank, recv_proc);
VRFY((ret >= 0), "test_encode_decode succeeded");
ret = H5Pclose(acpl);
VRFY((ret >= 0), "H5Pclose succeeded");
}

View File

@ -510,6 +510,9 @@ int main(int argc, char **argv)
"test cause for broken collective io",
PARATESTFILE);
AddTest("edpl", test_plist_ed, NULL,
"encode/decode Property Lists", NULL);
if((mpi_size < 2) && MAINPROCESS) {
printf("File Image Ops daisy chain test needs at least 2 processes.\n");
printf("File Image Ops daisy chain test will be skipped \n");

View File

@ -234,6 +234,7 @@ extern int facc_type; /*Test file access type */
extern int dxfer_coll_type;
/* Test program prototypes */
void test_plist_ed(void);
void multiple_dset_write(void);
void multiple_group_write(void);
void multiple_group_read(void);