diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/H5T.c | 77 | ||||
-rw-r--r-- | src/H5Tprivate.h | 1 | ||||
-rw-r--r-- | src/H5Tpublic.h | 1 |
3 files changed, 79 insertions, 0 deletions
@@ -2660,6 +2660,46 @@ done: /*------------------------------------------------------------------------- + * Function: H5Tis_hard + * + * Purpose: Finds out whether the library's conversion function from + * type src_id to type dst_id is a hard conversion. A hard + * conversion uses compiler's casting; a soft conversion uses + * the library's own conversion function. + * + * Return: TRUE: hard conversion. + * FALSE: soft conversion. + * FAIL: failed. + * + * Programmer: Raymond Lu + * Friday, Sept 2, 2005 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +htri_t +H5Tis_hard(hid_t src_id, hid_t dst_id) +{ + htri_t ret_value; + H5T_t *src = NULL, *dst = NULL; + + FUNC_ENTER_API(H5Tis_hard, FAIL); + + /* Check args */ + if (NULL == (src = H5I_object_verify(src_id,H5I_DATATYPE)) || + NULL == (dst = H5I_object_verify(dst_id,H5I_DATATYPE))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type"); + + /* Find it */ + if((ret_value=H5T_is_hard(src, dst))<0) + HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, FAIL, "conversion function not found"); + +done: + FUNC_LEAVE_API(ret_value); +} + +/*------------------------------------------------------------------------- * Function: H5Tconvert * * Purpose: Convert NELMTS elements from type SRC_ID to type DST_ID. The @@ -4565,6 +4605,43 @@ H5T_path_bkg(const H5T_path_t *p) /*------------------------------------------------------------------------- + * Function: H5T_is_hard + * + * Purpose: Private function for H5Tis_hard. Finds out whether the + * library's conversion function from type SRC to type DST + * is a hard conversion. + * + * Return: TRUE: hard conversion. + * FALSE: soft conversion. + * FAIL: function failed. + * + * Programmer: Raymond Lu + * Friday, Sept 2, 2005 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +htri_t +H5T_is_hard(H5T_t *src, H5T_t *dst) +{ + htri_t ret_value; + H5T_path_t *path = NULL; + + FUNC_ENTER_NOAPI(H5T_is_hard, FAIL); + + /* Find it */ + if (NULL==(path=H5T_path_find(src, dst, NULL, NULL, H5AC_ind_dxpl_id))) + HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, FAIL, "conversion function not found"); + + ret_value = (htri_t)path->is_hard; + +done: + FUNC_LEAVE_NOAPI(ret_value); +} + + +/*------------------------------------------------------------------------- * Function: H5T_convert * * Purpose: Call a conversion function to convert from source to diff --git a/src/H5Tprivate.h b/src/H5Tprivate.h index d55e3d3..a93ca84 100644 --- a/src/H5Tprivate.h +++ b/src/H5Tprivate.h @@ -75,6 +75,7 @@ H5_DLL H5T_class_t H5T_get_class(const H5T_t *dt, htri_t internal); H5_DLL htri_t H5T_detect_class (const H5T_t *dt, H5T_class_t cls); H5_DLL size_t H5T_get_size(const H5T_t *dt); H5_DLL int H5T_cmp(const H5T_t *dt1, const H5T_t *dt2, hbool_t superset); +H5_DLL htri_t H5T_is_hard(H5T_t *src, H5T_t *dst); H5_DLL herr_t H5T_debug(const H5T_t *dt, FILE * stream); H5_DLL H5G_entry_t *H5T_entof(H5T_t *dt); H5_DLL htri_t H5T_is_immutable(const H5T_t *dt); diff --git a/src/H5Tpublic.h b/src/H5Tpublic.h index 6eeb21b..be35e5e 100644 --- a/src/H5Tpublic.h +++ b/src/H5Tpublic.h @@ -576,6 +576,7 @@ H5_DLL herr_t H5Tregister(H5T_pers_t pers, const char *name, hid_t src_id, H5_DLL herr_t H5Tunregister(H5T_pers_t pers, const char *name, hid_t src_id, hid_t dst_id, H5T_conv_t func); H5_DLL H5T_conv_t H5Tfind(hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata); +H5_DLL htri_t H5Tis_hard(hid_t src_id, hid_t dst_id); H5_DLL herr_t H5Tconvert(hid_t src_id, hid_t dst_id, size_t nelmts, void *buf, void *background, hid_t plist_id); |