[svn-r7868] Purpose: new feature

Description:  data type conversion between integers and float numbers.
              (Cover your ears.  It's going to explode.:)

Solution:       covers all native type conversion.  Mainly uses hardware
            conversion but handles overflow more gracefully.

Platforms tested: h5committest
This commit is contained in:
Raymond Lu 2003-11-21 12:07:25 -05:00
parent 22a36e9d59
commit c1e333f006
7 changed files with 1592 additions and 3 deletions

View File

@ -38,6 +38,7 @@
#include "H5private.h" /* Generic Functions */
#include "H5Bprivate.h" /* B-trees */
#include "H5Fprivate.h" /* File access */
#include "H5Gprivate.h" /* Group */
#include "H5RSprivate.h" /* Reference-counted strings */
/*

View File

@ -117,7 +117,6 @@ H5FL_DEFINE_STATIC(H5I_id_info_t);
/*--------------------- Local function prototypes ---------------------------*/
static herr_t H5I_init_interface(void);
static H5I_id_info_t *H5I_find_id(hid_t id);
static hid_t H5I_get_file_id(hid_t obj_id);
#ifdef H5I_DEBUG_OUTPUT
static herr_t H5I_debug(H5I_type_t grp);
#endif /* H5I_DEBUG_OUTPUT */
@ -843,7 +842,7 @@ done:
*
*-------------------------------------------------------------------------
*/
static hid_t
hid_t
H5I_get_file_id(hid_t obj_id)
{
H5G_entry_t *ent;
@ -1176,8 +1175,11 @@ H5I_find_id(hid_t id)
/* Check arguments */
grp = H5I_GRP(id);
if (grp <= H5I_BADID || grp >= H5I_NGROUPS)
if (grp <= H5I_BADID || grp >= H5I_NGROUPS) {
HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "invalid group number");
}
grp_ptr = H5I_id_group_list_g[grp];
if (grp_ptr == NULL || grp_ptr->count <= 0)
HGOTO_ERROR(H5E_ATOM, H5E_BADGROUP, NULL, "invalid group");

View File

@ -67,6 +67,7 @@ H5_DLL hid_t H5I_register(H5I_type_t grp, void *object);
H5_DLL void *H5I_object(hid_t id);
H5_DLL void *H5I_object_verify(hid_t id, H5I_type_t id_type);
H5_DLL H5I_type_t H5I_get_type(hid_t id);
H5_DLL hid_t H5I_get_file_id(hid_t obj_id);
H5_DLL void *H5I_remove(hid_t id);
H5_DLL void *H5I_search(H5I_type_t grp, H5I_search_func_t func, void *key);
H5_DLL int H5I_inc_ref(hid_t id);

View File

@ -906,6 +906,86 @@ H5T_init_interface(void)
status |= H5T_register(H5T_PERS_HARD, "schar_uchar", native_schar, native_uchar, H5T_conv_schar_uchar, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "uchar_schar", native_uchar, native_schar, H5T_conv_uchar_schar, H5AC_dxpl_id);
/* From char to floats */
status |= H5T_register(H5T_PERS_HARD, "char_flt", native_schar, native_float, H5T_conv_char_float, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "char_dbl", native_schar, native_double, H5T_conv_char_double, H5AC_dxpl_id);
/* From unsigned char to floats */
status |= H5T_register(H5T_PERS_HARD, "uchar_flt", native_uchar, native_float, H5T_conv_uchar_float, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "uchar_dbl", native_uchar, native_double, H5T_conv_uchar_double, H5AC_dxpl_id);
/* From short to floats */
status |= H5T_register(H5T_PERS_HARD, "short_flt", native_short, native_float, H5T_conv_short_float, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "short_dbl", native_short, native_double, H5T_conv_short_double, H5AC_dxpl_id);
/* From unsigned short to floats */
status |= H5T_register(H5T_PERS_HARD, "ushort_flt", native_ushort, native_float, H5T_conv_ushort_float, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "ushort_dbl", native_ushort, native_double, H5T_conv_ushort_double, H5AC_dxpl_id);
/* From int to floats */
status |= H5T_register(H5T_PERS_HARD, "int_flt", native_int, native_float, H5T_conv_int_float, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "int_dbl", native_int, native_double, H5T_conv_int_double, H5AC_dxpl_id);
/* From unsigned int to floats */
status |= H5T_register(H5T_PERS_HARD, "uint_flt", native_uint, native_float, H5T_conv_uint_float, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "uint_dbl", native_uint, native_double, H5T_conv_uint_double, H5AC_dxpl_id);
/* From long to floats */
status |= H5T_register(H5T_PERS_HARD, "long_flt", native_long, native_float, H5T_conv_long_float, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "long_dbl", native_long, native_double, H5T_conv_long_double, H5AC_dxpl_id);
/* From unsigned long to floats */
status |= H5T_register(H5T_PERS_HARD, "ulong_flt", native_ulong, native_float, H5T_conv_ulong_float, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "ulong_dbl", native_ulong, native_double, H5T_conv_ulong_double, H5AC_dxpl_id);
/* From long long to floats */
status |= H5T_register(H5T_PERS_HARD, "llong_flt", native_llong, native_float, H5T_conv_llong_float, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "llong_dbl", native_llong, native_double, H5T_conv_llong_double, H5AC_dxpl_id);
/* From unsigned long long to floats */
status |= H5T_register(H5T_PERS_HARD, "ullong_flt", native_ullong, native_float, H5T_conv_ullong_float, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "ullong_dbl", native_ullong, native_double, H5T_conv_ullong_double, H5AC_dxpl_id);
/* From floats to char */
status |= H5T_register(H5T_PERS_HARD, "flt_char", native_float, native_schar, H5T_conv_float_char, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "dbl_char", native_double, native_schar, H5T_conv_double_char, H5AC_dxpl_id);
/* From floats to unsigned char */
status |= H5T_register(H5T_PERS_HARD, "flt_uchar", native_float, native_uchar, H5T_conv_float_uchar, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "dbl_uchar", native_double, native_uchar, H5T_conv_double_uchar, H5AC_dxpl_id);
/* From floats to short */
status |= H5T_register(H5T_PERS_HARD, "flt_short", native_float, native_short, H5T_conv_float_short, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "dbl_short", native_double, native_short, H5T_conv_double_short, H5AC_dxpl_id);
/* From floats to unsigned short */
status |= H5T_register(H5T_PERS_HARD, "flt_ushort", native_float, native_ushort, H5T_conv_float_ushort, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "dbl_ushort", native_double, native_ushort, H5T_conv_double_ushort, H5AC_dxpl_id);
/* From floats to int */
status |= H5T_register(H5T_PERS_HARD, "flt_int", native_float, native_int, H5T_conv_float_int, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "dbl_int", native_double, native_int, H5T_conv_double_int, H5AC_dxpl_id);
/* From floats to unsigned int */
status |= H5T_register(H5T_PERS_HARD, "flt_uint", native_float, native_uint, H5T_conv_float_uint, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "dbl_uint", native_double, native_uint, H5T_conv_double_uint, H5AC_dxpl_id);
/* From floats to long */
status |= H5T_register(H5T_PERS_HARD, "flt_long", native_float, native_long, H5T_conv_float_long, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "dbl_long", native_double, native_long, H5T_conv_double_long, H5AC_dxpl_id);
/* From floats to unsigned long */
status |= H5T_register(H5T_PERS_HARD, "flt_ulong", native_float, native_ulong, H5T_conv_float_ulong, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "dbl_ulong", native_double, native_ulong, H5T_conv_double_ulong, H5AC_dxpl_id);
/* From floats to long long */
status |= H5T_register(H5T_PERS_HARD, "flt_llong", native_float, native_llong, H5T_conv_float_llong, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "dbl_llong", native_double, native_llong, H5T_conv_double_llong, H5AC_dxpl_id);
/* From floats to unsigned long long */
status |= H5T_register(H5T_PERS_HARD, "flt_ullong", native_float, native_ullong, H5T_conv_float_ullong, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_HARD, "dbl_ullong", native_double, native_ullong, H5T_conv_double_ullong, H5AC_dxpl_id);
/*
* The special no-op conversion is the fastest, so we list it last. The
* data types we use are not important as long as the source and

View File

@ -183,12 +183,14 @@ H5T_bit_get_d (uint8_t *buf, size_t offset, size_t size)
hsize_t val=0;
size_t i, hs;
hsize_t ret_value; /* Return value */
void *pt;
FUNC_ENTER_NOAPI(H5T_bit_get_d, 0);
assert (8*sizeof(val)>=size);
H5T_bit_copy ((uint8_t*)&val, 0, buf, offset, size);
switch (((H5T_t*)(H5I_object(H5T_NATIVE_INT_g)))->u.atomic.order) {
case H5T_ORDER_LE:
break;

File diff suppressed because it is too large Load Diff

View File

@ -843,6 +843,206 @@ H5_DLL herr_t H5T_conv_double_float(hid_t src_id, hid_t dst_id,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_char_float(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_char_double(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_uchar_float(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_uchar_double(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_short_float(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_short_double(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_ushort_float(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_ushort_double(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_int_float(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_int_double(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_uint_float(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_uint_double(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_long_float(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_long_double(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_ulong_float(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_ulong_double(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_llong_float(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_llong_double(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_ullong_float(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_ullong_double(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_float_char(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_float_uchar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_float_short(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_float_ushort(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_float_int(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_float_uint(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_float_long(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_float_ulong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_float_llong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_float_ullong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_double_char(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_double_uchar(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_double_short(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_double_ushort(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_double_int(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_double_uint(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_double_long(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_double_ulong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_double_llong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_double_ullong(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg,
hid_t dset_xfer_plist);
H5_DLL herr_t H5T_conv_i32le_f64le(hid_t src_id, hid_t dst_id,
H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride,