diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 1999-07-03 10:31:26 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 1999-07-03 10:31:26 (GMT) |
commit | 650e29cff6b23b99318f70699af08cfdb57ea924 (patch) | |
tree | e37bc1ece43cbbad2504adbea63a5ef9241d2453 | |
parent | 1b20703c2048cf176df2d5c792de56da92ae03e2 (diff) | |
download | hdf5-650e29cff6b23b99318f70699af08cfdb57ea924.zip hdf5-650e29cff6b23b99318f70699af08cfdb57ea924.tar.gz hdf5-650e29cff6b23b99318f70699af08cfdb57ea924.tar.bz2 |
[svn-r1418] Modified H5Tconvert to require a dataset transfer property list ID as the
final parameter (so that VL datatypes have a way to pass in the custom memory
allocation routines).
Fixed a conversion bug when VL fields were part of a compound datatype that
was causing the no-op conversion routine to be used instead of the vlen routine.
Added the H5Pset_vlen_mem_manager and H5Pget_vlen_mem_manager routines to
allow users to provide their own custom memory allocation routines for VL data
read in from the file and reclaimed with H5Dvlen_reclaim.
Finished coding on H5Dvlen_reclaim so it works now.
-rw-r--r-- | src/H5A.c | 16 | ||||
-rw-r--r-- | src/H5D.c | 80 | ||||
-rw-r--r-- | src/H5Dprivate.h | 4 | ||||
-rw-r--r-- | src/H5E.c | 1 | ||||
-rw-r--r-- | src/H5Epublic.h | 1 | ||||
-rw-r--r-- | src/H5F.c | 4 | ||||
-rw-r--r-- | src/H5Fprivate.h | 5 | ||||
-rw-r--r-- | src/H5MMpublic.h | 4 | ||||
-rw-r--r-- | src/H5Odtype.c | 10 | ||||
-rw-r--r-- | src/H5Ofill.c | 3 | ||||
-rw-r--r-- | src/H5P.c | 89 | ||||
-rw-r--r-- | src/H5Ppublic.h | 6 | ||||
-rw-r--r-- | src/H5RA.c | 14 | ||||
-rw-r--r-- | src/H5T.c | 63 | ||||
-rw-r--r-- | src/H5Tconv.c | 258 | ||||
-rw-r--r-- | src/H5Tpkg.h | 213 | ||||
-rw-r--r-- | src/H5Tprivate.h | 6 | ||||
-rw-r--r-- | src/H5Tpublic.h | 4 | ||||
-rw-r--r-- | src/H5Tvlen.c | 232 |
19 files changed, 696 insertions, 317 deletions
@@ -243,10 +243,8 @@ H5A_create(const H5G_entry_t *ent, const char *name, const H5T_t *type, attr->name=HDstrdup(name); attr->dt=H5T_copy(type, H5T_COPY_ALL); /* Mark any VL datatypes as being on disk now */ - if(H5T_get_class(attr->dt)==H5T_VLEN) { - if (H5T_vlen_set_loc(attr->dt, ent->file, H5T_VLEN_DISK)<0) { - HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location"); - } + if (H5T_vlen_mark(attr->dt, ent->file, H5T_VLEN_DISK)<0) { + HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location"); } attr->ds=H5S_copy(space); attr->initialized = TRUE; /*for now, set to false later*/ @@ -667,7 +665,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, 0, tconv_buf, bkg_buf)<0) { + if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, tconv_buf, bkg_buf, H5P_DEFAULT)<0) { HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "data type conversion failed"); } @@ -835,7 +833,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, 0, tconv_buf, bkg_buf)<0) { + if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, tconv_buf, bkg_buf, H5P_DEFAULT)<0) { HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "data type conversion failed"); } @@ -962,11 +960,9 @@ H5Aget_type(hid_t attr_id) "unable to copy datatype"); } /* Mark any VL datatypes as being in memory now */ - if(H5T_get_class(dst)==H5T_VLEN) { - if (H5T_vlen_set_loc(dst, NULL, H5T_VLEN_MEMORY)<0) { - HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, + if (H5T_vlen_mark(dst, NULL, H5T_VLEN_MEMORY)<0) { + HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location"); - } } if (H5T_lock(dst, FALSE)<0) { H5T_close(dst); @@ -463,11 +463,8 @@ H5Dget_type(hid_t dset_id) "unable to copy the data type"); } /* Mark any VL datatypes as being in memory now */ - if(H5T_get_class(copied_type)==H5T_VLEN) { - if (H5T_vlen_set_loc(copied_type, NULL, H5T_VLEN_MEMORY)<0) { - HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, - "invalid VL location"); - } + if (H5T_vlen_mark(copied_type, NULL, H5T_VLEN_MEMORY)<0) { + HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location"); } if (H5T_lock (copied_type, FALSE)<0) { H5T_close (copied_type); @@ -594,7 +591,6 @@ H5Dread(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id, const H5T_t *mem_type = NULL; const H5S_t *mem_space = NULL; const H5S_t *file_space = NULL; - const H5F_xfer_t *xfer_parms = NULL; FUNC_ENTER(H5Dread, FAIL); H5TRACE6("e","iiiiix",dset_id,mem_type_id,mem_space_id,file_space_id, @@ -632,10 +628,7 @@ H5Dread(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id, "selection+offset not within extent"); } } - if (H5P_DEFAULT == plist_id) { - xfer_parms = &H5F_xfer_dflt; - } else if (H5P_DATASET_XFER != H5P_get_class(plist_id) || - NULL == (xfer_parms = H5I_object(plist_id))) { + if (H5P_DEFAULT != plist_id && H5P_DATASET_XFER != H5P_get_class(plist_id)) { HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms"); } if (!buf) { @@ -643,7 +636,7 @@ H5Dread(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id, } /* read raw data */ - if (H5D_read(dset, mem_type, mem_space, file_space, xfer_parms, + if (H5D_read(dset, mem_type, mem_space, file_space, plist_id, buf/*out*/) < 0) { HRETURN_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "can't read data"); } @@ -693,7 +686,6 @@ H5Dwrite(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id, const H5T_t *mem_type = NULL; const H5S_t *mem_space = NULL; const H5S_t *file_space = NULL; - const H5F_xfer_t *xfer_parms = NULL; FUNC_ENTER(H5Dwrite, FAIL); H5TRACE6("e","iiiiix",dset_id,mem_type_id,mem_space_id,file_space_id, @@ -731,10 +723,7 @@ H5Dwrite(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id, "selection+offset not within extent"); } } - if (H5P_DEFAULT == plist_id) { - xfer_parms = &H5F_xfer_dflt; - } else if (H5P_DATASET_XFER != H5P_get_class(plist_id) || - NULL == (xfer_parms = H5I_object(plist_id))) { + if (H5P_DEFAULT != plist_id && H5P_DATASET_XFER != H5P_get_class(plist_id)) { HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms"); } if (!buf) { @@ -742,7 +731,7 @@ H5Dwrite(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id, } /* write raw data */ - if (H5D_write(dset, mem_type, mem_space, file_space, xfer_parms, + if (H5D_write(dset, mem_type, mem_space, file_space, plist_id, buf) < 0) { HRETURN_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "can't write data"); } @@ -922,10 +911,8 @@ H5D_create(H5G_entry_t *loc, const char *name, const H5T_t *type, new_dset->type = H5T_copy(type, H5T_COPY_ALL); /* Mark any VL datatypes as being on disk now */ - if(H5T_get_class(new_dset->type)==H5T_VLEN) { - if (H5T_vlen_set_loc(new_dset->type, f, H5T_VLEN_DISK)<0) { - HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "invalid VL location"); - } + if (H5T_vlen_mark(new_dset->type, f, H5T_VLEN_DISK)<0) { + HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "invalid VL location"); } efl = &(new_dset->create_parms->efl); @@ -1447,13 +1434,18 @@ H5D_close(H5D_t *dataset) * rky 980918 * Added must_convert to do non-optimized read when necessary. * + * Quincey Koziol, 2 July 1999 + * Changed xfer_parms parameter to xfer plist parameter, so it could be passed + * to H5T_convert + * *------------------------------------------------------------------------- */ herr_t H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, - const H5S_t *file_space, const H5F_xfer_t *xfer_parms, + const H5S_t *file_space, hid_t dset_xfer_plid, void *buf/*out*/) { + const H5F_xfer_t *xfer_parms = NULL; hssize_t nelmts; /*number of elements */ size_t smine_start; /*strip mine start loc */ size_t n, smine_nelmts; /*elements per strip */ @@ -1486,7 +1478,6 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, /* check args */ assert(dataset && dataset->ent.file); assert(mem_type); - assert(xfer_parms); assert(buf); /* Initialize these before any errors can occur */ @@ -1494,6 +1485,14 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, HDmemset(&bkg_iter,0,sizeof(H5S_sel_iter_t)); HDmemset(&file_iter,0,sizeof(H5S_sel_iter_t)); + /* Get the dataset transfer property list */ + if (H5P_DEFAULT == dset_xfer_plid) { + xfer_parms = &H5F_xfer_dflt; + } else if (H5P_DATASET_XFER != H5P_get_class(dset_xfer_plid) || + NULL == (xfer_parms = H5I_object(dset_xfer_plid))) { + HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms"); + } + if (!file_space) { if (NULL==(free_this_space=H5S_read (&(dataset->ent)))) { HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, @@ -1752,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, 0, tconv_buf, - bkg_buf)<0) { + bkg_buf, dset_xfer_plid)<0) { HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "data type conversion failed"); } @@ -1819,13 +1818,18 @@ printf("%s: check 2.0, src_type_size=%d, dst_type_size=%d, target_size=%d, min_e * rky 980918 * Added must_convert to do non-optimized read when necessary. * + * Quincey Koziol, 2 July 1999 + * Changed xfer_parms parameter to xfer plist parameter, so it could be passed + * to H5T_convert + * *------------------------------------------------------------------------- */ herr_t H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, - const H5S_t *file_space, const H5F_xfer_t *xfer_parms, + const H5S_t *file_space, hid_t dset_xfer_plid, const void *buf) { + const H5F_xfer_t *xfer_parms = NULL; hssize_t nelmts; /*total number of elmts */ size_t smine_start; /*strip mine start loc */ size_t n, smine_nelmts; /*elements per strip */ @@ -1858,7 +1862,6 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, /* check args */ assert(dataset && dataset->ent.file); assert(mem_type); - assert(xfer_parms); assert(buf); #ifdef HAVE_PARALLEL @@ -1888,6 +1891,14 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, HDmemset(&bkg_iter,0,sizeof(H5S_sel_iter_t)); HDmemset(&file_iter,0,sizeof(H5S_sel_iter_t)); + /* Get the dataset transfer property list */ + if (H5P_DEFAULT == dset_xfer_plid) { + xfer_parms = &H5F_xfer_dflt; + } else if (H5P_DATASET_XFER != H5P_get_class(dset_xfer_plid) || + NULL == (xfer_parms = H5I_object(dset_xfer_plid))) { + HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms"); + } + if (0==(dataset->ent.file->intent & H5F_ACC_RDWR)) { HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "no write intent on file"); @@ -1949,7 +1960,7 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, } } #ifdef QAK - printf("%s: after H5T_find, tpath=%p\n",FUNC,tpath); + printf("%s: after H5T_find, tpath=%p, tpath->name=%s\n",FUNC,tpath,tpath->name); #endif /* QAK */ if (NULL==(sconv=H5S_find(mem_space, file_space))) { HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, @@ -2152,7 +2163,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, 0, tconv_buf, - bkg_buf)<0) { + bkg_buf, dset_xfer_plid)<0) { HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "data type conversion failed"); } @@ -2685,6 +2696,7 @@ H5Diterate(void *buf, hid_t type_id, hid_t space_id, H5D_operator_t operator, herr_t H5Dvlen_reclaim(hid_t type_id, hid_t space_id, hid_t plist_id, void *buf) { + const H5F_xfer_t *xfer_parms = NULL; herr_t ret_value=FAIL; FUNC_ENTER(H5Dvlen_reclaim, FAIL); @@ -2693,12 +2705,20 @@ H5Dvlen_reclaim(hid_t type_id, hid_t space_id, hid_t plist_id, void *buf) /* Check args */ if (H5I_DATATYPE!=H5I_get_type(type_id) || H5I_DATASPACE!=H5I_get_type(space_id) || - H5P_DATASET_XFER!=H5P_get_class(plist_id) || buf==NULL) { HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid argument"); } -/* Call H5Diterate with args, etc. */ + /* Retrieve dataset transfer property list */ + if (H5P_DEFAULT == plist_id) { + xfer_parms = &H5F_xfer_dflt; + } else if (H5P_DATASET_XFER != H5P_get_class(plist_id) || + NULL == (xfer_parms = H5I_object(plist_id))) { + HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms"); + } + + /* Call H5Diterate with args, etc. */ + ret_value=H5Diterate(buf,type_id,space_id,H5T_vlen_reclaim,xfer_parms); FUNC_LEAVE(ret_value); } /* end H5Dvlen_reclaim() */ diff --git a/src/H5Dprivate.h b/src/H5Dprivate.h index e420619..6fc03e2 100644 --- a/src/H5Dprivate.h +++ b/src/H5Dprivate.h @@ -62,10 +62,10 @@ __DLL__ herr_t H5D_close(H5D_t *dataset); __DLL__ htri_t H5D_isa(H5G_entry_t *ent); __DLL__ herr_t H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, const H5S_t *file_space, - const H5F_xfer_t *xfer_parms, void *buf/*out*/); + hid_t dset_xfer_plist, void *buf/*out*/); __DLL__ herr_t H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, const H5S_t *file_space, - const H5F_xfer_t *xfer_parms, const void *buf); + hid_t dset_xfer_plist, const void *buf); __DLL__ herr_t H5D_extend(H5D_t *dataset, const hsize_t *size); __DLL__ H5G_entry_t *H5D_entof(H5D_t *dataset); __DLL__ H5T_t *H5D_typeof(H5D_t *dset); @@ -70,6 +70,7 @@ static const H5E_minor_mesg_t H5E_minor_mesg_g[] = { {H5E_BADVALUE, "Bad value"}, {H5E_NOSPACE, "No space available for allocation"}, {H5E_CANTCOPY, "Unable to copy object"}, + {H5E_CANTFREE, "Unable to free object"}, {H5E_FILEEXISTS, "File already exists"}, {H5E_FILEOPEN, "File already open"}, {H5E_CANTCREATE, "Unable to create file"}, diff --git a/src/H5Epublic.h b/src/H5Epublic.h index 607fd95..e7877fb 100644 --- a/src/H5Epublic.h +++ b/src/H5Epublic.h @@ -92,6 +92,7 @@ typedef enum H5E_minor_t { /* Resource errors */ H5E_NOSPACE, /*no space available for allocation */ H5E_CANTCOPY, /*unable to copy object */ + H5E_CANTFREE, /*unable to free object */ /* File accessability errors */ H5E_FILEEXISTS, /*file already exists */ @@ -85,6 +85,10 @@ const H5F_xfer_t H5F_xfer_dflt = { * block size to cache */ H5D_XFER_DFLT, /* Independent data transfer */ + NULL, /* Default to malloc for VL allocations */ + NULL, /* No information needed for malloc allocations */ + NULL, /* Default to free for VL frees */ + NULL, /* No information needed for free frees */ }; /* diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h index 2110bd3..ae0d0a6 100644 --- a/src/H5Fprivate.h +++ b/src/H5Fprivate.h @@ -23,6 +23,7 @@ /* This is a near top-level header! Try not to include much! */ #include <H5private.h> #include <H5Dpublic.h> /*for the H5D_transfer_t type */ +#include <H5MMpublic.h> /*for the H5MM_allocate_t and H5MM_free_t types */ /* * Feature: Define this constant to be non-zero if you want to enable code @@ -342,6 +343,10 @@ typedef struct H5F_xfer_t { uintn cache_hyper; /*cache hyperslab blocks during I/O? */ uintn block_limit; /*largest hyperslab block to cache */ H5D_transfer_t xfer_mode; /*independent or collective transfer */ + H5MM_allocate_t vlen_alloc; /* VL datatype allocation function */ + void * alloc_info; /* VL datatype allocation information */ + H5MM_free_t vlen_free; /* VL datatype free function */ + void * free_info; /* VL datatype free information */ } H5F_xfer_t; /* diff --git a/src/H5MMpublic.h b/src/H5MMpublic.h index b5cd659..5b8b579 100644 --- a/src/H5MMpublic.h +++ b/src/H5MMpublic.h @@ -21,6 +21,10 @@ /* Public headers needed by this file */ #include <H5public.h> +/* These typedefs are currently used for VL datatype allocation/freeing */ +typedef void *(* H5MM_allocate_t)(size_t size,void *info); +typedef void (* H5MM_free_t)(void *mem, void *free_info); + #ifdef __cplusplus extern "C" { #endif diff --git a/src/H5Odtype.c b/src/H5Odtype.c index 14f2840..72253a7 100644 --- a/src/H5Odtype.c +++ b/src/H5Odtype.c @@ -235,6 +235,13 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt) HRETURN_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode member type"); } + + /* + * Set the "force conversion" flag if VL datatype fields exist in this + * type or any component types + */ + if(dt->u.compnd.memb[i].type->type==H5T_VLEN || dt->u.compnd.memb[i].type->force_conv==TRUE) + dt->force_conv=TRUE; /* Total member size */ dt->u.compnd.memb[i].size = dt->u.compnd.memb[i].type->size; @@ -295,8 +302,9 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt) HRETURN_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode VL parent type"); } + dt->force_conv=TRUE; /* Mark this type as on disk */ - if (H5T_vlen_set_loc(dt, f, H5T_VLEN_DISK)<0) { + if (H5T_vlen_mark(dt, f, H5T_VLEN_DISK)<0) { HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location"); } break; diff --git a/src/H5Ofill.c b/src/H5Ofill.c index 5095919..7018ae2 100644 --- a/src/H5Ofill.c +++ b/src/H5Ofill.c @@ -13,6 +13,7 @@ #include <H5Iprivate.h> #include <H5MMprivate.h> #include <H5Oprivate.h> +#include <H5Pprivate.h> #define PABLO_MASK H5O_fill_mask @@ -359,7 +360,7 @@ H5O_fill_convert(H5O_fill_t *fill, H5T_t *dset_type) } /* Do the conversion */ - if (H5T_convert(tpath, src_id, dst_id, 1, 0, buf, bkg)<0) { + if (H5T_convert(tpath, src_id, dst_id, 1, 0, buf, bkg, H5P_DEFAULT)<0) { HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "data type conversion failed"); } @@ -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, 0, buf, bkg)<0) { + if (H5T_convert(tpath, src_id, type_id, 1, 0, buf, bkg, H5P_DEFAULT)<0) { HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "data type conversion failed"); } @@ -3052,6 +3052,93 @@ H5Pget_gc_reference(hid_t fapl_id, unsigned *gc_ref/*out*/) } +/*------------------------------------------------------------------------- + * Function: H5Pset_vlen_mem_manager + * + * Purpose: Sets the memory allocate/free pair for VL datatypes. The + * allocation routine is called when data is read into a new array + * and the free routine is called when H5Dvlen_reclaim is called. + * The alloc_info and free_info are user parameters which are passed + * to the allocation and freeing functions respectively. + * To reset the allocate/free functions to the default setting of using + * the system's malloc/free functions, call this routine with alloc_func + * and free_func set to NULL. + * + * Return: Non-negative on success/Negative on failure + * + * Programmer: Quincey Koziol + * Thursday, July 1, 1999 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +herr_t +H5Pset_vlen_mem_manager(hid_t plist_id, H5MM_allocate_t alloc_func, + void *alloc_info, H5MM_free_t free_func, void *free_info) +{ + H5F_xfer_t *plist = NULL; + + FUNC_ENTER (H5Pset_vlen_mem_manager, FAIL); + + /* Check arguments */ + if (H5P_DATASET_XFER != H5P_get_class (plist_id) || + NULL == (plist = H5I_object (plist_id))) { + HRETURN_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list"); + } + + /* Update property list */ + plist->vlen_alloc = alloc_func; + plist->alloc_info = alloc_info; + plist->vlen_free = free_func; + plist->free_info = free_info; + + FUNC_LEAVE (SUCCEED); +} + + +/*------------------------------------------------------------------------- + * Function: H5Pget_vlen_mem_manager + * + * Purpose: The inverse of H5Pset_vlen_mem_manager() + * + * Return: Non-negative on success/Negative on failure + * + * Programmer: Quincey Koziol + * Thursday, July 1, 1999 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +herr_t +H5Pget_vlen_mem_manager(hid_t plist_id, H5MM_allocate_t *alloc_func, + void **alloc_info, H5MM_free_t *free_func, void **free_info) +{ + H5F_xfer_t *plist = NULL; + + FUNC_ENTER (H5Pset_vlen_mem_manager, FAIL); + + /* Check arguments */ + if (H5P_DATASET_XFER != H5P_get_class (plist_id) || + NULL == (plist = H5I_object (plist_id))) { + HRETURN_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list"); + } + + if(alloc_func!=NULL) + *alloc_func= plist->vlen_alloc; + if(alloc_info!=NULL) + *alloc_info= plist->alloc_info; + if(free_func!=NULL) + *free_func= plist->vlen_free; + if(free_info!=NULL) + *free_info= plist->free_info; + + FUNC_LEAVE (SUCCEED); +} + + + /*-------------------------------------------------------------------------- NAME H5Pcopy diff --git a/src/H5Ppublic.h b/src/H5Ppublic.h index f16fa68..f19bec7 100644 --- a/src/H5Ppublic.h +++ b/src/H5Ppublic.h @@ -141,6 +141,12 @@ __DLL__ herr_t H5Pget_xfer(hid_t plist_id, __DLL__ herr_t H5Pset_gc_references(hid_t fapl_id, unsigned gc_ref); __DLL__ herr_t H5Pget_gc_reference(hid_t fapl_id, unsigned *gc_ref/*out*/); +__DLL__ herr_t H5Pset_vlen_mem_manager(hid_t plist_id, + H5MM_allocate_t alloc_func, void *alloc_info, H5MM_free_t free_func, + void *free_info); +__DLL__ herr_t H5Pget_vlen_mem_manager(hid_t plist_id, + H5MM_allocate_t *alloc_func, void **alloc_info, H5MM_free_t *free_func, + void **free_info); #ifdef __cplusplus } @@ -738,7 +738,7 @@ H5RA_write(H5RA_t *ra, hssize_t start_row, hsize_t nrows, H5T_t *type, "memory allocation failed for meta data"); } if (H5D_read(ra->meta, H5RA_meta_type_g, mm_space, mf_space, - &H5F_xfer_dflt, meta)<0) { + H5P_DEFAULT, meta)<0) { HGOTO_ERROR(H5E_RAGGED, H5E_READERROR, FAIL, "unable to read meta data"); } @@ -779,7 +779,7 @@ H5RA_write(H5RA_t *ra, hssize_t start_row, hsize_t nrows, H5T_t *type, HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL, "unable to set meta data selection"); } - if (H5D_write(ra->raw, type, rm_space, rf_space, &H5F_xfer_dflt, + if (H5D_write(ra->raw, type, rm_space, rf_space, H5P_DEFAULT, raw_buf)<0) { HGOTO_ERROR(H5E_RAGGED, H5E_WRITEERROR, FAIL, "unable to write raw data"); @@ -809,7 +809,7 @@ H5RA_write(H5RA_t *ra, hssize_t start_row, hsize_t nrows, H5T_t *type, "unable to set meta data selection"); } if (H5D_write(ra->meta, H5RA_meta_type_g, mm_space, mf_space, - &H5F_xfer_dflt, meta)<0) { + H5P_DEFAULT, meta)<0) { HGOTO_ERROR(H5E_RAGGED, H5E_WRITEERROR, FAIL, "unable to write meta data"); } @@ -926,7 +926,7 @@ H5RA_fix_overflow(H5RA_t *ra, H5T_t *type, H5RA_meta_t *meta, hsize_t nelmts, HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL, "unable to set overflow selection"); } - if (H5D_write(ra->over, type, om_space, of_space, &H5F_xfer_dflt, + if (H5D_write(ra->over, type, om_space, of_space, H5P_DEFAULT, buf)<0) { HGOTO_ERROR(H5E_RAGGED, H5E_WRITEERROR, FAIL, "unable to write to overflow dataset"); @@ -1103,7 +1103,7 @@ H5RA_read(H5RA_t *ra, hssize_t start_row, hsize_t nrows, H5T_t *type, HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for raw dataset"); } - if (H5D_read(ra->raw, type, rm_space, rf_space, &H5F_xfer_dflt, + if (H5D_read(ra->raw, type, rm_space, rf_space, H5P_DEFAULT, raw_buf)<0) { HGOTO_ERROR(H5E_RAGGED, H5E_READERROR, FAIL, "unable to read raw dataset"); @@ -1134,7 +1134,7 @@ H5RA_read(H5RA_t *ra, hssize_t start_row, hsize_t nrows, H5T_t *type, "unable to set meta data selection"); } if (H5D_read(ra->meta, H5RA_meta_type_g, mm_space, mf_space, - &H5F_xfer_dflt, meta)<0) { + H5P_DEFAULT, meta)<0) { HGOTO_ERROR(H5E_RAGGED, H5E_READERROR, FAIL, "unable to read meta data"); } @@ -1182,7 +1182,7 @@ H5RA_read(H5RA_t *ra, hssize_t start_row, hsize_t nrows, H5T_t *type, HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL, "unable to set overflow selection"); } - if (H5D_read(ra->over, type, om_space, of_space, &H5F_xfer_dflt, + if (H5D_read(ra->over, type, om_space, of_space, H5P_DEFAULT, buf_out[i])<0) { HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL, "unable to read overflow dataset"); @@ -18,6 +18,7 @@ static char RcsId[] = "@(#)$Revision$"; #include <H5Gprivate.h> /*groups */ #include <H5HGprivate.h> /*global heap */ #include <H5MMprivate.h> /*memory management */ +#include <H5Pprivate.h> /* Property Lists */ #include <H5Sprivate.h> /*data space */ #include <H5Tpkg.h> /*data-type functions */ @@ -1358,7 +1359,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, 0, NULL, NULL)<0) { + 0, 0, NULL, NULL,H5P_DEFAULT)<0) { #ifdef H5T_DEBUG if (H5DEBUG(T)) { fprintf (H5DEBUG(T), "H5T: conversion function " @@ -3912,10 +3913,11 @@ H5Tvlen_create(hid_t base_id) } H5F_addr_undef (&(dt->ent.header)); dt->type = H5T_VLEN; + dt->force_conv = TRUE; /* Force conversions (i.e. memory to memory conversions should duplicate data, not point to the same VL sequences */ dt->parent = H5T_copy(base, H5T_COPY_ALL); /* Set up VL information */ - if (H5T_vlen_set_loc(dt, NULL, H5T_VLEN_MEMORY)<0) { + if (H5T_vlen_mark(dt, NULL, H5T_VLEN_MEMORY)<0) { HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location"); } @@ -4139,7 +4141,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, 0, NULL, NULL)<0) { + if ((func)(tmp_sid, tmp_did, &cdata, 0, 0, NULL, NULL, H5P_DEFAULT)<0) { H5I_dec_ref(tmp_sid); H5I_dec_ref(tmp_did); tmp_sid = tmp_did = -1; @@ -4171,7 +4173,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, 0, NULL, NULL)<0) { + 0, 0, NULL, NULL, H5P_DEFAULT)<0) { #ifdef H5T_DEBUG if (H5DEBUG(T)) { fprintf (H5DEBUG(T), "H5T: conversion function 0x%08lx " @@ -4287,7 +4289,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, 0, NULL, NULL)<0) { + if ((path->func)(FAIL, FAIL, &(path->cdata), 0, 0, NULL, NULL, H5P_DEFAULT)<0) { #ifdef H5T_DEBUG if (H5DEBUG(T)) { fprintf(H5DEBUG(T), "H5T: conversion function 0x%08lx failed " @@ -4370,7 +4372,10 @@ H5Tfind(hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata) * with the converted values to fill in cracks (for instance, * BACKGROUND might be an array of structs with the `a' and `b' * fields already initialized and the conversion of BUF supplies - * the `c' and `d' field values). + * the `c' and `d' field values). The PLIST_ID a dataset transfer + * property list which is passed to the conversion functions. (It's + * currently only used to pass along the VL datatype custom allocation + * information -QAK 7/1/99) * * Return: Non-negative on success/Negative on failure * @@ -4378,24 +4383,24 @@ H5Tfind(hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata) * Wednesday, June 10, 1998 * * Modifications: + * Added xfer_parms argument to pass VL datatype custom allocation + * information down the chain. - QAK, 7/1/99 * *------------------------------------------------------------------------- */ herr_t H5Tconvert(hid_t src_id, hid_t dst_id, size_t nelmts, void *buf, - void *background) + void *background, hid_t plist_id) { H5T_path_t *tpath=NULL; /*type conversion info */ H5T_t *src=NULL, *dst=NULL; /*unatomized types */ FUNC_ENTER (H5Tconvert, FAIL); - H5TRACE5("e","iizxx",src_id,dst_id,nelmts,buf,background); /* Check args */ - 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))) { + 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)) || + (H5P_DEFAULT != plist_id && H5P_DATASET_XFER != H5P_get_class(plist_id))) { HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type"); } @@ -4405,7 +4410,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, 0, buf, background)<0) { + if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, buf, background, plist_id)<0) { HRETURN_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "data type conversion failed"); } @@ -4831,7 +4836,7 @@ H5T_copy(const H5T_t *old_dt, H5T_copy_t method) } } else if (H5T_VLEN == new_dt->type) { /* H5T_copy converts any VL type into a memory VL type */ - if (H5T_vlen_set_loc(new_dt, NULL, H5T_VLEN_MEMORY)<0) { + if (H5T_vlen_mark(new_dt, NULL, H5T_VLEN_MEMORY)<0) { HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "invalid VL location"); } } else if (H5T_OPAQUE == new_dt->type) { @@ -5506,6 +5511,14 @@ H5T_struct_insert(H5T_t *parent, const char *name, size_t offset, intn ndims, parent->u.compnd.sorted = H5T_SORT_NONE; parent->u.compnd.nmembs++; + + /* + * Set the "force conversion" flag if VL datatype fields exist in this type + * or any component types + */ + if(member->type==H5T_VLEN || member->force_conv==TRUE) + parent->force_conv=TRUE; + FUNC_LEAVE(SUCCEED); } @@ -6401,7 +6414,7 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name, 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, 0, - NULL, NULL)<0) { + NULL, NULL, H5P_DEFAULT)<0) { #ifdef H5T_DEBUG if (H5DEBUG(T)) { fprintf(H5DEBUG(T), "H5T: unable to initialize no-op " @@ -6417,8 +6430,12 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name, * Find the conversion path. If source and destination types are equal * then use entry[0], otherwise do a binary search over the * remaining entries. + * + * Quincey Koziol, 2 July, 1999 + * Only allow the no-op conversion to occur if no "force conversion" flags + * are set */ - if (0==H5T_cmp(src, dst)) { + if (src->force_conv==FALSE && dst->force_conv==FALSE && 0==H5T_cmp(src, dst)) { table = H5T_g.path[0]; cmp = 0; md = 0; @@ -6488,7 +6505,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, 0, NULL, NULL)<0) { + if ((func)(src_id, dst_id, &(path->cdata), 0, 0, NULL, NULL, H5P_DEFAULT)<0) { HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to initialize conversion function"); } @@ -6520,7 +6537,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, 0, NULL, NULL)<0) { + 0, 0, NULL, NULL, H5P_DEFAULT)<0) { HDmemset (&(path->cdata), 0, sizeof(H5T_cdata_t)); H5E_clear(); /*ignore the error*/ } else { @@ -6542,7 +6559,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, 0, NULL, NULL)<0) { + if ((table->func)(FAIL, FAIL, &(table->cdata), 0, 0, NULL, NULL, H5P_DEFAULT)<0) { #ifdef H5T_DEBUG if (H5DEBUG(T)) { fprintf(H5DEBUG(T), "H5T: conversion function 0x%08lx free " @@ -6615,11 +6632,15 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name, * then convert one value at each memory location advancing * STRIDE bytes each time; otherwise assume both source and * destination values are packed. + * + * Quincey Koziol, 1999-07-01 + * Added dataset transfer properties, to allow custom VL datatype + * allocation function to be passed down to VL conversion routine. *------------------------------------------------------------------------- */ herr_t H5T_convert(H5T_path_t *tpath, hid_t src_id, hid_t dst_id, size_t nelmts, - size_t stride, void *buf, void *bkg) + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist) { #ifdef H5T_DEBUG H5_timer_t timer; @@ -6632,7 +6653,7 @@ H5T_convert(H5T_path_t *tpath, hid_t src_id, hid_t dst_id, size_t nelmts, #endif tpath->cdata.command = H5T_CONV_CONV; if ((tpath->func)(src_id, dst_id, &(tpath->cdata), nelmts, stride, buf, - bkg)<0) { + bkg, dset_xfer_plist)<0) { HRETURN_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "data type conversion failed"); } diff --git a/src/H5Tconv.c b/src/H5Tconv.c index dc9a7bc..e34d980 100644 --- a/src/H5Tconv.c +++ b/src/H5Tconv.c @@ -13,6 +13,7 @@ #include <H5Iprivate.h> #include <H5Eprivate.h> #include <H5MMprivate.h> +#include <H5Pprivate.h> #include <H5Tpkg.h> #include <H5TBprivate.h> @@ -396,7 +397,7 @@ 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, size_t UNUSED stride, void UNUSED *buf, - void UNUSED *background) + void UNUSED *background, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_noop, FAIL); @@ -445,7 +446,7 @@ H5T_conv_noop(hid_t UNUSED src_id, hid_t UNUSED dst_id, H5T_cdata_t *cdata, */ herr_t H5T_conv_order(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *_buf, void UNUSED *background) + size_t stride, void *_buf, void UNUSED *background, hid_t UNUSED dset_xfer_plist) { uint8_t *buf = (uint8_t*)_buf; uint8_t tmp; @@ -551,7 +552,7 @@ H5T_conv_order(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, */ herr_t H5T_conv_b_b(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *_buf, void UNUSED *background) + size_t stride, void *_buf, void UNUSED *background, hid_t UNUSED dset_xfer_plist) { uint8_t *buf = (uint8_t*)_buf; H5T_t *src=NULL, *dst=NULL; /*source and dest data types */ @@ -949,7 +950,7 @@ H5T_conv_struct_init (H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata) */ herr_t H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *_buf, void *_bkg) + size_t stride, void *_buf, void *_bkg, hid_t dset_xfer_plist) { uint8_t *buf = (uint8_t *)_buf; /*cast for pointer arithmetic */ uint8_t *bkg = (uint8_t *)_bkg; /*background pointer arithmetic */ @@ -1063,7 +1064,7 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, priv->memb_nelmts[i], 0, /*no striding*/ buf + src_memb->offset, - bkg + dst_memb->offset)<0) { + bkg + dst_memb->offset,dset_xfer_plist)<0) { HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert compound data type " "member"); @@ -1097,7 +1098,7 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, priv->dst_memb_id[src2dst[i]], priv->memb_nelmts[i], 0, /*no striding*/ - buf+offset, bkg+dst_memb->offset)<0) { + buf+offset, bkg+dst_memb->offset,dset_xfer_plist)<0) { HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert compound data type " "member"); @@ -1180,7 +1181,7 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, */ 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) + size_t nelmts, size_t stride, void *_buf, void *_bkg, hid_t dset_xfer_plist) { uint8_t *buf = (uint8_t *)_buf; /*cast for pointer arithmetic */ uint8_t *bkg = (uint8_t *)_bkg; /*background pointer arithmetic */ @@ -1333,7 +1334,7 @@ H5T_conv_struct_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, priv->dst_memb_id[src2dst[i]], nelmts, stride?stride:src->size, - xbuf, xbkg)<0) { + xbuf, xbkg,dset_xfer_plist)<0) { HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert compound data " "type member"); @@ -1377,7 +1378,7 @@ H5T_conv_struct_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, priv->src_memb_id[i], priv->dst_memb_id[src2dst[i]], nelmts, stride?stride:src->size, - xbuf, xbkg)<0) { + xbuf, xbkg, dset_xfer_plist)<0) { HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert compound data " "type member"); @@ -1575,7 +1576,7 @@ H5T_conv_enum_init(H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata) */ herr_t 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) + size_t stride, void *_buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { uint8_t *buf = (uint8_t*)_buf; /*cast for pointer arithmetic */ H5T_t *src=NULL, *dst=NULL; /*src and dst data types */ @@ -1744,12 +1745,19 @@ H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, * * Modifications: * + * Quincey Koziol, 2 July, 1999 + * Enabled 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_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *_buf, void UNUSED *_bkg) + size_t stride, void *_buf, void UNUSED *_bkg, hid_t dset_xfer_plist) { + const H5F_xfer_t *xfer_parms = NULL; 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 */ @@ -1770,20 +1778,6 @@ H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, FUNC_ENTER (H5T_conv_vlen, 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: /* @@ -1821,12 +1815,20 @@ H5T_conv_vlen(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"); } + /* Get the dataset transfer property list */ + if (H5P_DEFAULT == dset_xfer_plist) { + xfer_parms = &H5F_xfer_dflt; + } else if (H5P_DATASET_XFER != H5P_get_class(dset_xfer_plist) || + NULL == (xfer_parms = H5I_object(dset_xfer_plist))) { + HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms"); + } + /* * Do we process the values from beginning to end or vice versa? Also, * how many of the elements have the source and destination areas * overlapping? */ - if (src->size==dst->size) { + if (src->size==dst->size || stride>0) { olap = nelmts; sp = dp = (uint8_t*)_buf; direction = 1; @@ -1836,16 +1838,16 @@ H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, direction = 1; } else { olap = nelmts-(((src->size)/(dst->size-src->size))+1); /* potentially this uses the destination buffer 1 extra time, but its faster that floating-point calcs */ - sp = (uint8_t*)_buf + (nelmts-1) * src->size; - dp = (uint8_t*)_buf + (nelmts-1) * dst->size; + sp = (uint8_t*)_buf + (nelmts-1) * (stride ? stride : src->size); + dp = (uint8_t*)_buf + (nelmts-1) * (stride ? stride : dst->size); direction = -1; } /* * Direction & size of buffer traversal. */ - src_delta = direction * src->size; - dst_delta = direction * dst->size; + src_delta = direction * (stride ? stride : src->size); + dst_delta = direction * (stride ? stride : dst->size); /* * If the source and destination buffers overlap then use a @@ -1898,11 +1900,11 @@ 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, 0, conv_buf_ptr, NULL)<0) + if (H5T_convert(tpath, tsrc_id, tdst_id, seq_len, 0, conv_buf_ptr, NULL, dset_xfer_plist)<0) HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "datatype conversion failed"); /* Allocate new VL buffer */ - if((*(dst->u.vlen.alloc))(dst->u.vlen.f,d,seq_len,dst_base_size)<0) + if((*(dst->u.vlen.alloc))(xfer_parms,d,seq_len,dst_base_size)<0) HRETURN_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "allocation failed for VL data"); /* Write sequence to destination location */ @@ -1969,7 +1971,7 @@ H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, */ herr_t 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) + size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { H5T_t *src = NULL; /*source data type */ H5T_t *dst = NULL; /*destination data type */ @@ -2337,7 +2339,7 @@ H5T_conv_i_i (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, */ herr_t 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) + size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { /* Traversal-related variables */ H5T_t *src_p; /*source data type */ @@ -2746,7 +2748,7 @@ H5T_conv_f_f (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, */ herr_t H5T_conv_s_s (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void UNUSED *bkg) + size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { H5T_t *src=NULL; /*source data type */ H5T_t *dst=NULL; /*destination data type */ @@ -2981,7 +2983,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_schar_uchar, FAIL); H5T_CONV_su(SCHAR, UCHAR, @@ -3008,7 +3010,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uchar_schar, FAIL); H5T_CONV_us(UCHAR, SCHAR, @@ -3036,7 +3038,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_schar_short, FAIL); H5T_CONV_sS(SCHAR, SHORT, @@ -3064,7 +3066,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_schar_ushort, FAIL); H5T_CONV_sU(SCHAR, USHORT, @@ -3091,7 +3093,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uchar_short, FAIL); H5T_CONV_uS(UCHAR, SHORT, @@ -3120,7 +3122,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uchar_ushort, FAIL); H5T_CONV_uU(UCHAR, USHORT, @@ -3147,7 +3149,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_schar_int, FAIL); H5T_CONV_sS(SCHAR, INT, @@ -3174,7 +3176,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_schar_uint, FAIL); H5T_CONV_sU(SCHAR, UINT, @@ -3201,7 +3203,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uchar_int, FAIL); H5T_CONV_uS(UCHAR, INT, @@ -3229,7 +3231,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uchar_uint, FAIL); H5T_CONV_uU(UCHAR, UINT, @@ -3256,7 +3258,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_schar_long, FAIL); H5T_CONV_sS(SCHAR, LONG, @@ -3283,7 +3285,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_schar_ulong, FAIL); H5T_CONV_sU(SCHAR, ULONG, @@ -3310,7 +3312,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uchar_long, FAIL); H5T_CONV_uS(UCHAR, LONG, @@ -3338,7 +3340,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uchar_ulong, FAIL); H5T_CONV_uU(UCHAR, ULONG, @@ -3365,7 +3367,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_schar_llong, FAIL); H5T_CONV_sS(SCHAR, LLONG, @@ -3393,7 +3395,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_schar_ullong, FAIL); H5T_CONV_sU(SCHAR, ULLONG, @@ -3420,7 +3422,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uchar_llong, FAIL); H5T_CONV_uS(UCHAR, LLONG, @@ -3449,7 +3451,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uchar_ullong, FAIL); H5T_CONV_uU(UCHAR, ULLONG, @@ -3476,7 +3478,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_short_schar, FAIL); H5T_CONV_Ss(SHORT, SCHAR, @@ -3504,7 +3506,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_short_uchar, FAIL); H5T_CONV_Su(SHORT, UCHAR, @@ -3533,7 +3535,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ushort_schar, FAIL); H5T_CONV_Us(USHORT, SCHAR, @@ -3562,7 +3564,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ushort_uchar, FAIL); H5T_CONV_Uu(USHORT, UCHAR, @@ -3591,7 +3593,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_short_ushort, FAIL); H5T_CONV_su(SHORT, USHORT, @@ -3619,7 +3621,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ushort_short, FAIL); H5T_CONV_us(USHORT, SHORT, @@ -3647,7 +3649,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_short_int, FAIL); H5T_CONV_sS(SHORT, INT, @@ -3674,7 +3676,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_short_uint, FAIL); H5T_CONV_sU(SHORT, UINT, @@ -3701,7 +3703,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ushort_int, FAIL); H5T_CONV_uS(USHORT, INT, @@ -3729,7 +3731,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ushort_uint, FAIL); H5T_CONV_uU(USHORT, UINT, @@ -3756,7 +3758,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_short_long, FAIL); H5T_CONV_sS(SHORT, LONG, @@ -3783,7 +3785,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_short_ulong, FAIL); H5T_CONV_sU(SHORT, ULONG, @@ -3810,7 +3812,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ushort_long, FAIL); H5T_CONV_uS(USHORT, LONG, @@ -3839,7 +3841,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ushort_ulong, FAIL); H5T_CONV_uU(USHORT, ULONG, @@ -3866,7 +3868,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_short_llong, FAIL); H5T_CONV_sS(SHORT, LLONG, @@ -3894,7 +3896,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_short_ullong, FAIL); H5T_CONV_sU(SHORT, ULLONG, @@ -3922,7 +3924,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ushort_llong, FAIL); H5T_CONV_uS(USHORT, LLONG, @@ -3951,7 +3953,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ushort_ullong, FAIL); H5T_CONV_uU(USHORT, ULLONG, @@ -3978,7 +3980,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_int_schar, FAIL); H5T_CONV_Ss(INT, SCHAR, @@ -4006,7 +4008,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_int_uchar, FAIL); H5T_CONV_Su(INT, UCHAR, @@ -4034,7 +4036,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uint_schar, FAIL); H5T_CONV_Us(UINT, SCHAR, @@ -4062,7 +4064,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uint_uchar, FAIL); H5T_CONV_Uu(UINT, UCHAR, @@ -4090,7 +4092,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_int_short, FAIL); H5T_CONV_Ss(INT, SHORT, @@ -4118,7 +4120,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_int_ushort, FAIL); H5T_CONV_Su(INT, USHORT, @@ -4146,7 +4148,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uint_short, FAIL); H5T_CONV_Us(UINT, SHORT, @@ -4174,7 +4176,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uint_ushort, FAIL); H5T_CONV_Uu(UINT, USHORT, @@ -4202,7 +4204,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_int_uint, FAIL); H5T_CONV_su(INT, UINT, @@ -4229,7 +4231,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uint_int, FAIL); H5T_CONV_us(UINT, INT, @@ -4257,7 +4259,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_int_long, FAIL); H5T_CONV_sS(INT, LONG, @@ -4284,7 +4286,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_int_ulong, FAIL); H5T_CONV_sU(INT, LONG, @@ -4311,7 +4313,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uint_long, FAIL); H5T_CONV_uS(UINT, LONG, @@ -4339,7 +4341,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uint_ulong, FAIL); H5T_CONV_uU(UINT, ULONG, @@ -4366,7 +4368,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_int_llong, FAIL); H5T_CONV_sS(INT, LLONG, @@ -4393,7 +4395,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_int_ullong, FAIL); H5T_CONV_sU(INT, ULLONG, @@ -4420,7 +4422,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uint_llong, FAIL); H5T_CONV_uS(UINT, LLONG, @@ -4448,7 +4450,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_uint_ullong, FAIL); H5T_CONV_uU(UINT, ULLONG, @@ -4475,7 +4477,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_long_schar, FAIL); H5T_CONV_Ss(LONG, SCHAR, @@ -4503,7 +4505,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_long_uchar, FAIL); H5T_CONV_Su(LONG, UCHAR, @@ -4531,7 +4533,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ulong_schar, FAIL); H5T_CONV_Us(ULONG, SCHAR, @@ -4559,7 +4561,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ulong_uchar, FAIL); H5T_CONV_Uu(ULONG, UCHAR, @@ -4587,7 +4589,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_long_short, FAIL); H5T_CONV_Ss(LONG, SHORT, @@ -4615,7 +4617,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_long_ushort, FAIL); H5T_CONV_Su(LONG, USHORT, @@ -4643,7 +4645,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ulong_short, FAIL); H5T_CONV_Us(ULONG, SHORT, @@ -4672,7 +4674,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ulong_ushort, FAIL); H5T_CONV_Uu(ULONG, USHORT, @@ -4700,7 +4702,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_long_int, FAIL); H5T_CONV_Ss(LONG, INT, @@ -4728,7 +4730,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_long_uint, FAIL); H5T_CONV_Su(LONG, UINT, @@ -4756,7 +4758,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ulong_int, FAIL); H5T_CONV_Us(ULONG, INT, @@ -4784,7 +4786,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ulong_uint, FAIL); H5T_CONV_Uu(ULONG, UINT, @@ -4812,7 +4814,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_long_ulong, FAIL); H5T_CONV_su(LONG, ULONG, @@ -4839,7 +4841,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ulong_long, FAIL); H5T_CONV_us(ULONG, LONG, @@ -4867,7 +4869,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_long_llong, FAIL); H5T_CONV_sS(LONG, LLONG, @@ -4894,7 +4896,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_long_ullong, FAIL); H5T_CONV_sU(LONG, ULLONG, @@ -4921,7 +4923,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_long_llong, FAIL); H5T_CONV_uS(ULONG, LLONG, @@ -4950,7 +4952,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ulong_ullong, FAIL); H5T_CONV_uU(ULONG, ULLONG, @@ -4977,7 +4979,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_llong_schar, FAIL); H5T_CONV_Ss(LLONG, SCHAR, @@ -5005,7 +5007,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_llong_uchar, FAIL); H5T_CONV_Su(LLONG, UCHAR, @@ -5034,7 +5036,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ullong_schar, FAIL); H5T_CONV_Us(ULLONG, SCHAR, @@ -5062,7 +5064,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ullong_uchar, FAIL); H5T_CONV_Uu(ULLONG, UCHAR, @@ -5090,7 +5092,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_llong_short, FAIL); H5T_CONV_Ss(LLONG, SHORT, @@ -5119,7 +5121,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_llong_ushort, FAIL); H5T_CONV_Su(LLONG, USHORT, @@ -5148,7 +5150,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ullong_short, FAIL); H5T_CONV_Us(ULLONG, SHORT, @@ -5177,7 +5179,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ullong_ushort, FAIL); H5T_CONV_Uu(ULLONG, USHORT, @@ -5205,7 +5207,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_llong_int, FAIL); H5T_CONV_Ss(LLONG, INT, @@ -5233,7 +5235,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_llong_uint, FAIL); H5T_CONV_Su(LLONG, UINT, @@ -5261,7 +5263,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ullong_int, FAIL); H5T_CONV_Us(ULLONG, INT, @@ -5289,7 +5291,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ullong_uint, FAIL); H5T_CONV_Uu(ULLONG, UINT, @@ -5317,7 +5319,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_llong_long, FAIL); H5T_CONV_Ss(LLONG, LONG, @@ -5345,7 +5347,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_llong_ulong, FAIL); H5T_CONV_Su(LLONG, ULONG, @@ -5373,7 +5375,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, size_t stride, void *buf, void UNUSED *bkg) + size_t nelmts, size_t stride, void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ullong_long, FAIL); H5T_CONV_Us(ULLONG, LONG, @@ -5402,7 +5404,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ullong_ulong, FAIL); H5T_CONV_Uu(ULLONG, ULONG, @@ -5431,7 +5433,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_llong_ullong, FAIL); H5T_CONV_su(LLONG, ULLONG, @@ -5459,7 +5461,7 @@ 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, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { FUNC_ENTER(H5T_conv_ullong_llong, FAIL); H5T_CONV_us(ULLONG, LLONG, @@ -5491,7 +5493,7 @@ H5T_conv_ullong_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, herr_t H5T_conv_float_double (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { size_t elmtno; /*element number */ uint8_t *src, *s; /*source buffer */ @@ -5614,7 +5616,7 @@ H5T_conv_float_double (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, herr_t H5T_conv_double_float (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { size_t elmtno; /*element number */ uint8_t *src, *s; /*source buffer */ @@ -5743,7 +5745,7 @@ H5T_conv_double_float (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, herr_t H5T_conv_i32le_f64le (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, size_t stride, void *buf, - void UNUSED *bkg) + void UNUSED *bkg, hid_t UNUSED dset_xfer_plist) { uint8_t *s=NULL, *d=NULL; /*src and dst buf pointers */ uint8_t tmp[8]; /*temporary destination buffer */ diff --git a/src/H5Tpkg.h b/src/H5Tpkg.h index d4b477e..5941e0a 100644 --- a/src/H5Tpkg.h +++ b/src/H5Tpkg.h @@ -88,7 +88,7 @@ typedef struct H5T_enum_t { /* VL function pointers */ typedef hsize_t (*H5T_vlen_getlenfunc_t)(H5F_t *f, void *vl_addr); typedef herr_t (*H5T_vlen_readfunc_t)(H5F_t *f, void *vl_addr, void *buf, size_t len); -typedef herr_t (*H5T_vlen_allocfunc_t)(H5F_t *f, void *vl_addr, hsize_t seq_len, hsize_t base_size); +typedef herr_t (*H5T_vlen_allocfunc_t)(const H5F_xfer_t *xfer_parms, void *vl_addr, hsize_t seq_len, hsize_t base_size); typedef herr_t (*H5T_vlen_writefunc_t)(H5F_t *f, void *vl_addr, void *buf, size_t len); /* A VL datatype */ @@ -120,6 +120,7 @@ struct H5T_t { H5F_t *sh_file;/*file pointer if this is a shared type */ H5T_class_t type; /*which class of type is this? */ size_t size; /*total size of an instance of this type */ + hbool_t force_conv; /* Set if this type always needs to be converted and H5T_conv_noop cannot be called */ struct H5T_t *parent;/*parent type for derived data types */ union { H5T_atomic_t atomic; /*an atomic data type */ @@ -210,320 +211,320 @@ __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, size_t stride, void *buf, - void *bkg); + void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_order(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, size_t stride, void *_buf, - void *bkg); + void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, size_t stride, void *_buf, - void *bkg); + void *bkg, hid_t dset_xfer_plist); __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); + size_t stride, void *_buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, size_t stride, void *buf, - void *bkg); + void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, size_t stride, void *buf, - void *bkg); + void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t 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 *bkg); + void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t 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 *bkg); + void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_s_s(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, size_t stride, void *_buf, - void *bkg); + void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_b_b(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, size_t stride, void *_buf, - void *bkg); + void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_schar_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uchar_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_schar_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_schar_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uchar_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uchar_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_schar_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_schar_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uchar_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uchar_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_schar_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_schar_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uchar_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uchar_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_schar_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_schar_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uchar_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uchar_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_short_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_short_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ushort_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ushort_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_short_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ushort_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_short_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_short_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ushort_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ushort_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_short_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_short_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ushort_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ushort_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_short_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_short_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ushort_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ushort_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_int_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_int_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uint_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uint_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_int_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_int_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uint_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uint_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_int_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uint_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_int_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_int_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uint_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uint_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_int_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_int_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uint_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_uint_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_long_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_long_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ulong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ulong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_long_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_long_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ulong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ulong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_long_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_long_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ulong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ulong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_long_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ulong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_long_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_long_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ulong_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ulong_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_llong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_llong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ullong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ullong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_llong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_llong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ullong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ullong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_llong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_llong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ullong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ullong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_llong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_llong_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ullong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ullong_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_llong_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_ullong_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_float_double(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_double_float(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *buf, void *bkg); + size_t stride, void *buf, void *bkg, hid_t dset_xfer_plist); __DLL__ herr_t H5T_conv_i32le_f64le(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, - size_t stride, void *_buf, void *bkg); + size_t stride, void *_buf, void *bkg, hid_t dset_xfer_plist); /* Bit twiddling functions */ __DLL__ void H5T_bit_copy(uint8_t *dst, size_t dst_offset, const uint8_t *src, @@ -540,11 +541,11 @@ __DLL__ htri_t H5T_bit_inc(uint8_t *buf, size_t start, size_t size); /* VL functions */ __DLL__ hsize_t H5T_vlen_mem_getlen(H5F_t *f, void *vl_addr); __DLL__ herr_t H5T_vlen_mem_read(H5F_t *f, void *vl_addr, void *_buf, size_t len); -__DLL__ herr_t H5T_vlen_mem_alloc(H5F_t *f, void *vl_addr, hsize_t seq_len, hsize_t base_size); +__DLL__ herr_t H5T_vlen_mem_alloc(const H5F_xfer_t *xfer_parms, void *vl_addr, hsize_t seq_len, hsize_t base_size); __DLL__ herr_t H5T_vlen_mem_write(H5F_t *f, void *vl_addr, void *_buf, size_t len); __DLL__ hsize_t H5T_vlen_disk_getlen(H5F_t *f, void *vl_addr); __DLL__ herr_t H5T_vlen_disk_read(H5F_t *f, void *vl_addr, void *_buf, size_t len); -__DLL__ herr_t H5T_vlen_disk_alloc(H5F_t *f, void *vl_addr, hsize_t seq_len, hsize_t base_size); +__DLL__ herr_t H5T_vlen_disk_alloc(const H5F_xfer_t *xfer_parms, void *vl_addr, hsize_t seq_len, hsize_t base_size); __DLL__ herr_t H5T_vlen_disk_write(H5F_t *f, void *vl_addr, void *_buf, size_t len); /* Reference specific functions */ diff --git a/src/H5Tprivate.h b/src/H5Tprivate.h index 5d0fe43..7ce7f67 100644 --- a/src/H5Tprivate.h +++ b/src/H5Tprivate.h @@ -97,7 +97,8 @@ __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, size_t stride, void *buf, void *bkg); + size_t nelmts, size_t stride, void *buf, void *bkg, + hid_t dset_xfer_plist); __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); @@ -105,6 +106,7 @@ __DLL__ char *H5T_enum_nameof(H5T_t *dt, void *value, char *name/*out*/, size_t size); __DLL__ herr_t H5T_enum_valueof(H5T_t *dt, const char *name, void *value/*out*/); -__DLL__ herr_t H5T_vlen_set_loc(H5T_t *dt, H5F_t *f, H5T_vlen_type_t loc); +__DLL__ herr_t H5T_vlen_reclaim(void *elem, hid_t type_id, hsize_t UNUSED ndim, hssize_t UNUSED *point, void UNUSED *_op_data); +__DLL__ herr_t H5T_vlen_mark(H5T_t *dt, H5F_t *f, H5T_vlen_type_t loc); #endif diff --git a/src/H5Tpublic.h b/src/H5Tpublic.h index 22c9eb8..12dd593 100644 --- a/src/H5Tpublic.h +++ b/src/H5Tpublic.h @@ -159,7 +159,7 @@ 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, size_t stride, void *buf, - void *bkg); + void *bkg, hid_t dset_xfer_plist); /* * If an error occurs during a data type conversion then the function @@ -519,7 +519,7 @@ __DLL__ herr_t H5Tunregister(H5T_pers_t pers, const char *name, hid_t src_id, hid_t dst_id, H5T_conv_t func); __DLL__ H5T_conv_t H5Tfind(hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata); __DLL__ herr_t H5Tconvert(hid_t src_id, hid_t dst_id, size_t nelmts, - void *buf, void *background); + void *buf, void *background, hid_t plist_id); __DLL__ H5T_overflow_t H5Tget_overflow(void); __DLL__ herr_t H5Tset_overflow(H5T_overflow_t func); diff --git a/src/H5Tvlen.c b/src/H5Tvlen.c index 4530361..1a70aa8 100644 --- a/src/H5Tvlen.c +++ b/src/H5Tvlen.c @@ -21,6 +21,7 @@ static char RcsId[] = "@(#)$Revision$"; #include <H5private.h> /* Generic Functions */ #include <H5Eprivate.h> /* Errors */ #include <H5HGprivate.h> /* Global Heaps */ +#include <H5Iprivate.h> /* IDs */ #include <H5MMprivate.h> /* Memory Allocation */ #include <H5Tpkg.h> /* Datatypes */ @@ -30,6 +31,9 @@ static char RcsId[] = "@(#)$Revision$"; static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL +/* Local functions */ +static herr_t H5T_vlen_reclaim_recurse(void *elem, H5T_t *dt, H5MM_free_t free_func, void *free_info); + /*------------------------------------------------------------------------- * Function: H5T_vlen_set_loc @@ -45,7 +49,8 @@ static intn interface_initialize_g = 0; * *------------------------------------------------------------------------- */ -herr_t H5T_vlen_set_loc(H5T_t *dt, H5F_t *f, H5T_vlen_type_t loc) +static herr_t +H5T_vlen_set_loc(H5T_t *dt, H5F_t *f, H5T_vlen_type_t loc) { FUNC_ENTER (H5T_vlen_set_loc, FAIL); @@ -100,7 +105,7 @@ herr_t H5T_vlen_set_loc(H5T_t *dt, H5F_t *f, H5T_vlen_type_t loc) } /* end switch */ FUNC_LEAVE (SUCCEED); -} /* end H5T_vlen_disk_write() */ +} /* end H5T_vlen_set_loc() */ /*------------------------------------------------------------------------- @@ -177,7 +182,7 @@ herr_t H5T_vlen_mem_read(H5F_t UNUSED *f, void *vl_addr, void *buf, size_t len) * *------------------------------------------------------------------------- */ -herr_t H5T_vlen_mem_alloc(H5F_t UNUSED *f, void *vl_addr, hsize_t seq_len, hsize_t base_size) +herr_t H5T_vlen_mem_alloc(const H5F_xfer_t *xfer_parms, void *vl_addr, hsize_t seq_len, hsize_t base_size) { hvl_t *vl=(hvl_t *)vl_addr; /* Pointer to the user's hvl_t information */ @@ -186,8 +191,15 @@ herr_t H5T_vlen_mem_alloc(H5F_t UNUSED *f, void *vl_addr, hsize_t seq_len, hsize /* check parameters */ assert(vl); - if(NULL==(vl->p=H5MM_malloc(seq_len*base_size))) - HRETURN_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for VL data"); + /* Use the user's memory allocation routine is one is defined */ + if(xfer_parms->vlen_alloc!=NULL) { + if(NULL==(vl->p=(xfer_parms->vlen_alloc)(seq_len*base_size,xfer_parms->alloc_info))) + HRETURN_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for VL data"); + } /* end if */ + else { /* Default to system malloc */ + if(NULL==(vl->p=H5MM_malloc(seq_len*base_size))) + HRETURN_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for VL data"); + } /* end else */ vl->len=seq_len; FUNC_LEAVE (SUCCEED); @@ -312,7 +324,7 @@ herr_t H5T_vlen_disk_read(H5F_t *f, void *vl_addr, void *buf, size_t UNUSED len) * *------------------------------------------------------------------------- */ -herr_t H5T_vlen_disk_alloc(H5F_t UNUSED *f, void UNUSED *vl_addr, hsize_t UNUSED seq_len, hsize_t UNUSED base_size) +herr_t H5T_vlen_disk_alloc(const H5F_xfer_t UNUSED *f, void UNUSED *vl_addr, hsize_t UNUSED seq_len, hsize_t UNUSED base_size) { FUNC_ENTER (H5T_vlen_disk_alloc, FAIL); @@ -363,3 +375,211 @@ herr_t H5T_vlen_disk_write(H5F_t *f, void *vl_addr, void *buf, size_t len) FUNC_LEAVE (SUCCEED); } /* end H5T_vlen_disk_write() */ + +/*-------------------------------------------------------------------------- + NAME + H5T_vlen_reclaim_recurse + PURPOSE + Internal recursive routine to free VL datatypes + USAGE + herr_t H5T_vlen_reclaim(elem,dt) + void *elem; IN/OUT: Pointer to the dataset element + H5T_t *dt; IN: Datatype of dataset element + + RETURNS + SUCCEED/FAIL + DESCRIPTION + Frees any dynamic memory used by VL datatypes in the current dataset + element. Performs a recursive depth-first traversal of all compound + datatypes to free all VL datatype information allocated by any field. + GLOBAL VARIABLES + COMMENTS, BUGS, ASSUMPTIONS + EXAMPLES + REVISION LOG +--------------------------------------------------------------------------*/ +static herr_t +H5T_vlen_reclaim_recurse(void *elem, H5T_t *dt, H5MM_free_t free_func, void *free_info) +{ + intn i,j; /* local counting variable */ + herr_t ret_value = SUCCEED; + + FUNC_ENTER(H5T_vlen_reclaim_recurse, FAIL); + + assert(elem); + assert(dt); + + /* Check the datatype of this element */ + switch(dt->type) { + /* Check each field and recurse on VL and compound ones */ + case H5T_COMPOUND: + for (i=0; i<dt->u.compnd.nmembs; i++) { + /* Recurse if it's VL or compound */ + if(dt->u.compnd.memb[i].type->type==H5T_COMPOUND || dt->u.compnd.memb[i].type->type==H5T_VLEN) { + uintn nelem=1; /* Number of array elements in field */ + void *off; /* offset of field */ + + /* Compute the number of array elements in field */ + for(j=0; j<dt->u.compnd.memb[i].ndims; j++) + nelem *= dt->u.compnd.memb[i].dim[j]; + + /* Calculate the offset of each array element and recurse on it */ + while(nelem>0) { + off=((uint8_t *)elem)+dt->u.compnd.memb[i].offset+(nelem-1)*dt->u.compnd.memb[i].type->size; + if(H5T_vlen_reclaim_recurse(off,dt->u.compnd.memb[i].type,free_func,free_info)<0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTFREE, FAIL, "Unable to free compound field"); + nelem--; + } /* end while */ + } /* end if */ + } /* end for */ + break; + + /* Recurse on the VL information if it's VL or compound, then free VL sequence */ + case H5T_VLEN: + { + hvl_t *vl=(hvl_t *)elem; /* Temp. ptr to the vl info */ + + /* Recurse if it's VL or compound */ + if(dt->parent->type==H5T_COMPOUND || dt->parent->type==H5T_VLEN) { + void *off; /* offset of field */ + + /* Calculate the offset of each array element and recurse on it */ + while(vl->len>0) { + off=((uint8_t *)vl->p)+(vl->len-1)*dt->parent->size; + if(H5T_vlen_reclaim_recurse(off,dt->parent,free_func,free_info)<0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTFREE, FAIL, "Unable to free VL element"); + vl->len--; + } /* end while */ + } /* end if */ + + /* Free the VL sequence */ + if(free_func!=NULL) + (*free_func)(vl->p,free_info); + else + H5MM_xfree(vl->p); + } /* end case */ + break; + + default: + break; + } /* end switch */ + +done: + FUNC_LEAVE(ret_value); +} /* end H5T_vlen_reclaim_recurse() */ + + +/*-------------------------------------------------------------------------- + NAME + H5T_vlen_reclaim + PURPOSE + Default method to reclaim any VL data for a buffer element + USAGE + herr_t H5T_vlen_reclaim(elem,type_id,ndim,point,op_data) + void *elem; IN/OUT: Pointer to the dataset element + hid_t type_id; IN: Datatype of dataset element + hsize_t ndim; IN: Number of dimensions in dataspace + hssize_t *point; IN: Coordinate location of element in dataspace + void *op_data IN: Operator data + + RETURNS + SUCCEED/FAIL + DESCRIPTION + Frees any dynamic memory used by VL datatypes in the current dataset + element. Recursively descends compound datatypes to free all VL datatype + information allocated by any field. + GLOBAL VARIABLES + COMMENTS, BUGS, ASSUMPTIONS + EXAMPLES + REVISION LOG +--------------------------------------------------------------------------*/ +herr_t +H5T_vlen_reclaim(void *elem, hid_t type_id, hsize_t UNUSED ndim, hssize_t UNUSED *point, void *op_data) +{ + H5F_xfer_t *xfer_parms = (H5F_xfer_t *)op_data; /* Dataset transfer plist from iterator */ + H5T_t *dt = NULL; + herr_t ret_value = FAIL; + + FUNC_ENTER(H5T_vlen_reclaim, FAIL); + + assert(elem); + assert(H5I_DATATYPE == H5I_get_type(type_id)); + + /* Check args */ + if (H5I_DATATYPE!=H5I_get_type(type_id) || NULL==(dt=H5I_object(type_id))) + HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type"); + + /* Pull the free function and free info pointer out of the op_data and call the recurse datatype free function */ + ret_value=H5T_vlen_reclaim_recurse(elem,dt,xfer_parms->vlen_free,xfer_parms->free_info); + +#ifdef LATER +done: +#endif /* LATER */ + FUNC_LEAVE(ret_value); +} /* end H5T_vlen_reclaim() */ + + +/*-------------------------------------------------------------------------- + NAME + H5T_vlen_mark + PURPOSE + Recursively mark any VL datatypes as on disk/in memory + USAGE + herr_t H5T_vlen_mark(dt,f,loc) + H5T_t *dt; IN/OUT: Pointer to the datatype to mark + H5F_t *dt; IN: Pointer to the file the datatype is in + H5T_vlen_type_t loc IN: location of VL type + + RETURNS + SUCCEED/FAIL + DESCRIPTION + Recursively descends any VL or compound datatypes to mark all VL datatypes + as either on disk or in memory. + GLOBAL VARIABLES + COMMENTS, BUGS, ASSUMPTIONS + EXAMPLES + REVISION LOG +--------------------------------------------------------------------------*/ +herr_t +H5T_vlen_mark(H5T_t *dt, H5F_t *f, H5T_vlen_type_t loc) +{ + intn i; /* local counting variable */ + herr_t ret_value = SUCCEED; + + FUNC_ENTER(H5T_vlen_mark, FAIL); + + assert(dt); + assert(loc>H5T_VLEN_BADTYPE && loc<H5T_VLEN_MAXTYPE); + + /* Check the datatype of this element */ + switch(dt->type) { + /* Check each field and recurse on VL and compound ones */ + case H5T_COMPOUND: + for (i=0; i<dt->u.compnd.nmembs; i++) { + /* Recurse if it's VL or compound */ + if(dt->u.compnd.memb[i].type->type==H5T_COMPOUND || dt->u.compnd.memb[i].type->type==H5T_VLEN) { + if(H5T_vlen_mark(dt->u.compnd.memb[i].type,f,loc)<0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "Unable to set VL location"); + } /* end if */ + } /* end for */ + break; + + /* Recurse on the VL information if it's VL or compound, then free VL sequence */ + case H5T_VLEN: + /* Recurse if it's VL or compound */ + if(dt->parent->type==H5T_COMPOUND || dt->parent->type==H5T_VLEN) { + if(H5T_vlen_mark(dt->parent,f,loc)<0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "Unable to set VL location"); + } /* end if */ + + /* Mark this VL sequence */ + if(H5T_vlen_set_loc(dt,f,loc)<0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "Unable to set VL location"); + break; + + default: + break; + } /* end switch */ + +done: + FUNC_LEAVE(ret_value); +} /* end H5T_vlen_mark() */ |