From c373a3dc7c8cb1848ba6f59423352d83f15383b5 Mon Sep 17 00:00:00 2001 From: Quincey Koziol Date: Sun, 13 Jun 2004 20:23:22 -0500 Subject: [svn-r8679] Purpose: Code optimization Description: Detect when a default property list is being used and just copy over the default VL allocation properties, instead of querying for them. Platforms tested: Solaris 2.7 (arabica) FreeBSD 4.10 (sleipnir) w/parallel Too minor to require h5committest --- src/H5Tvlen.c | 47 +++++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/src/H5Tvlen.c b/src/H5Tvlen.c index bec8611..b5b8ba9 100644 --- a/src/H5Tvlen.c +++ b/src/H5Tvlen.c @@ -38,9 +38,6 @@ static int interface_initialize_g = 0; #define INTERFACE_INIT H5T_init_vlen_interface static herr_t H5T_init_vlen_interface(void); -/* Declare extern the free list for H5T_t's */ -H5FL_EXTERN(H5T_t); - /* Local functions */ static herr_t H5T_vlen_reclaim_recurse(void *elem, const H5T_t *dt, H5MM_free_t free_func, void *free_info); static hssize_t H5T_vlen_seq_mem_getlen(void *_vl); @@ -62,6 +59,19 @@ static herr_t H5T_vlen_disk_read(H5F_t *f, hid_t dxpl_id, void *_vl, void *_buf, static herr_t H5T_vlen_disk_write(H5F_t *f, hid_t dxpl_id, const H5T_vlen_alloc_info_t *vl_alloc_info, void *_vl, void *_buf, void *_bg, hsize_t seq_len, hsize_t base_size); static herr_t H5T_vlen_disk_setnull(H5F_t *f, hid_t dxpl_id, void *_vl, void *_bg); +/* Local variables */ + +/* Default settings for variable-length allocation routines */ +static const H5T_vlen_alloc_info_t H5T_vlen_def_vl_alloc_info ={ + H5D_XFER_VLEN_ALLOC_DEF, + H5D_XFER_VLEN_ALLOC_INFO_DEF, + H5D_XFER_VLEN_FREE_DEF, + H5D_XFER_VLEN_FREE_INFO_DEF +}; + +/* Declare extern the free list for H5T_t's */ +H5FL_EXTERN(H5T_t); + /*-------------------------------------------------------------------------- NAME @@ -1164,19 +1174,24 @@ H5T_vlen_get_alloc_info(hid_t dxpl_id, H5T_vlen_alloc_info_t *vl_alloc_info) assert(H5I_GENPROP_LST == H5I_get_type(dxpl_id)); assert(vl_alloc_info); - /* Check args */ - if(NULL == (plist = H5P_object_verify(dxpl_id,H5P_DATASET_XFER))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list") - - /* Get the allocation functions & information */ - if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_NAME,&vl_alloc_info->alloc_func)<0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") - if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_INFO_NAME,&vl_alloc_info->alloc_info)<0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") - if (H5P_get(plist,H5D_XFER_VLEN_FREE_NAME,&vl_alloc_info->free_func)<0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") - if (H5P_get(plist,H5D_XFER_VLEN_FREE_INFO_NAME,&vl_alloc_info->free_info)<0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") + /* Check for the default DXPL */ + if(dxpl_id==H5P_DATASET_XFER_DEFAULT) + HDmemcpy(vl_alloc_info,&H5T_vlen_def_vl_alloc_info,sizeof(H5T_vlen_alloc_info_t)); + else { + /* Check args */ + if(NULL == (plist = H5P_object_verify(dxpl_id,H5P_DATASET_XFER))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list") + + /* Get the allocation functions & information */ + if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_NAME,&vl_alloc_info->alloc_func)<0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") + if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_INFO_NAME,&vl_alloc_info->alloc_info)<0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") + if (H5P_get(plist,H5D_XFER_VLEN_FREE_NAME,&vl_alloc_info->free_func)<0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") + if (H5P_get(plist,H5D_XFER_VLEN_FREE_INFO_NAME,&vl_alloc_info->free_info)<0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") + } /* end else */ done: FUNC_LEAVE_NOAPI(ret_value) -- cgit v0.12