summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xconfigure15
-rw-r--r--configure.in1
-rw-r--r--src/.distdep190
-rw-r--r--src/H5A.c4
-rw-r--r--src/H5D.c4
-rw-r--r--src/H5Ofill.c2
-rw-r--r--src/H5P.c2
-rw-r--r--src/H5T.c46
-rw-r--r--src/H5Tconv.c946
-rw-r--r--src/H5Tpkg.h216
-rw-r--r--src/H5Tprivate.h2
-rw-r--r--src/H5Tpublic.h3
-rw-r--r--test/.distdep96
-rw-r--r--test/dtypes.c443
-rw-r--r--test/flush1.c2
-rw-r--r--test/flush2.c9
16 files changed, 1535 insertions, 446 deletions
diff --git a/configure b/configure
index 06eeadd..5e84ec4 100755
--- a/configure
+++ b/configure
@@ -5137,6 +5137,7 @@ if test X = "X$TRACE" -o Xyes = "X$TRACE"; then
CPPFLAGS="$CPPFLAGS -DH5_DEBUG_API"
else
echo "$ac_t""no" 1>&6
+ TRACE_API=no
CPPFLAGS="$CPPFLAGS -UH5_DEBUG_API"
fi
@@ -5151,7 +5152,7 @@ case "$CC_BASENAME" in
# exists.
PARALLEL=mpicc
echo $ac_n "checking for mpirun""... $ac_c" 1>&6
-echo "configure:5155: checking for mpirun" >&5
+echo "configure:5156: checking for mpirun" >&5
# Find the path where mpicc is located.
cmd=`echo $CC |cut -f1 -d' '`
@@ -5196,7 +5197,7 @@ fi
echo $ac_n "checking for parallel support files""... $ac_c" 1>&6
-echo "configure:5200: checking for parallel support files" >&5
+echo "configure:5201: checking for parallel support files" >&5
case "X-$enable_parallel" in
X-|X-no|X-none)
# Either we are not compiling for parallel or the header and library
@@ -5227,7 +5228,7 @@ case "X-$enable_parallel" in
# is missing.
PARALLEL=mpich
echo $ac_n "checking for MPI_Init in -lmpich""... $ac_c" 1>&6
-echo "configure:5231: checking for MPI_Init in -lmpich" >&5
+echo "configure:5232: checking for MPI_Init in -lmpich" >&5
ac_lib_var=`echo mpich'_'MPI_Init | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5235,7 +5236,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lmpich $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5239 "configure"
+#line 5240 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5246,7 +5247,7 @@ int main() {
MPI_Init()
; return 0; }
EOF
-if { (eval echo configure:5250: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:5251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5295,10 +5296,10 @@ EOF
# Display what we found about running programs
echo $ac_n "checking prefix for running on one processor""... $ac_c" 1>&6
-echo "configure:5299: checking prefix for running on one processor" >&5
+echo "configure:5300: checking prefix for running on one processor" >&5
echo "$ac_t""$RUNSERIAL" 1>&6
echo $ac_n "checking prefix for running in parallel""... $ac_c" 1>&6
-echo "configure:5302: checking prefix for running in parallel" >&5
+echo "configure:5303: checking prefix for running in parallel" >&5
echo "$ac_t""$RUNPARALLEL" 1>&6
# Check that we can link a simple MPI and MPI-IO application
diff --git a/configure.in b/configure.in
index 0ad60c9..e2789df 100644
--- a/configure.in
+++ b/configure.in
@@ -541,6 +541,7 @@ if test X = "X$TRACE" -o Xyes = "X$TRACE"; then
CPPFLAGS="$CPPFLAGS -DH5_DEBUG_API"
else
AC_MSG_RESULT(no)
+ TRACE_API=no
CPPFLAGS="$CPPFLAGS -UH5_DEBUG_API"
fi
diff --git a/src/.distdep b/src/.distdep
index 8bcc7a7..cee970e 100644
--- a/src/.distdep
+++ b/src/.distdep
@@ -1376,3 +1376,193 @@ H5TB.lo: \
H5Iprivate.h \
H5Ipublic.h \
H5Eprivate.h
+H5A.lo: \
+ H5A.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5api_adpt.h \
+ H5Iprivate.h \
+ H5Ipublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Dpublic.h \
+ H5Dprivate.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Oprivate.h \
+ H5Opublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h \
+ H5Tpublic.h \
+ H5Sprivate.h \
+ H5Spublic.h \
+ H5Zprivate.h \
+ H5Zpublic.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5MMprivate.h \
+ H5MMpublic.h \
+ H5Pprivate.h \
+ H5Ppublic.h \
+ H5Apkg.h \
+ H5Aprivate.h
+H5D.lo: \
+ H5D.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5api_adpt.h \
+ H5Iprivate.h \
+ H5Ipublic.h \
+ H5ACprivate.h \
+ H5ACpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Dpublic.h \
+ H5Dprivate.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
+ H5Oprivate.h \
+ H5Opublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h \
+ H5Tpublic.h \
+ H5Sprivate.h \
+ H5Spublic.h \
+ H5Zprivate.h \
+ H5Zpublic.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5HLprivate.h \
+ H5HLpublic.h \
+ H5MFprivate.h \
+ H5MFpublic.h \
+ H5MMprivate.h \
+ H5MMpublic.h \
+ H5Pprivate.h \
+ H5Ppublic.h \
+ H5TBprivate.h
+H5Ofill.lo: \
+ H5Ofill.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5api_adpt.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5Ipublic.h \
+ H5Iprivate.h \
+ H5MMprivate.h \
+ H5MMpublic.h \
+ H5Oprivate.h \
+ H5Opublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Dpublic.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h
+H5P.lo: \
+ H5P.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5api_adpt.h \
+ H5Iprivate.h \
+ H5Ipublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Dpublic.h \
+ H5Dprivate.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Oprivate.h \
+ H5Opublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h \
+ H5Tpublic.h \
+ H5Sprivate.h \
+ H5Spublic.h \
+ H5Zprivate.h \
+ H5Zpublic.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5MMprivate.h
+H5T.lo: \
+ H5T.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5api_adpt.h \
+ H5Dprivate.h \
+ H5Dpublic.h \
+ H5Ipublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
+ H5Oprivate.h \
+ H5Opublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h \
+ H5Tpublic.h \
+ H5Sprivate.h \
+ H5Spublic.h \
+ H5Zprivate.h \
+ H5Zpublic.h \
+ H5Iprivate.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5MMprivate.h
+H5Tconv.lo: \
+ H5Tconv.c \
+ H5Iprivate.h \
+ H5Ipublic.h \
+ H5public.h \
+ H5config.h \
+ H5api_adpt.h \
+ H5private.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5MMprivate.h \
+ H5MMpublic.h \
+ H5Tpkg.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Dpublic.h \
+ H5Rprivate.h \
+ H5Rpublic.h \
+ H5Tprivate.h \
+ H5Tpublic.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h
+H5TB.lo: \
+ H5TB.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5api_adpt.h \
+ H5Iprivate.h \
+ H5Ipublic.h \
+ H5Eprivate.h
diff --git a/src/H5A.c b/src/H5A.c
index 2397b2a..fc0efef 100644
--- a/src/H5A.c
+++ b/src/H5A.c
@@ -667,7 +667,7 @@ H5A_write(H5A_t *attr, const H5T_t *mem_type, void *buf)
}
/* Perform data type conversion */
- if (H5T_convert(tpath, src_id, dst_id, nelmts, tconv_buf, bkg_buf)<0) {
+ if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, tconv_buf, bkg_buf)<0) {
HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL,
"data type conversion failed");
}
@@ -835,7 +835,7 @@ H5A_read(H5A_t *attr, const H5T_t *mem_type, void *buf)
}
/* Perform data type conversion. */
- if (H5T_convert(tpath, src_id, dst_id, nelmts, tconv_buf, bkg_buf)<0) {
+ if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, tconv_buf, bkg_buf)<0) {
HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL,
"data type conversion failed");
}
diff --git a/src/H5D.c b/src/H5D.c
index 56db7e0..2b432d3 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -1751,7 +1751,7 @@ printf("%s: check 2.0, src_type_size=%d, dst_type_size=%d, target_size=%d, min_e
/*
* Perform data type conversion.
*/
- if (H5T_convert(tpath, src_id, dst_id, smine_nelmts, tconv_buf,
+ if (H5T_convert(tpath, src_id, dst_id, smine_nelmts, 0, tconv_buf,
bkg_buf)<0) {
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL,
"data type conversion failed");
@@ -2151,7 +2151,7 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
/*
* Perform data type conversion.
*/
- if (H5T_convert(tpath, src_id, dst_id, smine_nelmts, tconv_buf,
+ if (H5T_convert(tpath, src_id, dst_id, smine_nelmts, 0, tconv_buf,
bkg_buf)<0) {
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL,
"data type conversion failed");
diff --git a/src/H5Ofill.c b/src/H5Ofill.c
index 70a9780..5095919 100644
--- a/src/H5Ofill.c
+++ b/src/H5Ofill.c
@@ -359,7 +359,7 @@ H5O_fill_convert(H5O_fill_t *fill, H5T_t *dset_type)
}
/* Do the conversion */
- if (H5T_convert(tpath, src_id, dst_id, 1, buf, bkg)<0) {
+ if (H5T_convert(tpath, src_id, dst_id, 1, 0, buf, bkg)<0) {
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
"data type conversion failed");
}
diff --git a/src/H5P.c b/src/H5P.c
index 0f33e95..1b46535 100644
--- a/src/H5P.c
+++ b/src/H5P.c
@@ -2722,7 +2722,7 @@ H5Pget_fill_value(hid_t plist_id, hid_t type_id, void *value/*out*/)
HDmemcpy(buf, plist->fill.buf, H5T_get_size(plist->fill.type));
/* Do the conversion */
- if (H5T_convert(tpath, src_id, type_id, 1, buf, bkg)<0) {
+ if (H5T_convert(tpath, src_id, type_id, 1, 0, buf, bkg)<0) {
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
"data type conversion failed");
}
diff --git a/src/H5T.c b/src/H5T.c
index 2d77793..5b3262a 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -956,6 +956,9 @@ H5T_init_interface(void)
status |= H5Tregister(H5T_PERS_SOFT, "struct",
compound, compound,
H5T_conv_struct);
+ status |= H5Tregister(H5T_PERS_SOFT, "struct(opt)",
+ compound, compound,
+ H5T_conv_struct_opt);
status |= H5Tregister(H5T_PERS_SOFT, "enum",
enum_type, enum_type,
H5T_conv_enum);
@@ -1355,7 +1358,7 @@ H5T_term_interface(void)
H5T_print_stats(path, &nprint/*in,out*/);
path->cdata.command = H5T_CONV_FREE;
if ((path->func)(FAIL, FAIL, &(path->cdata),
- 0, NULL, NULL)<0) {
+ 0, 0, NULL, NULL)<0) {
#ifdef H5T_DEBUG
if (H5DEBUG(T)) {
fprintf (H5DEBUG(T), "H5T: conversion function "
@@ -4136,7 +4139,7 @@ H5Tregister(H5T_pers_t pers, const char *name, hid_t src_id, hid_t dst_id,
}
HDmemset(&cdata, 0, sizeof cdata);
cdata.command = H5T_CONV_INIT;
- if ((func)(tmp_sid, tmp_did, &cdata, 0, NULL, NULL)<0) {
+ if ((func)(tmp_sid, tmp_did, &cdata, 0, 0, NULL, NULL)<0) {
H5I_dec_ref(tmp_sid);
H5I_dec_ref(tmp_did);
tmp_sid = tmp_did = -1;
@@ -4168,7 +4171,7 @@ H5Tregister(H5T_pers_t pers, const char *name, hid_t src_id, hid_t dst_id,
H5T_print_stats(old_path, &nprint);
old_path->cdata.command = H5T_CONV_FREE;
if ((old_path->func)(tmp_sid, tmp_did, &(old_path->cdata),
- 0, NULL, NULL)<0) {
+ 0, 0, NULL, NULL)<0) {
#ifdef H5T_DEBUG
if (H5DEBUG(T)) {
fprintf (H5DEBUG(T), "H5T: conversion function 0x%08lx "
@@ -4284,7 +4287,7 @@ H5Tunregister(H5T_pers_t pers, const char *name, hid_t src_id, hid_t dst_id,
/* Shut down path */
H5T_print_stats(path, &nprint);
path->cdata.command = H5T_CONV_FREE;
- if ((path->func)(FAIL, FAIL, &(path->cdata), 0, NULL, NULL)<0) {
+ if ((path->func)(FAIL, FAIL, &(path->cdata), 0, 0, NULL, NULL)<0) {
#ifdef H5T_DEBUG
if (H5DEBUG(T)) {
fprintf(H5DEBUG(T), "H5T: conversion function 0x%08lx failed "
@@ -4402,7 +4405,7 @@ H5Tconvert(hid_t src_id, hid_t dst_id, size_t nelmts, void *buf,
"unable to convert between src and dst data types");
}
- if (H5T_convert(tpath, src_id, dst_id, nelmts, buf, background)<0) {
+ if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, buf, background)<0) {
HRETURN_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL,
"data type conversion failed");
}
@@ -6399,7 +6402,7 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name,
HDstrcpy(H5T_g.path[0]->name, "no-op");
H5T_g.path[0]->func = H5T_conv_noop;
H5T_g.path[0]->cdata.command = H5T_CONV_INIT;
- if (H5T_conv_noop(FAIL, FAIL, &(H5T_g.path[0]->cdata), 0,
+ if (H5T_conv_noop(FAIL, FAIL, &(H5T_g.path[0]->cdata), 0, 0,
NULL, NULL)<0) {
#ifdef H5T_DEBUG
if (H5DEBUG(T)) {
@@ -6487,7 +6490,7 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name,
"query");
}
path->cdata.command = H5T_CONV_INIT;
- if ((func)(src_id, dst_id, &(path->cdata), 0, NULL, NULL)<0) {
+ if ((func)(src_id, dst_id, &(path->cdata), 0, 0, NULL, NULL)<0) {
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL,
"unable to initialize conversion function");
}
@@ -6519,7 +6522,7 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name,
}
path->cdata.command = H5T_CONV_INIT;
if ((H5T_g.soft[i].func) (src_id, dst_id, &(path->cdata),
- 0, NULL, NULL)<0) {
+ 0, 0, NULL, NULL)<0) {
HDmemset (&(path->cdata), 0, sizeof(H5T_cdata_t));
H5E_clear(); /*ignore the error*/
} else {
@@ -6541,7 +6544,7 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name,
assert(table==H5T_g.path[md]);
H5T_print_stats(table, &nprint/*in,out*/);
table->cdata.command = H5T_CONV_FREE;
- if ((table->func)(FAIL, FAIL, &(table->cdata), 0, NULL, NULL)<0) {
+ if ((table->func)(FAIL, FAIL, &(table->cdata), 0, 0, NULL, NULL)<0) {
#ifdef H5T_DEBUG
if (H5DEBUG(T)) {
fprintf(H5DEBUG(T), "H5T: conversion function 0x%08lx free "
@@ -6605,12 +6608,20 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name,
* Tuesday, December 15, 1998
*
* Modifications:
- *
+ * Robb Matzke, 1999-06-16
+ * The timers are updated only if H5T debugging is enabled at
+ * runtime in addition to compile time.
+ *
+ * Robb Matzke, 1999-06-16
+ * Added support for non-zero strides. If STRIDE is non-zero
+ * then convert one value at each memory location advancing
+ * STRIDE bytes each time; otherwise assume both source and
+ * destination values are packed.
*-------------------------------------------------------------------------
*/
herr_t
H5T_convert(H5T_path_t *tpath, hid_t src_id, hid_t dst_id, size_t nelmts,
- void *buf, void *bkg)
+ size_t stride, void *buf, void *bkg)
{
#ifdef H5T_DEBUG
H5_timer_t timer;
@@ -6619,17 +6630,20 @@ H5T_convert(H5T_path_t *tpath, hid_t src_id, hid_t dst_id, size_t nelmts,
FUNC_ENTER(H5T_convert, FAIL);
#ifdef H5T_DEBUG
- H5_timer_begin(&timer);
+ if (H5DEBUG(T)) H5_timer_begin(&timer);
#endif
tpath->cdata.command = H5T_CONV_CONV;
- if ((tpath->func)(src_id, dst_id, &(tpath->cdata), nelmts, buf, bkg)<0) {
+ if ((tpath->func)(src_id, dst_id, &(tpath->cdata), nelmts, stride, buf,
+ bkg)<0) {
HRETURN_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL,
"data type conversion failed");
}
#ifdef H5T_DEBUG
- H5_timer_end(&(tpath->stats.timer), &timer);
- tpath->stats.ncalls++;
- tpath->stats.nelmts += nelmts;
+ if (H5DEBUG(T)) {
+ H5_timer_end(&(tpath->stats.timer), &timer);
+ tpath->stats.ncalls++;
+ tpath->stats.nelmts += nelmts;
+ }
#endif
FUNC_LEAVE(SUCCEED);
diff --git a/src/H5Tconv.c b/src/H5Tconv.c
index 3d6bcca..7e2a86b 100644
--- a/src/H5Tconv.c
+++ b/src/H5Tconv.c
@@ -126,155 +126,157 @@ static intn interface_initialize_g = 0;
*/
#define H5T_CONV_sS(S_ALIGN,D_ALIGN,ST,DT) { \
assert(sizeof(ST)<=sizeof(DT)); \
- CI_BEGIN(S_ALIGN, D_ALIGN, ST, DT, nelmts-1, --) { \
- *d = (DT)(*s); \
+ CI_BEGIN(S_ALIGN, D_ALIGN, ST, DT, nelmts-1) { \
+ *((DT*)d) = (DT)(*((ST*)s)); \
} CI_END; \
}
#define H5T_CONV_sU(STYPE,DTYPE,ST,DT) { \
assert(sizeof(ST)<=sizeof(DT)); \
- CI_BEGIN(STYPE, DTYPE, ST, DT, nelmts-1, --) { \
- if (*s<0) { \
+ CI_BEGIN(STYPE, DTYPE, ST, DT, nelmts-1) { \
+ if (*((ST*)s)<0) { \
if (!H5T_overflow_g || \
(H5T_overflow_g)(src_id, dst_id, s, d)<0) { \
- *d = 0; \
+ *((DT*)d) = 0; \
} \
} else { \
- *d = (DT)(*s); \
+ *((DT*)d) = (DT)(*((ST*)s)); \
} \
} CI_END; \
}
#define H5T_CONV_uS(STYPE,DTYPE,ST,DT,D_MAX) { \
assert(sizeof(ST)<=sizeof(DT)); \
- CI_BEGIN(STYPE, DTYPE, ST, DT, nelmts-1, --) { \
- if (*s > (D_MAX)) { \
+ CI_BEGIN(STYPE, DTYPE, ST, DT, nelmts-1) { \
+ if (*((ST*)s) > (D_MAX)) { \
if (!H5T_overflow_g || \
(H5T_overflow_g)(src_id, dst_id, s, d)<0) { \
- *d = (D_MAX); \
+ *((DT*)d) = (D_MAX); \
} \
} else { \
- *d = (DT)(*s); \
+ *((DT*)d) = (DT)(*((ST*)s)); \
} \
} CI_END; \
}
#define H5T_CONV_uU(STYPE,DTYPE,ST,DT) { \
assert(sizeof(ST)<=sizeof(DT)); \
- CI_BEGIN(STYPE, DTYPE, ST, DT, nelmts-1, --) { \
- *d = (DT)(*s); \
+ CI_BEGIN(STYPE, DTYPE, ST, DT, nelmts-1) { \
+ *((DT*)d) = (DT)(*((ST*)s)); \
} CI_END; \
}
#define H5T_CONV_Ss(STYPE,DTYPE,ST,DT,D_MIN,D_MAX) { \
assert(sizeof(ST)>=sizeof(DT)); \
- CI_BEGIN(STYPE, DTYPE, ST, DT, 0, ++) { \
- if (*s > (DT)(D_MAX)) { \
+ CI_BEGIN(STYPE, DTYPE, ST, DT, 0) { \
+ if (*((ST*)s) > (DT)(D_MAX)) { \
if (!H5T_overflow_g || \
(H5T_overflow_g)(src_id, dst_id, s, d)<0) { \
- *d = (D_MAX); \
+ *((DT*)d) = (D_MAX); \
} \
- } else if (*s < (D_MIN)) { \
+ } else if (*((ST*)s) < (D_MIN)) { \
if (!H5T_overflow_g || \
(H5T_overflow_g)(src_id, dst_id, s, d)<0) { \
- *d = (D_MIN); \
+ *((DT*)d) = (D_MIN); \
} \
} else { \
- *d = (DT)(*s); \
+ *((DT*)d) = (DT)(*((ST*)s)); \
} \
} CI_END; \
}
#define H5T_CONV_Su(STYPE,DTYPE,ST,DT,D_MAX) { \
assert(sizeof(ST)>=sizeof(DT)); \
- CI_BEGIN(STYPE, DTYPE, ST, DT, 0, ++) { \
- if (*s < 0) { \
+ CI_BEGIN(STYPE, DTYPE, ST, DT, 0) { \
+ if (*((ST*)s) < 0) { \
if (!H5T_overflow_g || \
(H5T_overflow_g)(src_id, dst_id, s, d)<0) { \
- *d = 0; \
+ *((DT*)d) = 0; \
} \
- } else if (sizeof(ST)>sizeof(DT) && *s>(D_MAX)) { \
+ } else if (sizeof(ST)>sizeof(DT) && *((ST*)s)>(D_MAX)) { \
/*sign vs. unsign ok in previous line*/ \
if (!H5T_overflow_g || \
(H5T_overflow_g)(src_id, dst_id, s, d)<0) { \
- *d = (D_MAX); \
+ *((DT*)d) = (D_MAX); \
} \
} else { \
- *d = (DT)(*s); \
+ *((DT*)d) = (DT)(*((ST*)s)); \
} \
} CI_END; \
}
#define H5T_CONV_Us(STYPE,DTYPE,ST,DT,D_MAX) { \
assert(sizeof(ST)>=sizeof(DT)); \
- CI_BEGIN(STYPE, DTYPE, ST, DT, 0, ++) { \
- if (*s > (D_MAX)) { \
+ CI_BEGIN(STYPE, DTYPE, ST, DT, 0) { \
+ if (*((ST*)s) > (D_MAX)) { \
if (!H5T_overflow_g || \
(H5T_overflow_g)(src_id, dst_id, s, d)<0) { \
- *d = (D_MAX); \
+ *((DT*)d) = (D_MAX); \
} \
} else { \
- *d = (DT)(*s); \
+ *((DT*)d) = (DT)(*s); \
} \
} CI_END; \
}
#define H5T_CONV_Uu(STYPE,DTYPE,ST,DT,D_MAX) { \
assert(sizeof(ST)>=sizeof(DT)); \
- CI_BEGIN(STYPE, DTYPE, ST, DT, 0, ++) { \
- if (*s > (D_MAX)) { \
+ CI_BEGIN(STYPE, DTYPE, ST, DT, 0) { \
+ if (*((ST*)s) > (D_MAX)) { \
if (!H5T_overflow_g || \
(H5T_overflow_g)(src_id, dst_id, s, d)<0) { \
- *d = (D_MAX); \
+ *((DT*)d) = (D_MAX); \
} \
} else { \
- *d = (DT)(*s); \
+ *((DT*)d) = (DT)(*((ST*)s)); \
} \
} CI_END; \
}
#define H5T_CONV_su(STYPE,DTYPE,ST,DT) { \
assert(sizeof(ST)==sizeof(DT)); \
- CI_BEGIN(STYPE, DTYPE, ST, DT, 0, ++) { \
- if (*s < 0) { \
+ CI_BEGIN(STYPE, DTYPE, ST, DT, 0) { \
+ if (*((ST*)s) < 0) { \
if (!H5T_overflow_g || \
(H5T_overflow_g)(src_id, dst_id, s, d)<0) { \
- *d = 0; \
+ *((DT*)d) = 0; \
} \
} else { \
- *d = (DT)(*s); \
+ *((DT*)d) = (DT)(*((ST*)s)); \
} \
} CI_END; \
}
#define H5T_CONV_us(STYPE,DTYPE,ST,DT,D_MAX) { \
assert(sizeof(ST)==sizeof(DT)); \
- CI_BEGIN(STYPE, DTYPE, ST, DT, 0, ++) { \
- if (*s > (D_MAX)) { \
+ CI_BEGIN(STYPE, DTYPE, ST, DT, 0) { \
+ if (*((ST*)s) > (D_MAX)) { \
if (!H5T_overflow_g || \
(H5T_overflow_g)(src_id, dst_id, s, d)<0) { \
- *d = (D_MAX); \
+ *((DT*)d) = (D_MAX); \
} \
} else { \
- *d = (DT)(*s); \
+ *((DT*)d) = (DT)(*((ST*)s)); \
} \
} CI_END; \
}
/* The first part of every integer hardware conversion macro */
-#define CI_BEGIN(STYPE,DTYPE,ST,DT,STRT,DIR) { \
+#define CI_BEGIN(STYPE,DTYPE,ST,DT,STRT) { \
size_t elmtno; /*element number */ \
- ST *src, *s; /*source buffer */ \
- DT *dst, *d; /*destination buffer */ \
+ uint8_t *src, *s; /*source buffer */ \
+ uint8_t *dst, *d; /*destination buffer */ \
H5T_t *st, *dt; /*data type descriptors */ \
long_long aligned; /*largest integer type, aligned */ \
hbool_t s_mv, d_mv; /*move data to align it? */ \
size_t dt_size=sizeof(DT); /*needed by CI_END macro */ \
H5T_conv_hw_t *priv = cdata->priv; /*private data */ \
- char *nonaligned; /*temporary char pointer */ \
+ size_t s_stride, d_stride; /*src and dst strides */ \
+ int direction; /*1=left-to-right, -1=rt-to-lt */ \
\
switch (cdata->command) { \
case H5T_CONV_INIT: \
+ /* Sanity check and initialize statistics */ \
cdata->need_bkg = H5T_BKG_NO; \
if (NULL==(st=H5I_object(src_id)) || \
NULL==(dt=H5I_object(dst_id))) { \
@@ -290,40 +292,66 @@ static intn interface_initialize_g = 0;
"memory allocation failed"); \
} \
break; \
+ \
case H5T_CONV_FREE: \
+ /* Print and free statistics */ \
CI_PRINT_STATS(STYPE,DTYPE); \
cdata->priv = H5MM_xfree(cdata->priv); \
break; \
+ \
case H5T_CONV_CONV: \
- src = (ST*)buf+(STRT); \
- dst = (DT*)buf+(STRT); \
+ /* Initialize pointers */ \
+ if (stride) { \
+ s_stride = d_stride = stride; \
+ src = dst = buf; \
+ direction = 1; \
+ } else if (STRT) { \
+ s_stride = sizeof(ST); \
+ d_stride = sizeof(DT); \
+ src = (uint8_t*)buf+(STRT)*s_stride; \
+ dst = (uint8_t*)buf+(STRT)*d_stride; \
+ direction = -1; \
+ } else { \
+ s_stride = sizeof(ST); \
+ d_stride = sizeof(DT); \
+ src = dst = buf; \
+ direction = 1; \
+ } \
+ \
+ /* Is alignment required for source or dest? */ \
s_mv = H5T_NATIVE_##STYPE##_ALIGN_g>1 && \
((size_t)buf%H5T_NATIVE_##STYPE##_ALIGN_g || \
- sizeof(ST)%H5T_NATIVE_##STYPE##_ALIGN_g); \
+ s_stride%H5T_NATIVE_##STYPE##_ALIGN_g); \
d_mv = H5T_NATIVE_##DTYPE##_ALIGN_g>1 && \
((size_t)buf%H5T_NATIVE_##DTYPE##_ALIGN_g || \
- sizeof(DT)%H5T_NATIVE_##DTYPE##_ALIGN_g); \
+ d_stride%H5T_NATIVE_##DTYPE##_ALIGN_g); \
if (s_mv) priv->s_aligned += nelmts; \
if (d_mv) priv->d_aligned += nelmts; \
- for (elmtno=0; elmtno<nelmts; elmtno++, DIR src, DIR dst) { \
+ \
+ for (elmtno=0; elmtno<nelmts; elmtno++) { \
+ /* Alignment */ \
if (s_mv) { \
- /*temporary char pointer for solaris' sake*/ \
- nonaligned = (char*)src; \
- HDmemcpy(&aligned, nonaligned, sizeof(ST)); \
- s = (ST*)&aligned; \
+ HDmemcpy(&aligned, src, sizeof(ST)); \
+ s = (uint8_t*)&aligned; \
} else { \
s = src; \
} \
if (d_mv) { \
- d = (DT*)&aligned; \
+ d = (uint8_t*)&aligned; \
} else { \
d = dst; \
- }
- /* ... user-defined stuff here ... */
+ } \
+ /* ... user-defined stuff here -- the conversion ... */
#define CI_END \
+ /* Copy destination to final location */ \
if (d_mv) HDmemcpy(dst, &aligned, dt_size); \
+ \
+ /* Advance pointers */ \
+ src += direction * s_stride; \
+ dst += direction * d_stride; \
} \
break; \
+ \
default: \
HRETURN_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, \
"unknown conversion command"); \
@@ -366,9 +394,9 @@ static intn interface_initialize_g = 0;
*-------------------------------------------------------------------------
*/
herr_t
-H5T_conv_noop(hid_t UNUSED src_id, hid_t UNUSED dst_id,
- H5T_cdata_t *cdata, size_t UNUSED nelmts,
- void UNUSED *buf, void UNUSED *background)
+H5T_conv_noop(hid_t UNUSED src_id, hid_t UNUSED dst_id, H5T_cdata_t *cdata,
+ size_t UNUSED nelmts, size_t UNUSED stride, void UNUSED *buf,
+ void UNUSED *background)
{
FUNC_ENTER(H5T_conv_noop, FAIL);
@@ -406,12 +434,18 @@ H5T_conv_noop(hid_t UNUSED src_id, hid_t UNUSED dst_id,
* Tuesday, January 13, 1998
*
* Modifications:
+ * Robb Matzke, 1999-06-16
+ * Added the `stride' argument. If its value is non-zero then we
+ * stride through memory converting one value at each location;
+ * otherwise we assume that the values should be packed.
*
+ * Robb Matzke, 1999-06-16
+ * Added support for bitfields.
*-------------------------------------------------------------------------
*/
herr_t
H5T_conv_order(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
- void *_buf, void UNUSED *background)
+ size_t stride, void *_buf, void UNUSED *background)
{
uint8_t *buf = (uint8_t*)_buf;
uint8_t tmp;
@@ -442,6 +476,7 @@ H5T_conv_order(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
}
switch (src->type) {
case H5T_INTEGER:
+ case H5T_BITFIELD:
/* nothing to check */
break;
@@ -475,7 +510,7 @@ H5T_conv_order(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
}
md = src->size / 2;
- for (i=0; i<nelmts; i++, buf+=src->size) {
+ for (i=0; i<nelmts; i++, buf+=stride?stride:src->size) {
for (j=0; j<md; j++) {
tmp = buf[j];
buf[j] = buf[src->size-(j+1)];
@@ -507,12 +542,16 @@ H5T_conv_order(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
* Thursday, May 20, 1999
*
* Modifications:
- *
+ * Robb Matzke, 1999-06-16
+ * Added support for non-zero strides. If STRIDE is non-zero
+ * then convert one value at each memory location advancing
+ * STRIDE bytes each time; otherwise assume both source and
+ * destination values are packed.
*-------------------------------------------------------------------------
*/
herr_t
H5T_conv_b_b(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
- void *_buf, void UNUSED *background)
+ size_t stride, void *_buf, void UNUSED *background)
{
uint8_t *buf = (uint8_t*)_buf;
H5T_t *src=NULL, *dst=NULL; /*source and dest data types */
@@ -566,7 +605,7 @@ H5T_conv_b_b(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
* how many of the elements have the source and destination areas
* overlapping?
*/
- if (src->size==dst->size) {
+ if (src->size==dst->size || stride) {
sp = dp = (uint8_t*)buf;
direction = 1;
olap = nelmts;
@@ -691,8 +730,13 @@ H5T_conv_b_b(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
* should copy the value to the true destination buffer.
*/
if (d==dbuf) HDmemcpy (dp, d, dst->size);
- sp += direction * src->size;
- dp += direction * dst->size;
+ if (stride) {
+ sp += direction * stride;
+ dp += direction * stride;
+ } else {
+ sp += direction * src->size;
+ dp += direction * dst->size;
+ }
}
break;
@@ -871,23 +915,24 @@ H5T_conv_struct_init (H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata)
FUNC_LEAVE (SUCCEED);
}
-/*-------------------------------------------------------------------------
+/*-------------------------------------------------------------------------
* Function: H5T_conv_struct
*
* Purpose: Converts between compound data types. This is a soft
* conversion function. The algorithm is basically:
*
- * For I=1..NUM_MEMBERS do
- * If sizeof detination type <= sizeof source type then
- * Convert member to destination type;
- * Move member as far left as possible;
+ * For each element do
+ * For I=1..NELMTS do
+ * If sizeof detination type <= sizeof source type then
+ * Convert member to destination type;
+ * Move member as far left as possible;
*
- * For I=NUM_MEMBERS..1 do
- * If not destination type then
- * Convert member to destination type;
- * Move member to correct position in BACKGROUND
+ * For I=NELMTS..1 do
+ * If not destination type then
+ * Convert member to destination type;
+ * Move member to correct position in BKG
*
- * Copy BACKGROUND to BUF
+ * Copy BKG to BUF
*
* Return: Non-negative on success/Negative on failure
*
@@ -895,12 +940,16 @@ H5T_conv_struct_init (H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata)
* Thursday, January 22, 1998
*
* Modifications:
- *
+ * Robb Matzke, 1999-06-16
+ * Added support for non-zero strides. If STRIDE is non-zero
+ * then convert one value at each memory location advancing
+ * STRIDE bytes each time; otherwise assume both source and
+ * destination values are packed.
*-------------------------------------------------------------------------
*/
herr_t
H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
- void *_buf, void *_bkg)
+ size_t stride, void *_buf, void *_bkg)
{
uint8_t *buf = (uint8_t *)_buf; /*cast for pointer arithmetic */
uint8_t *bkg = (uint8_t *)_bkg; /*background pointer arithmetic */
@@ -981,7 +1030,9 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
/*
* Direction of conversion.
*/
- if (dst->size <= src->size) {
+ if (stride) {
+ src_delta = dst_delta = stride;
+ } else if (dst->size <= src->size) {
src_delta = src->size;
dst_delta = dst->size;
} else {
@@ -1010,6 +1061,7 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
priv->src_memb_id[i],
priv->dst_memb_id[src2dst[i]],
priv->memb_nelmts[i],
+ 0, /*no striding*/
buf + src_memb->offset,
bkg + dst_memb->offset)<0) {
HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
@@ -1044,6 +1096,7 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
priv->src_memb_id[i],
priv->dst_memb_id[src2dst[i]],
priv->memb_nelmts[i],
+ 0, /*no striding*/
buf+offset, bkg+dst_memb->offset)<0) {
HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
"unable to convert compound data type "
@@ -1079,6 +1132,252 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
FUNC_LEAVE (SUCCEED);
}
+
+/*-------------------------------------------------------------------------
+ * Function: H5T_conv_struct_opt
+ *
+ * Purpose: Converts between compound data types in a manner more
+ * efficient than the general-purpose H5T_conv_struct()
+ * function. This function isn't applicable if the destination
+ * is larger than the source type. This is a soft conversion
+ * function. The algorithm is basically:
+ *
+ * For each member of the struct
+ * If sizeof detination type <= sizeof source type then
+ * Convert member to destination type for all elements
+ * Move member as far left as possible for all elements
+ *
+ * For each member of the struct (in reverse order)
+ * If not destination type then
+ * Convert member to destination type for all elements
+ * Move member to correct position in BKG for all elements
+ *
+ * Copy BKG to BUF for all elements
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Robb Matzke
+ * Thursday, January 22, 1998
+ *
+ * Modifications:
+ * Robb Matzke, 1999-06-16
+ * Added support for non-zero strides. If STRIDE is non-zero
+ * then convert one value at each memory location advancing
+ * STRIDE bytes each time; otherwise assume both source and
+ * destination values are packed.
+ *
+ * Robb Matzke, 1999-06-16
+ * If the source and destination data structs are the same size
+ * then we can convert on a field-by-field basis instead of an
+ * element by element basis. In other words, for all struct
+ * elements being converted by this function call, first convert
+ * all of the field1's, then all field2's, etc. This can
+ * drastically reduce the number of calls to H5T_convert() and
+ * thereby eliminate most of the conversion constant overhead.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_struct_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+ size_t nelmts, size_t stride, void *_buf, void *_bkg)
+{
+ uint8_t *buf = (uint8_t *)_buf; /*cast for pointer arithmetic */
+ uint8_t *bkg = (uint8_t *)_bkg; /*background pointer arithmetic */
+ uint8_t *xbuf = NULL; /*temporary pointer into `buf' */
+ uint8_t *xbkg = NULL; /*temporary pointer into `bkg' */
+ H5T_t *src = NULL; /*source data type */
+ H5T_t *dst = NULL; /*destination data type */
+ intn *src2dst = NULL; /*maps src member to dst member */
+ H5T_cmemb_t *src_memb = NULL; /*source struct member descript.*/
+ H5T_cmemb_t *dst_memb = NULL; /*destination struct memb desc. */
+ size_t src_memb_size; /*sizeof single source member */
+ size_t dst_memb_size; /*sizeof single destination memb*/
+ size_t offset; /*byte offset wrt struct */
+ uintn elmtno; /*element counter */
+ intn i, j; /*counters */
+ H5T_conv_struct_t *priv = (H5T_conv_struct_t *)(cdata->priv);
+
+ FUNC_ENTER (H5T_conv_struct_opt, FAIL);
+
+ switch (cdata->command) {
+ case H5T_CONV_INIT:
+ /*
+ * First, determine if this conversion function applies to the
+ * conversion path SRC_ID-->DST_ID. If not, return failure;
+ * otherwise initialize the `priv' field of `cdata' with information
+ * that remains (almost) constant for this conversion path.
+ */
+ if (H5I_DATATYPE != H5I_get_type(src_id) ||
+ NULL == (src = H5I_object(src_id)) ||
+ H5I_DATATYPE != H5I_get_type(dst_id) ||
+ NULL == (dst = H5I_object(dst_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+ }
+ assert (H5T_COMPOUND==src->type);
+ assert (H5T_COMPOUND==dst->type);
+
+ /*
+ * This optimized version only works when the source and destination
+ * datatypes are the same size.
+ */
+ if (src->size < dst->size) {
+ HRETURN_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL,
+ "conversion is unsupported by this function");
+ }
+
+ /* Initialize data which is relatively constant */
+ if (H5T_conv_struct_init (src, dst, cdata)<0) {
+ HRETURN_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ "unable to initialize conversion data");
+ }
+ break;
+
+ case H5T_CONV_FREE:
+ /*
+ * Free the private conversion data.
+ */
+ H5MM_xfree(priv->src2dst);
+ H5MM_xfree(priv->src_memb_id);
+ H5MM_xfree(priv->dst_memb_id);
+ H5MM_xfree(priv->memb_path);
+ H5MM_xfree(priv->memb_nelmts);
+ cdata->priv = priv = H5MM_xfree (priv);
+ break;
+
+ case H5T_CONV_CONV:
+ /*
+ * Conversion.
+ */
+ if (H5I_DATATYPE != H5I_get_type(src_id) ||
+ NULL == (src = H5I_object(src_id)) ||
+ H5I_DATATYPE != H5I_get_type(dst_id) ||
+ NULL == (dst = H5I_object(dst_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+ }
+ assert(src->size>=dst->size);
+ assert(priv);
+ assert(bkg && cdata->need_bkg>=H5T_BKG_TEMP);
+
+ if (cdata->recalc &&
+ H5T_conv_struct_init (src, dst, cdata)<0) {
+ HRETURN_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ "unable to initialize conversion data");
+ }
+
+ /*
+ * Insure that members are sorted.
+ */
+ H5T_sort_value(src, NULL);
+ H5T_sort_value(dst, NULL);
+ src2dst = priv->src2dst;
+
+ /*
+ * For each member where the destination is not larger than the
+ * source, stride through all the elements converting only that
+ * member in each element.
+ *
+ * Shift struct member (converted or not) as far left as possible
+ * within each element.
+ */
+ for (i=0, offset=0; i<src->u.compnd.nmembs; i++) {
+ if (src2dst[i]<0) continue;
+ src_memb = src->u.compnd.memb + i;
+ dst_memb = dst->u.compnd.memb + src2dst[i];
+ src_memb_size = src_memb->size / priv->memb_nelmts[i];
+ dst_memb_size = dst_memb->size / priv->memb_nelmts[i];
+
+ for (j=0; j<(intn)(priv->memb_nelmts[i]); j++) {
+ if (dst_memb_size <= src_memb_size) {
+ xbuf = buf + src_memb->offset + j*src_memb_size;
+ xbkg = bkg + dst_memb->offset + j*dst_memb_size;
+ if (H5T_convert(priv->memb_path[i],
+ priv->src_memb_id[i],
+ priv->dst_memb_id[src2dst[i]],
+ nelmts,
+ stride?stride:src->size,
+ xbuf, xbkg)<0) {
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ "unable to convert compound data "
+ "type member");
+ }
+ for (xbuf=buf, elmtno=0; elmtno<nelmts; elmtno++) {
+ HDmemmove(xbuf+offset,
+ xbuf+src_memb->offset+j*src_memb_size,
+ dst_memb_size);
+ xbuf += stride ? stride : src->size;
+ }
+ offset += dst_memb_size;
+ } else {
+ for (xbuf=buf, elmtno=0; elmtno<nelmts; elmtno++) {
+ HDmemmove(xbuf+offset,
+ xbuf+src_memb->offset+j*src_memb_size,
+ src_memb_size);
+ xbuf += stride ? stride : src->size;
+ }
+ offset += src_memb_size;
+ }
+ }
+ }
+
+ /*
+ * Work from right to left, converting those members that weren't
+ * converted in the previous loop -- those members where the
+ * destination is larger than the source.
+ *
+ * Move the member (converted in this loop or not) to the final
+ * position in the bkg buffer.
+ */
+ for (i=src->u.compnd.nmembs-1; i>=0; --i) {
+ if (src2dst[i]<0) continue;
+ src_memb = src->u.compnd.memb + i;
+ dst_memb = dst->u.compnd.memb + src2dst[i];
+ src_memb_size = src_memb->size / priv->memb_nelmts[i];
+ dst_memb_size = dst_memb->size / priv->memb_nelmts[i];
+
+ for (j=priv->memb_nelmts[i]-1; j>=0; --j) {
+ if (dst_memb_size > src_memb_size) {
+ offset -= src_memb_size;
+ xbuf = buf + offset;
+ xbkg = bkg + dst_memb->offset + j*dst_memb_size;
+ if (H5T_convert(priv->memb_path[i],
+ priv->src_memb_id[i],
+ priv->dst_memb_id[src2dst[i]],
+ nelmts, stride?stride:src->size,
+ xbuf, xbkg)<0) {
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ "unable to convert compound data "
+ "type member");
+ }
+ } else {
+ offset -= dst_memb_size;
+ xbuf = buf + offset;
+ xbkg = bkg + dst_memb->offset + j*dst_memb_size;
+ }
+
+ for (elmtno=0; elmtno<nelmts; elmtno++) {
+ HDmemmove(xbkg, xbuf, dst_memb_size);
+ xbuf += stride ? stride : src->size;
+ xbkg += stride ? stride : dst->size;
+ }
+ }
+ }
+
+ /* Move background into buffer */
+ for (xbuf=buf, xbkg=bkg, elmtno=0; elmtno<nelmts; elmtno++) {
+ HDmemmove(xbuf, xbkg, dst->size);
+ xbuf += stride ? stride : dst->size;
+ xbkg += stride ? stride : dst->size;
+ }
+ break;
+
+ default:
+ /* Some other command we don't know about yet.*/
+ HRETURN_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL,
+ "unknown conversion command");
+ }
+
+ FUNC_LEAVE (SUCCEED);
+}
+
/*-------------------------------------------------------------------------
* Function: H5T_conv_enum_init
@@ -1237,12 +1536,16 @@ H5T_conv_enum_init(H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata)
* Monday, January 4, 1999
*
* Modifications:
- *
+ * Robb Matzke, 1999-06-16
+ * Added support for non-zero strides. If STRIDE is non-zero
+ * then convert one value at each memory location advancing
+ * STRIDE bytes each time; otherwise assume both source and
+ * destination values are packed.
*-------------------------------------------------------------------------
*/
herr_t
-H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *_buf, void UNUSED *bkg)
+H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
+ size_t stride, void *_buf, void UNUSED *bkg)
{
uint8_t *buf = (uint8_t*)_buf; /*cast for pointer arithmetic */
H5T_t *src=NULL, *dst=NULL; /*src and dst data types */
@@ -1313,7 +1616,10 @@ H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
/*
* Direction of conversion.
*/
- if (dst->size <= src->size) {
+ if (stride) {
+ src_delta = dst_delta = stride;
+ s = d = buf;
+ } else if (dst->size <= src->size) {
src_delta = (int)src->size; /*overflow shouldn't be possible*/
dst_delta = (int)dst->size; /*overflow shouldn't be possible*/
s = d = buf;
@@ -1389,15 +1695,17 @@ H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
* Function: H5T_conv_vlen
*
* Purpose: Converts between VL data types in memory and on disk.
- * This is a soft conversion function. The algorithm is basically:
- *
- * For every VL struct in the main buffer:
- * Allocate space for temporary dst VL data (reuse buffer if possible)
- * Copy VL data from src buffer into dst buffer
- * Convert VL data into dst representation
- * Allocate buffer in dst heap
- * Write dst VL data into dst heap
- * Store (heap ID or pointer) and length in main dst buffer
+ * This is a soft conversion function. The algorithm is
+ * basically:
+ *
+ * For every VL struct in the main buffer:
+ * 1. Allocate space for temporary dst VL data (reuse buffer
+ * if possible)
+ * 2. Copy VL data from src buffer into dst buffer
+ * 3. Convert VL data into dst representation
+ * 4. Allocate buffer in dst heap
+ * 5. Write dst VL data into dst heap
+ * 6. Store (heap ID or pointer) and length in main dst buffer
*
* Return: Non-negative on success/Negative on failure
*
@@ -1410,27 +1718,41 @@ H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
- void *_buf, void UNUSED *_bkg)
+ size_t stride, void *_buf, void UNUSED *_bkg)
{
- H5T_path_t *tpath; /* Type conversion path */
- hid_t tsrc_id = -1, tdst_id = -1;/*temporary type atoms */
- H5T_t *src = NULL; /*source data type */
- H5T_t *dst = NULL; /*destination data type */
- size_t olap; /*num overlapping elements */
- uint8_t *s, *sp, *d, *dp; /*source and dest traversal ptrs*/
- uint8_t **dptr; /* Pointer to correct destination pointer */
- size_t src_delta, dst_delta; /*source & destination stride */
- hsize_t seq_len; /* The number of elements in the current sequence */
- size_t src_base_size, dst_base_size; /*source & destination base size */
- size_t src_size, dst_size; /*source & destination total size in bytes */
- hid_t conv_buf_id; /* ID for comversion buffer */
- void *conv_buf_ptr; /* Temporary conversion buffer */
- hsize_t conv_buf_size; /* Size of conversion buffer in bytes */
- uint8_t dbuf[64],*dbuf_ptr=dbuf; /*temp destination buffer */
- intn direction; /*direction of traversal */
- uintn elmtno;
+ H5T_path_t *tpath; /* Type conversion path */
+ hid_t tsrc_id = -1, tdst_id = -1;/*temporary type atoms */
+ H5T_t *src = NULL; /*source data type */
+ H5T_t *dst = NULL; /*destination data type */
+ size_t olap; /*num overlapping elements */
+ uint8_t *s, *sp, *d, *dp; /*source and dest traversal ptrs */
+ uint8_t **dptr; /*pointer to correct destination pointer*/
+ size_t src_delta, dst_delta; /*source & destination stride */
+ hsize_t seq_len; /*the number of elements in the current sequence*/
+ size_t src_base_size, dst_base_size;/*source & destination base size*/
+ size_t src_size, dst_size;/*source & destination total size in bytes*/
+ hid_t conv_buf_id; /*ID for comversion buffer */
+ void *conv_buf_ptr; /*temporary conversion buffer */
+ hsize_t conv_buf_size; /*size of conversion buffer in bytes */
+ uint8_t dbuf[64],*dbuf_ptr=dbuf;/*temp destination buffer */
+ intn direction; /*direction of traversal */
+ uintn elmtno; /*element number counter */
+
+ FUNC_ENTER (H5T_conv_vlen, FAIL);
- FUNC_ENTER (H5T_conv_struct, FAIL);
+#ifndef LATER
+ /*
+ * If `stride' is non-zero then stride through memory converting one
+ * element in place at each memory location; otherwise assume that the
+ * source and destination buffers are packed.
+ *
+ * Quincey, I'll let you implement this since this routine is probably
+ * changing, otherwise let me know when you're done working on it and
+ * I'll implement it like H5T_conv_struct(). I also added a `0' to the
+ * argument list for the H5T_convert() call below. --rpm 1999-06-16
+ */
+ assert(0==stride);
+#endif
switch (cdata->command) {
case H5T_CONV_INIT:
@@ -1546,7 +1868,7 @@ H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
HRETURN_ERROR(H5E_DATATYPE, H5E_READERROR, FAIL, "can't read VL data");
/* Convert VL sequence */
- if (H5T_convert(tpath, tsrc_id, tdst_id, seq_len, conv_buf_ptr, NULL)<0)
+ if (H5T_convert(tpath, tsrc_id, tdst_id, seq_len, 0, conv_buf_ptr, NULL)<0)
HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "datatype conversion failed");
/* Allocate new VL buffer */
@@ -1605,15 +1927,19 @@ H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
* Wednesday, June 10, 1998
*
* Modifications:
- *
- * Robb Matzke, 7 Jul 1998
- * Added overflow handling.
- *
+ * Robb Matzke, 7 Jul 1998
+ * Added overflow handling.
+ *
+ * Robb Matzke, 1999-06-16
+ * Added support for non-zero strides. If STRIDE is non-zero
+ * then convert one value at each memory location advancing
+ * STRIDE bytes each time; otherwise assume both source and
+ * destination values are packed.
*-------------------------------------------------------------------------
*/
herr_t
-H5T_conv_i_i (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+H5T_conv_i_i (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
+ size_t stride, void *buf, void UNUSED *bkg)
{
H5T_t *src = NULL; /*source data type */
H5T_t *dst = NULL; /*destination data type */
@@ -1671,7 +1997,7 @@ H5T_conv_i_i (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
* how many of the elements have the source and destination areas
* overlapping?
*/
- if (src->size==dst->size) {
+ if (src->size==dst->size || stride) {
sp = dp = (uint8_t*)buf;
direction = 1;
olap = nelmts;
@@ -1936,8 +2262,13 @@ H5T_conv_i_i (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
* should copy the value to the true destination buffer.
*/
if (d==dbuf) HDmemcpy (dp, d, dst->size);
- sp += direction * src->size;
- dp += direction * dst->size;
+ if (stride) {
+ sp += direction * stride;
+ dp += direction * stride;
+ } else {
+ sp += direction * src->size;
+ dp += direction * dst->size;
+ }
}
break;
@@ -1964,15 +2295,19 @@ H5T_conv_i_i (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
* Tuesday, June 23, 1998
*
* Modifications:
- *
- * Robb Matzke, 7 Jul 1998
- * Added overflow handling.
- *
+ * Robb Matzke, 7 Jul 1998
+ * Added overflow handling.
+ *
+ * Robb Matzke, 1999-06-16
+ * Added support for non-zero strides. If STRIDE is non-zero
+ * then convert one value at each memory location advancing
+ * STRIDE bytes each time; otherwise assume both source and
+ * destination values are packed.
*-------------------------------------------------------------------------
*/
herr_t
-H5T_conv_f_f (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+H5T_conv_f_f (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
+ size_t stride, void *buf, void UNUSED *bkg)
{
/* Traversal-related variables */
H5T_t *src_p; /*source data type */
@@ -2051,7 +2386,7 @@ H5T_conv_f_f (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
* how many of the elements have the source and destination areas
* overlapping?
*/
- if (src_p->size==dst_p->size) {
+ if (src_p->size==dst_p->size || stride) {
sp = dp = (uint8_t*)buf;
direction = 1;
olap = nelmts;
@@ -2341,8 +2676,13 @@ H5T_conv_f_f (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
next:
if (d==dbuf) HDmemcpy (dp, d, dst_p->size);
- sp += direction * src_p->size;
- dp += direction * dst_p->size;
+ if (stride) {
+ sp += direction * stride;
+ dp += direction * stride;
+ } else {
+ sp += direction * src_p->size;
+ dp += direction * dst_p->size;
+ }
}
break;
@@ -2367,12 +2707,16 @@ H5T_conv_f_f (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
* Friday, August 7, 1998
*
* Modifications:
- *
+ * Robb Matzke, 1999-06-16
+ * Added support for non-zero strides. If STRIDE is non-zero
+ * then convert one value at each memory location advancing
+ * STRIDE bytes each time; otherwise assume both source and
+ * destination values are packed.
*-------------------------------------------------------------------------
*/
herr_t
H5T_conv_s_s (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void UNUSED *bkg)
+ size_t stride, void *buf, void UNUSED *bkg)
{
H5T_t *src=NULL; /*source data type */
H5T_t *dst=NULL; /*destination data type */
@@ -2430,7 +2774,7 @@ H5T_conv_s_s (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
* how many of the elements have the source and destination areas
* overlapping?
*/
- if (src->size==dst->size) {
+ if (src->size==dst->size || stride) {
/*
* When the source and destination are the same size we can do
* all the conversions in place.
@@ -2475,7 +2819,7 @@ H5T_conv_s_s (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
}
#ifndef NDEBUG
/* I don't quite trust the overlap calculations yet --rpm */
- if (src->size==dst->size) {
+ if (src->size==dst->size || stride) {
assert(s==d);
} else if (d==dbuf) {
assert((dp>=sp && dp<sp+src->size) ||
@@ -2567,8 +2911,13 @@ H5T_conv_s_s (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
* should copy the value to the true destination buffer.
*/
if (d==dbuf) HDmemcpy(dp, d, dst->size);
- sp += direction * src->size;
- dp += direction * dst->size;
+ if (stride) {
+ sp += direction * stride;
+ dp += direction * stride;
+ } else {
+ sp += direction * src->size;
+ dp += direction * dst->size;
+ }
}
break;
@@ -2602,7 +2951,7 @@ H5T_conv_s_s (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
*/
herr_t
H5T_conv_schar_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_schar_uchar, FAIL);
H5T_CONV_su(SCHAR, UCHAR,
@@ -2629,7 +2978,7 @@ H5T_conv_schar_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uchar_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uchar_schar, FAIL);
H5T_CONV_us(UCHAR, SCHAR,
@@ -2657,7 +3006,7 @@ H5T_conv_uchar_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_schar_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_schar_short, FAIL);
H5T_CONV_sS(SCHAR, SHORT,
@@ -2684,7 +3033,8 @@ H5T_conv_schar_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_schar_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_schar_ushort, FAIL);
H5T_CONV_sU(SCHAR, USHORT,
@@ -2711,7 +3061,7 @@ H5T_conv_schar_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uchar_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uchar_short, FAIL);
H5T_CONV_uS(UCHAR, SHORT,
@@ -2739,7 +3089,8 @@ H5T_conv_uchar_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uchar_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uchar_ushort, FAIL);
H5T_CONV_uU(UCHAR, USHORT,
@@ -2766,7 +3117,7 @@ H5T_conv_uchar_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_schar_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_schar_int, FAIL);
H5T_CONV_sS(SCHAR, INT,
@@ -2793,7 +3144,7 @@ H5T_conv_schar_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_schar_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_schar_uint, FAIL);
H5T_CONV_sU(SCHAR, UINT,
@@ -2820,7 +3171,7 @@ H5T_conv_schar_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uchar_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uchar_int, FAIL);
H5T_CONV_uS(UCHAR, INT,
@@ -2848,7 +3199,7 @@ H5T_conv_uchar_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uchar_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uchar_uint, FAIL);
H5T_CONV_uU(UCHAR, UINT,
@@ -2875,7 +3226,7 @@ H5T_conv_uchar_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_schar_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_schar_long, FAIL);
H5T_CONV_sS(SCHAR, LONG,
@@ -2902,7 +3253,7 @@ H5T_conv_schar_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_schar_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_schar_ulong, FAIL);
H5T_CONV_sU(SCHAR, ULONG,
@@ -2929,7 +3280,7 @@ H5T_conv_schar_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uchar_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uchar_long, FAIL);
H5T_CONV_uS(UCHAR, LONG,
@@ -2957,7 +3308,7 @@ H5T_conv_uchar_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uchar_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uchar_ulong, FAIL);
H5T_CONV_uU(UCHAR, ULONG,
@@ -2984,7 +3335,7 @@ H5T_conv_uchar_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_schar_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_schar_llong, FAIL);
H5T_CONV_sS(SCHAR, LLONG,
@@ -3011,7 +3362,8 @@ H5T_conv_schar_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_schar_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_schar_ullong, FAIL);
H5T_CONV_sU(SCHAR, ULLONG,
@@ -3038,7 +3390,7 @@ H5T_conv_schar_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uchar_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uchar_llong, FAIL);
H5T_CONV_uS(UCHAR, LLONG,
@@ -3066,7 +3418,8 @@ H5T_conv_uchar_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uchar_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uchar_ullong, FAIL);
H5T_CONV_uU(UCHAR, ULLONG,
@@ -3093,7 +3446,7 @@ H5T_conv_uchar_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_short_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_short_schar, FAIL);
H5T_CONV_Ss(SHORT, SCHAR,
@@ -3121,7 +3474,7 @@ H5T_conv_short_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_short_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_short_uchar, FAIL);
H5T_CONV_Su(SHORT, UCHAR,
@@ -3149,7 +3502,8 @@ H5T_conv_short_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ushort_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ushort_schar, FAIL);
H5T_CONV_Us(USHORT, SCHAR,
@@ -3177,7 +3531,8 @@ H5T_conv_ushort_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ushort_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ushort_uchar, FAIL);
H5T_CONV_Uu(USHORT, UCHAR,
@@ -3205,7 +3560,8 @@ H5T_conv_ushort_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_short_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_short_ushort, FAIL);
H5T_CONV_su(SHORT, USHORT,
@@ -3232,7 +3588,8 @@ H5T_conv_short_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ushort_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ushort_short, FAIL);
H5T_CONV_us(USHORT, SHORT,
@@ -3260,7 +3617,7 @@ H5T_conv_ushort_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_short_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_short_int, FAIL);
H5T_CONV_sS(SHORT, INT,
@@ -3287,7 +3644,7 @@ H5T_conv_short_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_short_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_short_uint, FAIL);
H5T_CONV_sU(SHORT, UINT,
@@ -3314,7 +3671,7 @@ H5T_conv_short_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ushort_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ushort_int, FAIL);
H5T_CONV_uS(USHORT, INT,
@@ -3342,7 +3699,7 @@ H5T_conv_ushort_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ushort_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ushort_uint, FAIL);
H5T_CONV_uU(USHORT, UINT,
@@ -3369,7 +3726,7 @@ H5T_conv_ushort_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_short_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_short_long, FAIL);
H5T_CONV_sS(SHORT, LONG,
@@ -3396,7 +3753,7 @@ H5T_conv_short_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_short_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_short_ulong, FAIL);
H5T_CONV_sU(SHORT, ULONG,
@@ -3423,7 +3780,7 @@ H5T_conv_short_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ushort_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ushort_long, FAIL);
H5T_CONV_uS(USHORT, LONG,
@@ -3451,7 +3808,8 @@ H5T_conv_ushort_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ushort_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ushort_ulong, FAIL);
H5T_CONV_uU(USHORT, ULONG,
@@ -3478,7 +3836,7 @@ H5T_conv_ushort_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_short_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_short_llong, FAIL);
H5T_CONV_sS(SHORT, LLONG,
@@ -3505,7 +3863,8 @@ H5T_conv_short_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_short_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_short_ullong, FAIL);
H5T_CONV_sU(SHORT, ULLONG,
@@ -3532,7 +3891,8 @@ H5T_conv_short_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ushort_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ushort_llong, FAIL);
H5T_CONV_uS(USHORT, LLONG,
@@ -3560,7 +3920,8 @@ H5T_conv_ushort_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ushort_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ushort_ullong, FAIL);
H5T_CONV_uU(USHORT, ULLONG,
@@ -3587,7 +3948,7 @@ H5T_conv_ushort_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_int_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_int_schar, FAIL);
H5T_CONV_Ss(INT, SCHAR,
@@ -3615,7 +3976,7 @@ H5T_conv_int_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_int_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_int_uchar, FAIL);
H5T_CONV_Su(INT, UCHAR,
@@ -3643,7 +4004,7 @@ H5T_conv_int_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uint_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uint_schar, FAIL);
H5T_CONV_Us(UINT, SCHAR,
@@ -3671,7 +4032,7 @@ H5T_conv_uint_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uint_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uint_uchar, FAIL);
H5T_CONV_Uu(UINT, UCHAR,
@@ -3699,7 +4060,7 @@ H5T_conv_uint_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_int_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_int_short, FAIL);
H5T_CONV_Ss(INT, SHORT,
@@ -3727,7 +4088,7 @@ H5T_conv_int_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_int_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_int_ushort, FAIL);
H5T_CONV_Su(INT, USHORT,
@@ -3755,7 +4116,7 @@ H5T_conv_int_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uint_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uint_short, FAIL);
H5T_CONV_Us(UINT, SHORT,
@@ -3783,7 +4144,7 @@ H5T_conv_uint_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uint_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uint_ushort, FAIL);
H5T_CONV_Uu(UINT, USHORT,
@@ -3811,7 +4172,7 @@ H5T_conv_uint_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_int_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_int_uint, FAIL);
H5T_CONV_su(INT, UINT,
@@ -3838,7 +4199,7 @@ H5T_conv_int_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uint_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uint_int, FAIL);
H5T_CONV_us(UINT, INT,
@@ -3866,7 +4227,7 @@ H5T_conv_uint_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_int_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_int_long, FAIL);
H5T_CONV_sS(INT, LONG,
@@ -3893,7 +4254,7 @@ H5T_conv_int_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_int_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_int_ulong, FAIL);
H5T_CONV_sU(INT, LONG,
@@ -3920,7 +4281,7 @@ H5T_conv_int_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uint_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uint_long, FAIL);
H5T_CONV_uS(UINT, LONG,
@@ -3948,7 +4309,7 @@ H5T_conv_uint_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uint_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uint_ulong, FAIL);
H5T_CONV_uU(UINT, ULONG,
@@ -3975,7 +4336,7 @@ H5T_conv_uint_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_int_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_int_llong, FAIL);
H5T_CONV_sS(INT, LLONG,
@@ -4002,7 +4363,7 @@ H5T_conv_int_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_int_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_int_ullong, FAIL);
H5T_CONV_sU(INT, ULLONG,
@@ -4029,7 +4390,7 @@ H5T_conv_int_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uint_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uint_llong, FAIL);
H5T_CONV_uS(UINT, LLONG,
@@ -4057,7 +4418,7 @@ H5T_conv_uint_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_uint_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_uint_ullong, FAIL);
H5T_CONV_uU(UINT, ULLONG,
@@ -4084,7 +4445,7 @@ H5T_conv_uint_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_long_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_long_schar, FAIL);
H5T_CONV_Ss(LONG, SCHAR,
@@ -4112,7 +4473,7 @@ H5T_conv_long_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_long_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_long_uchar, FAIL);
H5T_CONV_Su(LONG, UCHAR,
@@ -4140,7 +4501,7 @@ H5T_conv_long_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ulong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ulong_schar, FAIL);
H5T_CONV_Us(ULONG, SCHAR,
@@ -4168,7 +4529,7 @@ H5T_conv_ulong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ulong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ulong_uchar, FAIL);
H5T_CONV_Uu(ULONG, UCHAR,
@@ -4196,7 +4557,7 @@ H5T_conv_ulong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_long_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_long_short, FAIL);
H5T_CONV_Ss(LONG, SHORT,
@@ -4224,7 +4585,7 @@ H5T_conv_long_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_long_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_long_ushort, FAIL);
H5T_CONV_Su(LONG, USHORT,
@@ -4252,7 +4613,7 @@ H5T_conv_long_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ulong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ulong_short, FAIL);
H5T_CONV_Us(ULONG, SHORT,
@@ -4280,7 +4641,8 @@ H5T_conv_ulong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ulong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ulong_ushort, FAIL);
H5T_CONV_Uu(ULONG, USHORT,
@@ -4308,7 +4670,7 @@ H5T_conv_ulong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_long_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_long_int, FAIL);
H5T_CONV_Ss(LONG, INT,
@@ -4336,7 +4698,7 @@ H5T_conv_long_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_long_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_long_uint, FAIL);
H5T_CONV_Su(LONG, UINT,
@@ -4364,7 +4726,7 @@ H5T_conv_long_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ulong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ulong_int, FAIL);
H5T_CONV_Us(ULONG, INT,
@@ -4392,7 +4754,7 @@ H5T_conv_ulong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ulong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ulong_uint, FAIL);
H5T_CONV_Uu(ULONG, UINT,
@@ -4420,7 +4782,7 @@ H5T_conv_ulong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_long_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_long_ulong, FAIL);
H5T_CONV_su(LONG, ULONG,
@@ -4447,7 +4809,7 @@ H5T_conv_long_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ulong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ulong_long, FAIL);
H5T_CONV_us(ULONG, LONG,
@@ -4475,7 +4837,7 @@ H5T_conv_ulong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_long_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_long_llong, FAIL);
H5T_CONV_sS(LONG, LLONG,
@@ -4502,7 +4864,7 @@ H5T_conv_long_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_long_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_long_ullong, FAIL);
H5T_CONV_sU(LONG, ULLONG,
@@ -4529,7 +4891,7 @@ H5T_conv_long_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ulong_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_long_llong, FAIL);
H5T_CONV_uS(ULONG, LLONG,
@@ -4557,7 +4919,8 @@ H5T_conv_ulong_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ulong_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ulong_ullong, FAIL);
H5T_CONV_uU(ULONG, ULLONG,
@@ -4584,7 +4947,7 @@ H5T_conv_ulong_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_llong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_llong_schar, FAIL);
H5T_CONV_Ss(LLONG, SCHAR,
@@ -4612,7 +4975,7 @@ H5T_conv_llong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_llong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_llong_uchar, FAIL);
H5T_CONV_Su(LLONG, UCHAR,
@@ -4640,7 +5003,8 @@ H5T_conv_llong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ullong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ullong_schar, FAIL);
H5T_CONV_Us(ULLONG, SCHAR,
@@ -4668,7 +5032,7 @@ H5T_conv_ullong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ullong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ullong_uchar, FAIL);
H5T_CONV_Uu(ULLONG, UCHAR,
@@ -4696,7 +5060,7 @@ H5T_conv_ullong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_llong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_llong_short, FAIL);
H5T_CONV_Ss(LLONG, SHORT,
@@ -4724,7 +5088,8 @@ H5T_conv_llong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_llong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_llong_ushort, FAIL);
H5T_CONV_Su(LLONG, USHORT,
@@ -4752,7 +5117,8 @@ H5T_conv_llong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ullong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ullong_short, FAIL);
H5T_CONV_Us(ULLONG, SHORT,
@@ -4780,7 +5146,8 @@ H5T_conv_ullong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ullong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ullong_ushort, FAIL);
H5T_CONV_Uu(ULLONG, USHORT,
@@ -4808,7 +5175,7 @@ H5T_conv_ullong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_llong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_llong_int, FAIL);
H5T_CONV_Ss(LLONG, INT,
@@ -4836,7 +5203,7 @@ H5T_conv_llong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_llong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_llong_uint, FAIL);
H5T_CONV_Su(LLONG, UINT,
@@ -4864,7 +5231,7 @@ H5T_conv_llong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ullong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ullong_int, FAIL);
H5T_CONV_Us(ULLONG, INT,
@@ -4892,7 +5259,7 @@ H5T_conv_ullong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ullong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ullong_uint, FAIL);
H5T_CONV_Uu(ULLONG, UINT,
@@ -4920,7 +5287,7 @@ H5T_conv_ullong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_llong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_llong_long, FAIL);
H5T_CONV_Ss(LLONG, LONG,
@@ -4948,7 +5315,7 @@ H5T_conv_llong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_llong_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_llong_ulong, FAIL);
H5T_CONV_Su(LLONG, ULONG,
@@ -4976,7 +5343,7 @@ H5T_conv_llong_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ullong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf, void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ullong_long, FAIL);
H5T_CONV_Us(ULLONG, LONG,
@@ -5004,7 +5371,8 @@ H5T_conv_ullong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ullong_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ullong_ulong, FAIL);
H5T_CONV_Uu(ULLONG, ULONG,
@@ -5032,7 +5400,8 @@ H5T_conv_ullong_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_llong_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_llong_ullong, FAIL);
H5T_CONV_su(LLONG, ULLONG,
@@ -5059,7 +5428,8 @@ H5T_conv_llong_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
*/
herr_t
H5T_conv_ullong_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
FUNC_ENTER(H5T_conv_ullong_llong, FAIL);
H5T_CONV_us(ULLONG, LLONG,
@@ -5081,16 +5451,21 @@ H5T_conv_ullong_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
* Tuesday, June 23, 1998
*
* Modifications:
- *
+ * Robb Matzke, 1999-06-16
+ * Added support for non-zero strides. If STRIDE is non-zero
+ * then convert one value at each memory location advancing
+ * STRIDE bytes each time; otherwise assume both source and
+ * destination values are packed.
*-------------------------------------------------------------------------
*/
herr_t
H5T_conv_float_double (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
size_t elmtno; /*element number */
- float *src, *s; /*source buffer */
- double *dst, *d; /*destination buffer */
+ uint8_t *src, *s; /*source buffer */
+ uint8_t *dst, *d; /*destination buffer */
H5T_t *st, *dt; /*type descriptors */
hbool_t src_mv, dst_mv; /*align data? */
double aligned; /*aligned data */
@@ -5122,41 +5497,56 @@ H5T_conv_float_double (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
break;
case H5T_CONV_CONV:
- src = (float*)buf + nelmts-1;
- dst = (double*)buf + nelmts-1;
-
+ if (stride) {
+ src = dst = (uint8_t*)buf + stride*(nelmts-1);
+ } else {
+ src = (uint8_t*)buf + sizeof(float)*(nelmts-1);
+ dst = (uint8_t*)buf + sizeof(double)*(nelmts-1);
+ }
+
/* Need alignment? */
if (H5T_NATIVE_FLOAT_ALIGN_g>1) {
src_mv = ((size_t)buf % H5T_NATIVE_FLOAT_ALIGN_g) ||
- (sizeof(float) % H5T_NATIVE_FLOAT_ALIGN_g);
+ ((stride?stride:sizeof(float)) %
+ H5T_NATIVE_FLOAT_ALIGN_g);
} else {
src_mv = FALSE;
}
if (H5T_NATIVE_DOUBLE_ALIGN_g>1) {
dst_mv = ((size_t)buf % H5T_NATIVE_DOUBLE_ALIGN_g) ||
- (sizeof(double) % H5T_NATIVE_DOUBLE_ALIGN_g);
+ ((stride?stride:sizeof(double)) %
+ H5T_NATIVE_DOUBLE_ALIGN_g);
} else {
dst_mv = FALSE;
}
if (src_mv) priv->s_aligned += nelmts;
if (dst_mv) priv->d_aligned += nelmts;
- for (elmtno=0; elmtno<nelmts; elmtno++, --src, --dst) {
+ for (elmtno=0; elmtno<nelmts; elmtno++) {
/* Align source and/or destination */
if (src_mv) {
HDmemcpy(&aligned, src, sizeof(float));
- s = (float*)&aligned;
+ s = (uint8_t*)&aligned;
} else {
s = src;
}
- if (dst_mv) d = (double*)&aligned;
+ if (dst_mv) d = (uint8_t*)&aligned;
else d = dst;
/* Conversion */
- *d = *s;
+ *((double*)d) = *((float*)s);
/* Unalign destination */
if (dst_mv) HDmemcpy(dst, &aligned, sizeof(double));
+
+ /* Advance buffer pointers */
+ if (stride) {
+ src -= stride;
+ dst -= stride;
+ } else {
+ src -= sizeof(float);
+ dst -= sizeof(double);
+ }
}
break;
@@ -5181,19 +5571,24 @@ H5T_conv_float_double (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
* Tuesday, June 23, 1998
*
* Modifications:
- *
- * Robb Matzke, 7 Jul 1998
- * Added overflow handling.
- *
+ * Robb Matzke, 7 Jul 1998
+ * Added overflow handling.
+ *
+ * Robb Matzke, 1999-06-16
+ * Added support for non-zero strides. If STRIDE is non-zero
+ * then convert one value at each memory location advancing
+ * STRIDE bytes each time; otherwise assume both source and
+ * destination values are packed.
*-------------------------------------------------------------------------
*/
herr_t
H5T_conv_double_float (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
size_t elmtno; /*element number */
- double *src, *s; /*source buffer */
- float *dst, *d; /*destination buffer */
+ uint8_t *src, *s; /*source buffer */
+ uint8_t *dst, *d; /*destination buffer */
H5T_t *st, *dt; /*type descriptors */
hbool_t src_mv, dst_mv; /*align data? */
double aligned; /*aligned data */
@@ -5225,53 +5620,64 @@ H5T_conv_double_float (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
break;
case H5T_CONV_CONV:
- src = (double*)buf;
- dst = (float*)buf;
+ src = (uint8_t*)buf;
+ dst = (uint8_t*)buf;
/* Need alignment? */
if (H5T_NATIVE_DOUBLE_ALIGN_g>1) {
src_mv = ((size_t)buf % H5T_NATIVE_DOUBLE_ALIGN_g) ||
- (sizeof(double) % H5T_NATIVE_DOUBLE_ALIGN_g);
+ ((stride?stride:sizeof(double)) %
+ H5T_NATIVE_DOUBLE_ALIGN_g);
} else {
src_mv = FALSE;
}
if (H5T_NATIVE_FLOAT_ALIGN_g>1) {
dst_mv = ((size_t)buf % H5T_NATIVE_FLOAT_ALIGN_g) ||
- (sizeof(float) % H5T_NATIVE_FLOAT_ALIGN_g);
+ ((stride?stride:sizeof(float)) %
+ H5T_NATIVE_FLOAT_ALIGN_g);
} else {
dst_mv = FALSE;
}
if (src_mv) priv->s_aligned += nelmts;
if (dst_mv) priv->d_aligned += nelmts;
- for (elmtno=0; elmtno<nelmts; elmtno++, src++, dst++) {
+ for (elmtno=0; elmtno<nelmts; elmtno++) {
/* Align source and/or destination */
if (src_mv) {
HDmemcpy(&aligned, src, sizeof(double));
- s = (double*)&aligned;
+ s = (uint8_t*)&aligned;
} else {
s = src;
}
- if (dst_mv) d = (float*)&aligned;
+ if (dst_mv) d = (uint8_t*)&aligned;
else d = dst;
/* Conversion */
- if (*s > FLT_MAX) {
+ if (*((double*)s) > FLT_MAX) {
if (!H5T_overflow_g ||
(H5T_overflow_g)(src_id, dst_id, s, d)<0) {
- *d = HUGE_VAL;
+ *((float*)d) = HUGE_VAL;
}
- } else if (*s < -FLT_MAX) {
+ } else if (*((double*)s) < -FLT_MAX) {
if (!H5T_overflow_g ||
(H5T_overflow_g)(src_id, dst_id, s, d)<0) {
- *d = -HUGE_VAL;
+ *((float*)d) = -HUGE_VAL;
}
} else {
- *d = *s;
+ *((float*)d) = *((double*)s);
}
/* Unalign destination */
if (dst_mv) HDmemcpy(dst, &aligned, sizeof(float));
+
+ /* Advance pointers */
+ if (stride) {
+ src += stride;
+ dst += stride;
+ } else {
+ src += sizeof(double);
+ dst += sizeof(float);
+ }
}
break;
@@ -5297,12 +5703,17 @@ H5T_conv_double_float (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
* Wednesday, June 10, 1998
*
* Modifications:
- *
+ * Robb Matzke, 1999-06-16
+ * Added support for non-zero strides. If STRIDE is non-zero
+ * then convert one value at each memory location advancing
+ * STRIDE bytes each time; otherwise assume both source and
+ * destination values are packed.
*-------------------------------------------------------------------------
*/
herr_t
H5T_conv_i32le_f64le (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void UNUSED *bkg)
+ size_t nelmts, size_t stride, void *buf,
+ void UNUSED *bkg)
{
uint8_t *s=NULL, *d=NULL; /*src and dst buf pointers */
uint8_t tmp[8]; /*temporary destination buffer */
@@ -5335,9 +5746,9 @@ H5T_conv_i32le_f64le (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
HRETURN_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
}
- s = (uint8_t*)buf + 4*(nelmts-1);
- d = (uint8_t*)buf + 8*(nelmts-1);
- for (elmtno=0; elmtno<nelmts; elmtno++, s-=4, d-=8) {
+ s = (uint8_t*)buf + (stride?stride:4)*(nelmts-1);
+ d = (uint8_t*)buf + (stride?stride:8)*(nelmts-1);
+ for (elmtno=0; elmtno<nelmts; elmtno++) {
/*
* If this is the last element to convert (that is, the first
@@ -5615,6 +6026,15 @@ H5T_conv_i32le_f64le (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
* beginning of loop.
*/
if (d==tmp) HDmemcpy (s, d, 8);
+
+ /* Advance pointers */
+ if (stride) {
+ s -= stride;
+ d -= stride;
+ } else {
+ s -= 4;
+ d -= 8;
+ }
}
break;
diff --git a/src/H5Tpkg.h b/src/H5Tpkg.h
index 5bbbb69..d4b477e 100644
--- a/src/H5Tpkg.h
+++ b/src/H5Tpkg.h
@@ -209,309 +209,321 @@ __DLLVAR__ size_t H5T_NATIVE_UINT_FAST64_ALIGN_g;
/* Conversion functions */
__DLL__ herr_t H5T_conv_noop(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void *bkg);
+ size_t nelmts, size_t stride, void *buf,
+ void *bkg);
__DLL__ herr_t H5T_conv_order(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *_buf, void *bkg);
+ size_t nelmts, size_t stride, void *_buf,
+ void *bkg);
__DLL__ herr_t H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *_buf, void *bkg);
+ size_t nelmts, size_t stride, void *_buf,
+ void *bkg);
+__DLL__ herr_t H5T_conv_struct_opt(hid_t src_id, hid_t dst_id,
+ H5T_cdata_t *cdata, size_t nelmts,
+ size_t stride, void *_buf, void *bkg);
__DLL__ herr_t H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void *bkg);
+ size_t nelmts, size_t stride, void *buf,
+ void *bkg);
__DLL__ herr_t H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void *bkg);
+ size_t nelmts, size_t stride, void *buf,
+ void *bkg);
__DLL__ herr_t H5T_conv_i_i(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *_buf, void *bkg);
+ size_t nelmts, size_t stride, void *_buf,
+ void *bkg);
__DLL__ herr_t H5T_conv_f_f(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *_buf, void *bkg);
+ size_t nelmts, size_t stride, void *_buf,
+ void *bkg);
__DLL__ herr_t H5T_conv_s_s(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *_buf, void *bkg);
+ size_t nelmts, size_t stride, void *_buf,
+ void *bkg);
__DLL__ herr_t H5T_conv_b_b(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *_buf, void *bkg);
+ size_t nelmts, size_t stride, void *_buf,
+ void *bkg);
__DLL__ herr_t H5T_conv_schar_uchar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uchar_schar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_schar_short(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_schar_ushort(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uchar_short(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uchar_ushort(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_schar_int(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_schar_uint(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uchar_int(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uchar_uint(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_schar_long(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_schar_ulong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uchar_long(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uchar_ulong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_schar_llong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_schar_ullong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uchar_llong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uchar_ullong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_short_schar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_short_uchar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ushort_schar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ushort_uchar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_short_ushort(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ushort_short(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_short_int(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_short_uint(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ushort_int(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ushort_uint(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_short_long(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_short_ulong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ushort_long(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ushort_ulong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_short_llong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_short_ullong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ushort_llong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ushort_ullong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_int_schar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_int_uchar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uint_schar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uint_uchar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_int_short(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_int_ushort(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uint_short(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uint_ushort(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_int_uint(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uint_int(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_int_long(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_int_ulong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uint_long(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uint_ulong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_int_llong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_int_ullong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uint_llong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_uint_ullong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_long_schar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_long_uchar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ulong_schar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ulong_uchar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_long_short(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_long_ushort(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ulong_short(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ulong_ushort(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_long_int(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_long_uint(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ulong_int(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ulong_uint(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_long_ulong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ulong_long(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_long_llong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_long_ullong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ulong_llong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ulong_ullong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_llong_schar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_llong_uchar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ullong_schar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ullong_uchar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_llong_short(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_llong_ushort(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ullong_short(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ullong_ushort(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_llong_int(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_llong_uint(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ullong_int(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ullong_uint(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_llong_long(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_llong_ulong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ullong_long(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ullong_ulong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_llong_ullong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_ullong_llong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_float_double(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_double_float(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *buf, void *bkg);
+ size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_conv_i32le_f64le(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, size_t nelmts,
- void *_buf, void *bkg);
+ size_t stride, void *_buf, void *bkg);
/* Bit twiddling functions */
__DLL__ void H5T_bit_copy(uint8_t *dst, size_t dst_offset, const uint8_t *src,
diff --git a/src/H5Tprivate.h b/src/H5Tprivate.h
index 3a3da40..5d0fe43 100644
--- a/src/H5Tprivate.h
+++ b/src/H5Tprivate.h
@@ -97,7 +97,7 @@ __DLL__ H5T_path_t *H5T_path_find(const H5T_t *src, const H5T_t *dst,
__DLL__ herr_t H5T_sort_value(H5T_t *dt, int *map);
__DLL__ herr_t H5T_sort_name(H5T_t *dt, int *map);
__DLL__ herr_t H5T_convert(H5T_path_t *tpath, hid_t src_id, hid_t dst_id,
- size_t nelmts, void *buf, void *bkg);
+ size_t nelmts, size_t stride, void *buf, void *bkg);
__DLL__ herr_t H5T_set_size(H5T_t *dt, size_t size);
__DLL__ herr_t H5T_set_precision(H5T_t *dt, size_t prec);
__DLL__ herr_t H5T_set_offset(H5T_t *dt, size_t offset);
diff --git a/src/H5Tpublic.h b/src/H5Tpublic.h
index 688ed2f..22c9eb8 100644
--- a/src/H5Tpublic.h
+++ b/src/H5Tpublic.h
@@ -158,7 +158,8 @@ typedef struct {
/* All data type conversion functions are... */
typedef herr_t (*H5T_conv_t) (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, void *buf, void *bkg);
+ size_t nelmts, size_t stride, void *buf,
+ void *bkg);
/*
* If an error occurs during a data type conversion then the function
diff --git a/test/.distdep b/test/.distdep
index 59fb5c4..47dc29d 100644
--- a/test/.distdep
+++ b/test/.distdep
@@ -1038,3 +1038,99 @@ fillval.lo: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
+dtypes.lo: \
+ dtypes.c \
+ h5test.h \
+ ../src/hdf5.h \
+ ../src/H5public.h \
+ ../src/H5config.h \
+ ../src/H5api_adpt.h \
+ ../src/H5Ipublic.h \
+ ../src/H5Apublic.h \
+ ../src/H5ACpublic.h \
+ ../src/H5Bpublic.h \
+ ../src/H5Dpublic.h \
+ ../src/H5Epublic.h \
+ ../src/H5Fpublic.h \
+ ../src/H5Gpublic.h \
+ ../src/H5HGpublic.h \
+ ../src/H5HLpublic.h \
+ ../src/H5MFpublic.h \
+ ../src/H5MMpublic.h \
+ ../src/H5Opublic.h \
+ ../src/H5Ppublic.h \
+ ../src/H5Zpublic.h \
+ ../src/H5Rpublic.h \
+ ../src/H5RApublic.h \
+ ../src/H5Spublic.h \
+ ../src/H5Tpublic.h \
+ ../src/H5private.h \
+ ../src/H5Tpkg.h \
+ ../src/H5HGprivate.h \
+ ../src/H5Fprivate.h \
+ ../src/H5Rprivate.h \
+ ../src/H5Tprivate.h
+flush1.lo: \
+ flush1.c \
+ h5test.h \
+ ../src/hdf5.h \
+ ../src/H5public.h \
+ ../src/H5config.h \
+ ../src/H5api_adpt.h \
+ ../src/H5Ipublic.h \
+ ../src/H5Apublic.h \
+ ../src/H5ACpublic.h \
+ ../src/H5Bpublic.h \
+ ../src/H5Dpublic.h \
+ ../src/H5Epublic.h \
+ ../src/H5Fpublic.h \
+ ../src/H5Gpublic.h \
+ ../src/H5HGpublic.h \
+ ../src/H5HLpublic.h \
+ ../src/H5MFpublic.h \
+ ../src/H5MMpublic.h \
+ ../src/H5Opublic.h \
+ ../src/H5Ppublic.h \
+ ../src/H5Zpublic.h \
+ ../src/H5Rpublic.h \
+ ../src/H5RApublic.h \
+ ../src/H5Spublic.h \
+ ../src/H5Tpublic.h \
+ ../src/H5private.h \
+ ../src/H5Tpkg.h \
+ ../src/H5HGprivate.h \
+ ../src/H5Fprivate.h \
+ ../src/H5Rprivate.h \
+ ../src/H5Tprivate.h
+flush2.lo: \
+ flush2.c \
+ h5test.h \
+ ../src/hdf5.h \
+ ../src/H5public.h \
+ ../src/H5config.h \
+ ../src/H5api_adpt.h \
+ ../src/H5Ipublic.h \
+ ../src/H5Apublic.h \
+ ../src/H5ACpublic.h \
+ ../src/H5Bpublic.h \
+ ../src/H5Dpublic.h \
+ ../src/H5Epublic.h \
+ ../src/H5Fpublic.h \
+ ../src/H5Gpublic.h \
+ ../src/H5HGpublic.h \
+ ../src/H5HLpublic.h \
+ ../src/H5MFpublic.h \
+ ../src/H5MMpublic.h \
+ ../src/H5Opublic.h \
+ ../src/H5Ppublic.h \
+ ../src/H5Zpublic.h \
+ ../src/H5Rpublic.h \
+ ../src/H5RApublic.h \
+ ../src/H5Spublic.h \
+ ../src/H5Tpublic.h \
+ ../src/H5private.h \
+ ../src/H5Tpkg.h \
+ ../src/H5HGprivate.h \
+ ../src/H5Fprivate.h \
+ ../src/H5Rprivate.h \
+ ../src/H5Tprivate.h
diff --git a/test/dtypes.c b/test/dtypes.c
index 484ca24..5325260 100644
--- a/test/dtypes.c
+++ b/test/dtypes.c
@@ -285,7 +285,7 @@ reset_hdf5(void)
*
* Return: Success: 0
*
- * Failure: -1
+ * Failure: number of errors
*
* Programmer: Robb Matzke
* Tuesday, December 9, 1997
@@ -294,7 +294,7 @@ reset_hdf5(void)
*
*-------------------------------------------------------------------------
*/
-static herr_t
+static int
test_classes(void)
{
H5T_class_t tcls;
@@ -317,7 +317,7 @@ test_classes(void)
return 0;
error:
- return -1;
+ return 1;
}
@@ -328,7 +328,7 @@ test_classes(void)
*
* Return: Success: 0
*
- * Failure: -1
+ * Failure: number of errors
*
* Programmer: Robb Matzke
* Tuesday, December 9, 1997
@@ -337,7 +337,7 @@ test_classes(void)
*
*-------------------------------------------------------------------------
*/
-static herr_t
+static int
test_copy(void)
{
hid_t a_copy;
@@ -362,18 +362,18 @@ test_copy(void)
return 0;
error:
- return -1;
+ return 1;
}
/*-------------------------------------------------------------------------
- * Function: test_compound
+ * Function: test_compound_1
*
* Purpose: Tests various things about compound data types.
*
* Return: Success: 0
*
- * Failure: -1
+ * Failure: number of errors
*
* Programmer: Robb Matzke
* Wednesday, January 7, 1998
@@ -382,8 +382,8 @@ test_copy(void)
*
*-------------------------------------------------------------------------
*/
-static herr_t
-test_compound(void)
+static int
+test_compound_1(void)
{
complex_t tmp;
hid_t complex_id;
@@ -404,18 +404,361 @@ test_compound(void)
return 0;
error:
- return -1;
+ return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_compound_2
+ *
+ * Purpose: Tests a compound type conversion where the source and
+ * destination are the same except for the order of the
+ * elements.
+ *
+ * Return: Success: 0
+ *
+ * Failure: number of errors
+ *
+ * Programmer: Robb Matzke
+ * Thursday, June 17, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_2(void)
+{
+ struct st {
+ int a, b, c[4], d, e;
+ } *s_ptr;
+ struct dt {
+ int e, d, c[4], b, a;
+ } *d_ptr;
+
+ const int nelmts = 200000;
+ const size_t four = 4;
+ unsigned char *buf=NULL, *orig=NULL, *bkg=NULL;
+ hid_t st=-1, dt=-1;
+ int i;
+
+ TESTING("compound element reordering");
+
+ /* Sizes should be the same, but be careful just in case */
+ buf = malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
+ bkg = malloc(nelmts * sizeof(struct dt));
+ orig = malloc(nelmts * sizeof(struct st));
+ for (i=0; i<nelmts; i++) {
+ s_ptr = ((struct st*)orig) + i;
+ s_ptr->a = i*8+0;
+ s_ptr->b = i*8+1;
+ s_ptr->c[0] = i*8+2;
+ s_ptr->c[1] = i*8+3;
+ s_ptr->c[2] = i*8+4;
+ s_ptr->c[3] = i*8+5;
+ s_ptr->d = i*8+6;
+ s_ptr->e = i*8+7;
+ }
+ memcpy(buf, orig, nelmts*sizeof(struct st));
+
+ /* Build hdf5 datatypes */
+ if ((st=H5Tcreate(H5T_COMPOUND, sizeof(struct st)))<0 ||
+ H5Tinsert(st, "a", HOFFSET(struct st, a), H5T_NATIVE_INT)<0 ||
+ H5Tinsert(st, "b", HOFFSET(struct st, b), H5T_NATIVE_INT)<0 ||
+ H5Tinsert_array(st, "c", HOFFSET(struct st, c), 1, &four, NULL,
+ H5T_NATIVE_INT)<0 ||
+ H5Tinsert(st, "d", HOFFSET(struct st, d), H5T_NATIVE_INT)<0 ||
+ H5Tinsert(st, "e", HOFFSET(struct st, e), H5T_NATIVE_INT)<0)
+ goto error;
+
+ if ((dt=H5Tcreate(H5T_COMPOUND, sizeof(struct dt)))<0 ||
+ H5Tinsert(dt, "a", HOFFSET(struct dt, a), H5T_NATIVE_INT)<0 ||
+ H5Tinsert(dt, "b", HOFFSET(struct dt, b), H5T_NATIVE_INT)<0 ||
+ H5Tinsert_array(dt, "c", HOFFSET(struct dt, c), 1, &four, NULL,
+ H5T_NATIVE_INT)<0 ||
+ H5Tinsert(dt, "d", HOFFSET(struct dt, d), H5T_NATIVE_INT)<0 ||
+ H5Tinsert(dt, "e", HOFFSET(struct dt, e), H5T_NATIVE_INT)<0)
+ goto error;
+
+ /* Perform the conversion */
+ if (H5Tconvert(st, dt, nelmts, buf, bkg)<0) goto error;
+
+ /* Compare results */
+ for (i=0; i<nelmts; i++) {
+ s_ptr = ((struct st*)orig) + i;
+ d_ptr = ((struct dt*)buf) + i;
+ if (s_ptr->a != d_ptr->a ||
+ s_ptr->b != d_ptr->b ||
+ s_ptr->c[0] != d_ptr->c[0] ||
+ s_ptr->c[1] != d_ptr->c[1] ||
+ s_ptr->c[2] != d_ptr->c[2] ||
+ s_ptr->c[3] != d_ptr->c[3] ||
+ s_ptr->d != d_ptr->d ||
+ s_ptr->e != d_ptr->e) {
+ FAILED();
+ printf(" i=%d\n", i);
+ printf(" src={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n",
+ s_ptr->a, s_ptr->b, s_ptr->c[0], s_ptr->c[1], s_ptr->c[2],
+ s_ptr->c[3], s_ptr->d, s_ptr->e);
+ printf(" dst={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n",
+ d_ptr->a, d_ptr->b, d_ptr->c[0], d_ptr->c[1], d_ptr->c[2],
+ d_ptr->c[3], d_ptr->d, d_ptr->e);
+ goto error;
+ }
+ }
+
+ /* Release resources */
+ free(buf);
+ free(bkg);
+ free(orig);
+ if (H5Tclose(st)<0 || H5Tclose(dt)<0) goto error;
+
+ PASSED();
+ reset_hdf5();
+ return 0;
+
+ error:
+ return 1;
}
/*-------------------------------------------------------------------------
+ * Function: test_compound_3
+ *
+ * Purpose: Tests compound conversions where the source and destination
+ * are the same except the destination is missing a couple
+ * members which appear in the source.
+ *
+ * Return: Success: 0
+ *
+ * Failure: number of errors
+ *
+ * Programmer: Robb Matzke
+ * Thursday, June 17, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_3(void)
+{
+ struct st {
+ int a, b, c[4], d, e;
+ } *s_ptr;
+ struct dt {
+ int a, c[4], e;
+ } *d_ptr;
+
+ const int nelmts = 200000;
+ const size_t four = 4;
+ unsigned char *buf=NULL, *orig=NULL, *bkg=NULL;
+ hid_t st=-1, dt=-1;
+ int i;
+
+ TESTING("compound subset conversions");
+
+ /* Initialize */
+ buf = malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
+ bkg = malloc(nelmts * sizeof(struct dt));
+ orig = malloc(nelmts * sizeof(struct st));
+ for (i=0; i<nelmts; i++) {
+ s_ptr = ((struct st*)orig) + i;
+ s_ptr->a = i*8+0;
+ s_ptr->b = i*8+1;
+ s_ptr->c[0] = i*8+2;
+ s_ptr->c[1] = i*8+3;
+ s_ptr->c[2] = i*8+4;
+ s_ptr->c[3] = i*8+5;
+ s_ptr->d = i*8+6;
+ s_ptr->e = i*8+7;
+ }
+ memcpy(buf, orig, nelmts*sizeof(struct st));
+
+ /* Build hdf5 datatypes */
+ if ((st=H5Tcreate(H5T_COMPOUND, sizeof(struct st)))<0 ||
+ H5Tinsert(st, "a", HOFFSET(struct st, a), H5T_NATIVE_INT)<0 ||
+ H5Tinsert(st, "b", HOFFSET(struct st, b), H5T_NATIVE_INT)<0 ||
+ H5Tinsert_array(st, "c", HOFFSET(struct st, c), 1, &four, NULL,
+ H5T_NATIVE_INT)<0 ||
+ H5Tinsert(st, "d", HOFFSET(struct st, d), H5T_NATIVE_INT)<0 ||
+ H5Tinsert(st, "e", HOFFSET(struct st, e), H5T_NATIVE_INT)<0)
+ goto error;
+
+ if ((dt=H5Tcreate(H5T_COMPOUND, sizeof(struct dt)))<0 ||
+ H5Tinsert(dt, "a", HOFFSET(struct dt, a), H5T_NATIVE_INT)<0 ||
+ H5Tinsert_array(dt, "c", HOFFSET(struct dt, c), 1, &four, NULL,
+ H5T_NATIVE_INT)<0 ||
+ H5Tinsert(dt, "e", HOFFSET(struct dt, e), H5T_NATIVE_INT)<0)
+ goto error;
+
+ /* Perform the conversion */
+ if (H5Tconvert(st, dt, nelmts, buf, bkg)<0) goto error;
+
+ /* Compare results */
+ for (i=0; i<nelmts; i++) {
+ s_ptr = ((struct st*)orig) + i;
+ d_ptr = ((struct dt*)buf) + i;
+ if (s_ptr->a != d_ptr->a ||
+ s_ptr->c[0] != d_ptr->c[0] ||
+ s_ptr->c[1] != d_ptr->c[1] ||
+ s_ptr->c[2] != d_ptr->c[2] ||
+ s_ptr->c[3] != d_ptr->c[3] ||
+ s_ptr->e != d_ptr->e) {
+ FAILED();
+ printf(" i=%d\n", i);
+ printf(" src={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n",
+ s_ptr->a, s_ptr->b, s_ptr->c[0], s_ptr->c[1], s_ptr->c[2],
+ s_ptr->c[3], s_ptr->d, s_ptr->e);
+ printf(" dst={a=%d, c=[%d,%d,%d,%d], e=%d\n",
+ d_ptr->a, d_ptr->c[0], d_ptr->c[1], d_ptr->c[2],
+ d_ptr->c[3], d_ptr->e);
+ goto error;
+ }
+ }
+
+ /* Release resources */
+ free(buf);
+ free(bkg);
+ free(orig);
+ if (H5Tclose(st)<0 || H5Tclose(dt)<0) goto error;
+
+ PASSED();
+ reset_hdf5();
+ return 0;
+
+ error:
+ return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_compound_4
+ *
+ * Purpose: Tests compound conversions when the destination has the same
+ * fields as the source but one or more of the fields are
+ * smaller.
+ *
+ * Return: Success: 0
+ *
+ * Failure: number of errors
+ *
+ * Programmer: Robb Matzke
+ * Thursday, June 17, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_4(void)
+{
+
+ struct st {
+ int a, b, c[4], d, e;
+ } *s_ptr;
+ struct dt {
+ short b;
+ int a, c[4];
+ short d;
+ int e;
+ } *d_ptr;
+
+ const int nelmts = 200000;
+ const size_t four = 4;
+ unsigned char *buf=NULL, *orig=NULL, *bkg=NULL;
+ hid_t st=-1, dt=-1;
+ int i;
+
+ TESTING("compound element shrinking & reordering");
+
+ /* Sizes should be the same, but be careful just in case */
+ buf = malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
+ bkg = malloc(nelmts * sizeof(struct dt));
+ orig = malloc(nelmts * sizeof(struct st));
+ for (i=0; i<nelmts; i++) {
+ s_ptr = ((struct st*)orig) + i;
+ s_ptr->a = i*8+0;
+ s_ptr->b = (i*8+1) & 0x7fff;
+ s_ptr->c[0] = i*8+2;
+ s_ptr->c[1] = i*8+3;
+ s_ptr->c[2] = i*8+4;
+ s_ptr->c[3] = i*8+5;
+ s_ptr->d = (i*8+6) & 0x7fff;
+ s_ptr->e = i*8+7;
+ }
+ memcpy(buf, orig, nelmts*sizeof(struct st));
+
+ /* Build hdf5 datatypes */
+ if ((st=H5Tcreate(H5T_COMPOUND, sizeof(struct st)))<0 ||
+ H5Tinsert(st, "a", HOFFSET(struct st, a), H5T_NATIVE_INT)<0 ||
+ H5Tinsert(st, "b", HOFFSET(struct st, b), H5T_NATIVE_INT)<0 ||
+ H5Tinsert_array(st, "c", HOFFSET(struct st, c), 1, &four, NULL,
+ H5T_NATIVE_INT)<0 ||
+ H5Tinsert(st, "d", HOFFSET(struct st, d), H5T_NATIVE_INT)<0 ||
+ H5Tinsert(st, "e", HOFFSET(struct st, e), H5T_NATIVE_INT)<0)
+ goto error;
+
+ if ((dt=H5Tcreate(H5T_COMPOUND, sizeof(struct dt)))<0 ||
+ H5Tinsert(dt, "a", HOFFSET(struct dt, a), H5T_NATIVE_INT)<0 ||
+ H5Tinsert(dt, "b", HOFFSET(struct dt, b), H5T_NATIVE_SHORT)<0 ||
+ H5Tinsert_array(dt, "c", HOFFSET(struct dt, c), 1, &four, NULL,
+ H5T_NATIVE_INT)<0 ||
+ H5Tinsert(dt, "d", HOFFSET(struct dt, d), H5T_NATIVE_SHORT)<0 ||
+ H5Tinsert(dt, "e", HOFFSET(struct dt, e), H5T_NATIVE_INT)<0)
+ goto error;
+
+ /* Perform the conversion */
+ if (H5Tconvert(st, dt, nelmts, buf, bkg)<0) goto error;
+
+ /* Compare results */
+ for (i=0; i<nelmts; i++) {
+ s_ptr = ((struct st*)orig) + i;
+ d_ptr = ((struct dt*)buf) + i;
+ if (s_ptr->a != d_ptr->a ||
+ s_ptr->b != d_ptr->b ||
+ s_ptr->c[0] != d_ptr->c[0] ||
+ s_ptr->c[1] != d_ptr->c[1] ||
+ s_ptr->c[2] != d_ptr->c[2] ||
+ s_ptr->c[3] != d_ptr->c[3] ||
+ s_ptr->d != d_ptr->d ||
+ s_ptr->e != d_ptr->e) {
+ FAILED();
+ printf(" i=%d\n", i);
+ printf(" src={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n",
+ s_ptr->a, s_ptr->b, s_ptr->c[0], s_ptr->c[1], s_ptr->c[2],
+ s_ptr->c[3], s_ptr->d, s_ptr->e);
+ printf(" dst={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n",
+ d_ptr->a, d_ptr->b, d_ptr->c[0], d_ptr->c[1], d_ptr->c[2],
+ d_ptr->c[3], d_ptr->d, d_ptr->e);
+ goto error;
+ }
+ }
+
+ /* Release resources */
+ free(buf);
+ free(bkg);
+ free(orig);
+ if (H5Tclose(st)<0 || H5Tclose(dt)<0) goto error;
+
+ PASSED();
+ reset_hdf5();
+ return 0;
+
+ error:
+ return 1;
+}
+
+
+
+/*-------------------------------------------------------------------------
* Function: test_transient
*
* Purpose: Tests transient data types.
*
* Return: Success: 0
*
- * Failure: -1
+ * Failure: number of errors
*
* Programmer: Robb Matzke
* Thursday, June 4, 1998
@@ -424,7 +767,7 @@ test_compound(void)
*
*-------------------------------------------------------------------------
*/
-static herr_t
+static int
test_transient (hid_t fapl)
{
static hsize_t ds_size[2] = {10, 20};
@@ -530,7 +873,7 @@ test_transient (hid_t fapl)
H5Dclose (dset);
H5Fclose (file);
} H5E_END_TRY;
- return -1;
+ return 1;
}
@@ -541,7 +884,7 @@ test_transient (hid_t fapl)
*
* Return: Success: 0
*
- * Failure: -1
+ * Failure: number of errors
*
* Programmer: Robb Matzke
* Monday, June 1, 1998
@@ -550,7 +893,7 @@ test_transient (hid_t fapl)
*
*-------------------------------------------------------------------------
*/
-static herr_t
+static int
test_named (hid_t fapl)
{
hid_t file=-1, type=-1, space=-1, dset=-1, t2=-1, attr1=-1;
@@ -715,7 +1058,7 @@ test_named (hid_t fapl)
H5Dclose (dset);
H5Fclose (file);
} H5E_END_TRY;
- return -1;
+ return 1;
}
@@ -754,7 +1097,7 @@ mkstr(size_t len, H5T_str_t strpad)
*
* Return: Success: 0
*
- * Failure: -1
+ * Failure: number of errors
*
* Programmer: Robb Matzke
* Monday, August 10, 1998
@@ -763,7 +1106,7 @@ mkstr(size_t len, H5T_str_t strpad)
*
*-------------------------------------------------------------------------
*/
-static herr_t
+static int
test_conv_str_1(void)
{
char *buf=NULL;
@@ -993,7 +1336,7 @@ test_conv_str_1(void)
error:
reset_hdf5();
- return -1;
+ return 1;
}
@@ -1004,7 +1347,7 @@ test_conv_str_1(void)
*
* Return: Success: 0
*
- * Failure: -1
+ * Failure: number of errors
*
* Programmer: Robb Matzke
* Monday, August 10, 1998
@@ -1013,14 +1356,14 @@ test_conv_str_1(void)
*
*-------------------------------------------------------------------------
*/
-static herr_t
+static int
test_conv_str_2(void)
{
char *buf=NULL, s[80];
hid_t c_type, f_type;
const size_t nelmts = 200000, ntests=NTESTS;
size_t i, j, nchars;
- herr_t ret_value = -1;
+ int ret_value = 1;
/*
* Initialize types and buffer.
@@ -1066,7 +1409,7 @@ test_conv_str_2(void)
*
* Return: Success: 0
*
- * Failure: -1
+ * Failure: number of errors
*
* Programmer: Robb Matzke
* Tuesday, January 5, 1999
@@ -1075,14 +1418,14 @@ test_conv_str_2(void)
*
*-------------------------------------------------------------------------
*/
-static herr_t
+static int
test_conv_enum_1(void)
{
const int nelmts=200000, ntests=NTESTS;
int i, val, *buf=NULL;
hid_t t1, t2;
char s[80];
- herr_t ret_value=FAIL;
+ int ret_value = 1;
/* Build the data types */
t1 = H5Tcreate(H5T_ENUM, sizeof(int));
@@ -1142,7 +1485,7 @@ test_conv_enum_1(void)
*
* Return: Success: 0
*
- * Failure: -1
+ * Failure: number of errors
*
* Programmer: Robb Matzke
* Thursday, May 20, 1999
@@ -1219,7 +1562,7 @@ test_conv_bitfield(void)
H5Tclose(st);
H5Tclose(dt);
reset_hdf5();
- return -1;
+ return 1;
}
@@ -1241,7 +1584,8 @@ test_conv_bitfield(void)
*/
static herr_t
convert_opaque(hid_t UNUSED st, hid_t UNUSED dt, H5T_cdata_t *cdata,
- size_t UNUSED nelmts, void UNUSED *_buf, void UNUSED *bkg)
+ size_t UNUSED nelmts, size_t UNUSED stride, void UNUSED *_buf,
+ void UNUSED *bkg)
{
if (H5T_CONV_CONV==cdata->command) num_opaque_conversions_g++;
return 0;
@@ -1255,7 +1599,7 @@ convert_opaque(hid_t UNUSED st, hid_t UNUSED dt, H5T_cdata_t *cdata,
*
* Return: Success: 0
*
- * Failure: -1
+ * Failure: number of errors
*
* Programmer: Robb Matzke
* Thursday, May 20, 1999
@@ -1312,7 +1656,7 @@ test_opaque(void)
if (st>0) H5Tclose(st);
if (dt>0) H5Tclose(dt);
FAILED();
- return -1;
+ return 1;
}
@@ -1321,9 +1665,9 @@ test_opaque(void)
*
* Purpose: Test atomic number conversions.
*
- * Return: Success:
+ * Return: Success: 0
*
- * Failure:
+ * Failure: number of errors
*
* Programmer: Robb Matzke
* Wednesday, June 10, 1998
@@ -1332,7 +1676,7 @@ test_opaque(void)
*
*-------------------------------------------------------------------------
*/
-static herr_t
+static int
test_conv_int (void)
{
unsigned char byte[4];
@@ -1431,7 +1775,7 @@ test_conv_int (void)
error:
reset_hdf5();
- return -1;
+ return 1;
}
@@ -1449,7 +1793,7 @@ test_conv_int (void)
*
* Return: Success: 0
*
- * Failure: -1
+ * Failure: number of errors
*
* Programmer: Robb Matzke
* Monday, November 16, 1998
@@ -2581,7 +2925,7 @@ my_isnan(flt_t type, void *val)
*
* Return: Success: 0
*
- * Failure: -1
+ * Failure: number of errors
*
* Programmer: Robb Matzke
* Tuesday, June 23, 1998
@@ -3188,20 +3532,23 @@ main(void)
}
/* Do the tests */
- nerrors += test_classes()<0 ? 1 : 0;
- nerrors += test_copy()<0 ? 1 : 0;
- nerrors += test_compound()<0 ? 1 : 0;
- nerrors += test_transient (fapl)<0 ? 1 : 0;
- nerrors += test_named (fapl)<0 ? 1 : 0;
+ nerrors += test_classes();
+ nerrors += test_copy();
+ nerrors += test_compound_1();
+ nerrors += test_transient (fapl);
+ nerrors += test_named (fapl);
h5_cleanup (fapl); /*must happen before first reset*/
reset_hdf5();
- nerrors += test_conv_str_1()<0 ? 1 : 0;
- nerrors += test_conv_str_2()<0 ? 1 : 0;
- nerrors += test_conv_int ()<0 ? 1 : 0;
- nerrors += test_conv_enum_1()<0 ? 1 : 0;
- nerrors += test_conv_bitfield()<0 ? 1 : 0;
- nerrors += test_opaque()<0 ? 1 : 0;
+ nerrors += test_conv_str_1();
+ nerrors += test_conv_str_2();
+ nerrors += test_compound_2();
+ nerrors += test_compound_3();
+ nerrors += test_compound_4();
+ nerrors += test_conv_int ();
+ nerrors += test_conv_enum_1();
+ nerrors += test_conv_bitfield();
+ nerrors += test_opaque();
/* Does floating point overflow generate a SIGFPE? */
generates_sigfpe();
diff --git a/test/flush1.c b/test/flush1.c
index 7ffcec3..9382b63 100644
--- a/test/flush1.c
+++ b/test/flush1.c
@@ -69,7 +69,7 @@ main(void)
* 1998-11-06 ptl
*/
for (j=0; j<ds_size[1]; j++) {
- the_data[i][j] = (double)(hssize_t)i/((hssize_t)(j+1));
+ the_data[i][j] = (double)(hssize_t)i/(hssize_t)(j+1);
}
}
if (H5Dwrite(dset, H5T_NATIVE_DOUBLE, space, space, H5P_DEFAULT,
diff --git a/test/flush2.c b/test/flush2.c
index 582a729..3430163 100644
--- a/test/flush2.c
+++ b/test/flush2.c
@@ -68,7 +68,14 @@ main(void)
* 1998-11-06 ptl
*/
error = fabs(the_data[i][j]-(double)(hssize_t)i/((hssize_t)j+1));
- assert(error<0.0001);
+ if (error>0.0001) {
+ FAILED();
+ printf(" dset[%lu][%lu] = %g\n",
+ (unsigned long)i, (unsigned long)j, the_data[i][j]);
+ printf(" should be %g\n",
+ (double)(hssize_t)i/(hssize_t)(j+1));
+ goto error;
+ }
}
}