From 358cac8ec8cd1989bf0b47d255751c6d4130c0fc Mon Sep 17 00:00:00 2001 From: Mohamad Chaarawi Date: Fri, 29 Jun 2012 12:28:10 -0500 Subject: [svn-r22502] implement named datatypes solution in object headers modify datatype open and get_binary callbacks to be disjoint --- src/H5I.c | 5 +++- src/H5O.c | 3 ++- src/H5Tcommit.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++----- src/H5Toh.c | 14 ---------- src/H5Tprivate.h | 3 +++ src/H5VLint.c | 29 ++++++++++----------- src/H5VLnative.c | 66 +++++++++------------------------------------- src/H5VLprivate.h | 5 ++-- src/H5VLpublic.h | 6 ++--- 9 files changed, 111 insertions(+), 98 deletions(-) diff --git a/src/H5I.c b/src/H5I.c index e8df636..a7ae3b4 100644 --- a/src/H5I.c +++ b/src/H5I.c @@ -2270,11 +2270,14 @@ H5I_get_file_id(hid_t obj_id, hbool_t app_ref) /* get the file object */ if(NULL == (obj = (void *)H5I_object(obj_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier") - /* get the plugin pointer */ if (NULL == (vol_plugin = (H5VL_t *)H5I_get_aux(obj_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "ID does not contain VOL information") + if (H5I_DATATYPE == type) { + if (NULL == (obj = H5T_get_named_type((H5T_t *)obj))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a named datatype") + } /* Get the file through the VOL */ if(H5VL_file_get(obj, vol_plugin, H5VL_OBJECT_GET_FILE, H5_REQUEST_NULL, type, app_ref, &file) < 0) diff --git a/src/H5O.c b/src/H5O.c index 8a20d21..3392d07 100644 --- a/src/H5O.c +++ b/src/H5O.c @@ -254,7 +254,8 @@ H5Oopen(hid_t loc_id, const char *name, hid_t lapl_id) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "ID does not contain VOL information") /* Open the object through the VOL */ - if(NULL == (opened_obj = H5VL_object_open(obj, loc_params, vol_plugin, &opened_type, H5_REQUEST_NULL))) + if(NULL == (opened_obj = H5VL_object_open(obj, loc_params, vol_plugin, &opened_type, + H5_REQUEST_NULL))) HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to open object") /* Get an atom for the object */ diff --git a/src/H5Tcommit.c b/src/H5Tcommit.c index d30cb15..ae3bc53 100644 --- a/src/H5Tcommit.c +++ b/src/H5Tcommit.c @@ -620,16 +620,24 @@ H5Topen2(hid_t loc_id, const char *name, hid_t tapl_id) if (NULL == (vol_plugin = (H5VL_t *)H5I_get_aux(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "ID does not contain VOL information") + /* Create the datatype through the VOL */ + if(NULL == (dt = H5VL_datatype_open(obj, loc_params, vol_plugin, name, tapl_id, H5_REQUEST_NULL))) + HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to open datatype") + + /* Get an atom for the datatype */ + if ((ret_value = H5VL_create_datatype(dt, vol_plugin, H5_REQUEST_NULL)) < 0) + HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize datatype handle") + +#if 0 /* get required buf size for encoding the datatype */ - if((nalloc = H5VL_datatype_get_size(obj, loc_params, vol_plugin, name, tapl_id, H5_REQUEST_NULL)) < 0) + if((nalloc = H5VL_datatype_get_binary(obj, loc_params, vol_plugin, name, tapl_id, + NULL, 0, H5_REQUEST_NULL)) < 0) HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to get datatype size") - buf = (unsigned char *) H5MM_malloc ((size_t)nalloc); + if (NULL == (buf = (unsigned char *) H5MM_malloc ((size_t)nalloc))) + HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate space for datatype") + - /* Create the datatype through the VOL */ - if(NULL == (dt = H5VL_datatype_open(obj, loc_params, vol_plugin, name, - buf, (size_t)nalloc, tapl_id,H5_REQUEST_NULL))) - HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to open datatype") if(NULL == (type = H5T_decode(buf))) HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't decode datatype") @@ -646,6 +654,7 @@ H5Topen2(hid_t loc_id, const char *name, hid_t tapl_id) HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "can't attach vol info to ID") vol_plugin->nrefs ++; +#endif done: if (ret_value < 0 && dt) @@ -954,6 +963,63 @@ H5T_get_named_type(H5T_t *dt) /*------------------------------------------------------------------------- + * Function: H5VL_create_datatype + * + * Purpose: Create a Library datatype with a plugin specific datatype object + * + * Return: Success: A datatype identifier + * + * Failure: FAIL + * + * Programmer: Mohamad Chaarawi + * June, 2012 + * + *------------------------------------------------------------------------- + */ +hid_t +H5VL_create_datatype(void *dt_obj, H5VL_t *vol_plugin, hid_t req) +{ + ssize_t nalloc; + unsigned char *buf = NULL; + H5T_t *dt = NULL; /* datatype token from VOL plugin */ + hid_t ret_value = FAIL; + + FUNC_ENTER_NOAPI(FAIL) + + /* get required buf size for encoding the datatype */ + if((nalloc = H5VL_datatype_get_binary(dt_obj, vol_plugin, NULL, 0, H5_REQUEST_NULL)) < 0) + HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to get datatype size") + + /* allocate buffer to store binary description of the datatype */ + if (NULL == (buf = (unsigned char *) H5MM_malloc ((size_t)nalloc))) + HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate space for datatype") + + /* get binary description of the datatype */ + if((nalloc = H5VL_datatype_get_binary(dt_obj, vol_plugin, buf, (size_t) nalloc, H5_REQUEST_NULL)) < 0) + HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to get datatype size") + + if(NULL == (dt = H5T_decode(buf))) + HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't decode datatype") + dt->vol_obj = dt_obj; + + H5MM_free(buf); + + /* Get an atom for the datatype */ + if((ret_value = H5I_register(H5I_DATATYPE, dt, TRUE)) < 0) + HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize datatype handle") + + /* attach VOL information to the ID */ + if (H5I_register_aux(ret_value, vol_plugin, (H5I_free2_t)H5T_close_datatype) < 0) + HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "can't attach vol info to ID") + + vol_plugin->nrefs ++; + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5VL_create_datatype() */ + + +/*------------------------------------------------------------------------- * Function: H5T_close_datatype * * Purpose: Called when the ref count reaches zero on the datatype_id diff --git a/src/H5Toh.c b/src/H5Toh.c index e76070f..7961706 100644 --- a/src/H5Toh.c +++ b/src/H5Toh.c @@ -27,7 +27,6 @@ #include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ #include "H5Iprivate.h" /* IDs */ -#include "H5MMprivate.h" /* Memory management */ #include "H5Opkg.h" /* Object headers */ #include "H5Tpkg.h" /* Datatypes */ @@ -133,9 +132,6 @@ done: static hid_t H5O_dtype_open(const H5G_loc_t *obj_loc, hid_t UNUSED lapl_id, hid_t dxpl_id, hbool_t app_ref) { - size_t nalloc; - unsigned char *buf = NULL; - void *dt = NULL; /* datatype token from VOL plugin */ H5T_t *type = NULL; /* Datatype opened */ hid_t ret_value; /* Return value */ @@ -147,16 +143,6 @@ H5O_dtype_open(const H5G_loc_t *obj_loc, hid_t UNUSED lapl_id, hid_t dxpl_id, hb if(NULL == (type = H5T_open(obj_loc, dxpl_id))) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTOPENOBJ, FAIL, "unable to open datatype") - if(H5T_encode(type, NULL, &nalloc) < 0) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't determine serialized length of datatype") - buf = (unsigned char *) H5MM_malloc (nalloc); - if(H5T_encode(type, buf, &nalloc) < 0) - HGOTO_ERROR(H5E_DATATYPE, H5E_BADTYPE, FAIL, "can't serialize datatype") - if(NULL == (dt = H5T_decode(buf))) - HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't decode datatype") - type->vol_obj = dt; - H5MM_free(buf); - /* Register an ID for the datatype */ if((ret_value = H5I_register(H5I_DATATYPE, type, app_ref)) < 0) HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register datatype") diff --git a/src/H5Tprivate.h b/src/H5Tprivate.h index 5902bca..5408b49 100644 --- a/src/H5Tprivate.h +++ b/src/H5Tprivate.h @@ -24,6 +24,7 @@ /* Other public headers needed by this file */ #include "H5MMpublic.h" /* Memory management */ +#include "H5VLpublic.h" /* VOL */ /* Private headers needed by this file */ #include "H5private.h" /* Generic Functions */ @@ -140,6 +141,8 @@ H5_DLL htri_t H5T_is_variable_str(const H5T_t *dt); H5_DLL herr_t H5T_encode(H5T_t *obj, unsigned char *buf, size_t *nalloc); H5_DLL H5T_t *H5T_decode(const unsigned char *buf); H5_DLL void * H5T_get_named_type(H5T_t *dt); +H5_DLL hid_t H5VL_create_datatype(void *dt_obj, H5VL_t *vol_plugin, hid_t req); + /* Reference specific functions */ H5_DLL H5R_type_t H5T_get_ref_type(const H5T_t *dt); diff --git a/src/H5VLint.c b/src/H5VLint.c index 9f5fd91..14f7d98 100644 --- a/src/H5VLint.c +++ b/src/H5VLint.c @@ -315,25 +315,25 @@ H5VL_object_register(void *obj, H5I_type_t obj_type, H5VL_t *vol_plugin) FUNC_ENTER_NOAPI(FAIL) - /* Get an atom for the object */ - if((ret_value = H5I_register(obj_type, obj, TRUE)) < 0) - HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize object") - - /* attach VOL information and free function to the ID */ + /* Get an atom for the object and attach VOL information and free function to the ID */ switch(obj_type) { case H5I_GROUP: + if((ret_value = H5I_register(obj_type, obj, TRUE)) < 0) + HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize object") if (H5I_register_aux(ret_value, vol_plugin, (H5I_free2_t)H5G_close_group) < 0) HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "can't attach vol info to ID") break; case H5I_DATASET: + if((ret_value = H5I_register(obj_type, obj, TRUE)) < 0) + HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize object") if (H5I_register_aux(ret_value, vol_plugin, (H5I_free2_t)H5D_close_dataset) < 0) HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "can't attach vol info to ID") break; case H5I_DATATYPE: - if (H5I_register_aux(ret_value, vol_plugin, (H5I_free2_t)H5T_close_datatype) < 0) - HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "can't attach vol info to ID") + if ((ret_value = H5VL_create_datatype(obj, vol_plugin, H5_REQUEST_NULL)) < 0) + HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize datatype handle") break; case H5I_FILE_PRIVATE: @@ -658,7 +658,7 @@ done: */ void * H5VL_datatype_open(void *obj, H5VL_loc_params_t loc_params, H5VL_t *vol_plugin, const char *name, - unsigned char *buf, size_t nalloc, hid_t tapl_id, hid_t req) + hid_t tapl_id, hid_t req) { void *ret_value = NULL; /* Return value */ @@ -679,7 +679,7 @@ H5VL_datatype_open(void *obj, H5VL_loc_params_t loc_params, H5VL_t *vol_plugin, HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, NULL, "unable to open object") #endif /* call the corresponding VOL open callback */ - if(NULL == (ret_value = (vol_plugin->cls->datatype_cls.open)(obj, loc_params, name, buf, nalloc, tapl_id, req))) + if(NULL == (ret_value = (vol_plugin->cls->datatype_cls.open)(obj, loc_params, name, tapl_id, req))) HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, NULL, "open failed") done: FUNC_LEAVE_NOAPI(ret_value) @@ -687,7 +687,7 @@ done: /*------------------------------------------------------------------------- - * Function: H5VL_datatype_get_size + * Function: H5VL_datatype_get_binary * * Purpose: gets required size to serialize datatype description * @@ -701,22 +701,21 @@ done: *------------------------------------------------------------------------- */ ssize_t -H5VL_datatype_get_size(void *obj, H5VL_loc_params_t loc_params, H5VL_t *vol_plugin, - const char *name, hid_t tapl_id, hid_t req) +H5VL_datatype_get_binary(void *obj, H5VL_t *vol_plugin, unsigned char *buf, size_t size, hid_t req) { ssize_t ret_value = FAIL; FUNC_ENTER_NOAPI(FAIL) /* check if the type specific corresponding VOL open callback exists */ - if(NULL == vol_plugin->cls->datatype_cls.get_size) + if(NULL == vol_plugin->cls->datatype_cls.get_binary) HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "no datatype open callback"); /* call the corresponding VOL open callback */ - if((ret_value = (vol_plugin->cls->datatype_cls.get_size)(obj, loc_params, name, tapl_id, req)) < 0) + if((ret_value = (vol_plugin->cls->datatype_cls.get_binary)(obj, buf, size, req)) < 0) HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "open failed") done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5VL_datatype_get_size() */ +} /* end H5VL_datatype_get_binary() */ /*------------------------------------------------------------------------- diff --git a/src/H5VLnative.c b/src/H5VLnative.c index f56809f..b8f5550 100644 --- a/src/H5VLnative.c +++ b/src/H5VLnative.c @@ -76,12 +76,9 @@ static herr_t H5VL_native_attr_remove(void *obj, H5VL_loc_params_t loc_params, c static herr_t H5VL_native_attr_close(void *attr, hid_t req); /* Datatype callbacks */ -static void *H5VL_native_datatype_commit(void *obj, H5VL_loc_params_t loc_params, const char *name, - hid_t type_id, hid_t lcpl_id, hid_t tcpl_id, hid_t tapl_id, hid_t req); -static void *H5VL_native_datatype_open(void *obj, H5VL_loc_params_t loc_params, const char *name, - unsigned char *buf, size_t nalloc, hid_t tapl_id, hid_t req); -static ssize_t H5VL_native_datatype_get_size(void *obj, H5VL_loc_params_t loc_params, const char *name, - hid_t tapl_id, hid_t req); +static void *H5VL_native_datatype_commit(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t type_id, hid_t lcpl_id, hid_t tcpl_id, hid_t tapl_id, hid_t req); +static void *H5VL_native_datatype_open(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t tapl_id, hid_t req); +static ssize_t H5VL_native_datatype_get_binary(void *obj, unsigned char *buf, size_t size, hid_t req); static herr_t H5VL_native_datatype_close(void *dt, hid_t req); /* Dataset callbacks */ @@ -152,7 +149,7 @@ static H5VL_class_t H5VL_native_g = { { /* datatype_cls */ H5VL_native_datatype_commit, /* commit */ H5VL_native_datatype_open, /* open */ - H5VL_native_datatype_get_size, /* get_size */ + H5VL_native_datatype_get_binary, /* get_size */ H5VL_native_datatype_close /* close */ }, { /* dataset_cls */ @@ -1153,7 +1150,7 @@ done: */ static void * H5VL_native_datatype_open(void *obj, H5VL_loc_params_t loc_params, const char *name, - unsigned char *buf, size_t nalloc, hid_t tapl_id, hid_t UNUSED req) + hid_t tapl_id, hid_t UNUSED req) { H5T_t *type = NULL; /* Datatype opened in file */ H5G_loc_t loc; /* Group location of object to open */ @@ -1193,9 +1190,6 @@ H5VL_native_datatype_open(void *obj, H5VL_loc_params_t loc_params, const char *n if(NULL == (type = H5T_open(&type_loc, dxpl_id))) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTOPENOBJ, NULL, "unable to open named datatype") - if(H5T_encode(type, buf, &nalloc) < 0) - HGOTO_ERROR(H5E_DATATYPE, H5E_BADTYPE, NULL, "can't serialize datatype") - ret_value = (void *)type; done: if(NULL == type) @@ -1206,7 +1200,7 @@ done: /*------------------------------------------------------------------------- - * Function: H5VL_native_datatype_get_size + * Function: H5VL_native_datatype_get_binary * * Purpose: gets size required to encode the datatype * @@ -1219,58 +1213,22 @@ done: *------------------------------------------------------------------------- */ static ssize_t -H5VL_native_datatype_get_size(void *obj, H5VL_loc_params_t loc_params, const char *name, - hid_t tapl_id, hid_t UNUSED req) +H5VL_native_datatype_get_binary(void *obj, unsigned char *buf, size_t size, hid_t UNUSED req) { - H5T_t *type = NULL; /* Datatype opened in file */ - H5G_loc_t loc; /* Group location of object to open */ - H5G_name_t path; /* Datatype group hier. path */ - H5O_loc_t oloc; /* Datatype object location */ - H5O_type_t obj_type; /* Type of object at location */ - H5G_loc_t type_loc; /* Group object for datatype */ - hbool_t obj_found = FALSE; /* Object at 'name' found */ - hid_t dxpl_id = H5AC_dxpl_id; /* dxpl to use to open datatype */ - size_t nalloc; + H5T_t *type = (H5T_t *)obj; + size_t nalloc = size; ssize_t ret_value = FAIL; FUNC_ENTER_NOAPI_NOINIT - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") - - /* Set up datatype location to fill in */ - type_loc.oloc = &oloc; - type_loc.path = &path; - H5G_loc_reset(&type_loc); - - /* - * Find the named datatype object header and read the datatype message - * from it. - */ - if(H5G_loc_find(&loc, name, &type_loc/*out*/, tapl_id, dxpl_id) < 0) - HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, FAIL, "not found") - obj_found = TRUE; - - /* Check that the object found is the correct type */ - if(H5O_obj_type(&oloc, &obj_type, dxpl_id) < 0) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTGET, FAIL, "can't get object type") - if(obj_type != H5O_TYPE_NAMED_DATATYPE) - HGOTO_ERROR(H5E_DATATYPE, H5E_BADTYPE, FAIL, "not a named datatype") - - /* Open it */ - if(NULL == (type = H5T_open(&type_loc, dxpl_id))) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTOPENOBJ, FAIL, "unable to open named datatype") - - if(H5T_encode(type, NULL, &nalloc) < 0) + if(H5T_encode(type, buf, &nalloc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't determine serialized length of datatype") ret_value = (ssize_t) nalloc; + done: - /* Close the datatype */ - if(NULL != type && H5T_close(type) < 0) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTOPENOBJ, FAIL, "unable to close Datatype") FUNC_LEAVE_NOAPI(ret_value) -} /* end H5VL_native_datatype_get_size() */ +} /* end H5VL_native_datatype_get_binary() */ /*------------------------------------------------------------------------- diff --git a/src/H5VLprivate.h b/src/H5VLprivate.h index fc9193e..746c332 100644 --- a/src/H5VLprivate.h +++ b/src/H5VLprivate.h @@ -67,9 +67,8 @@ H5_DLL herr_t H5VL_dataset_get(void *dset, H5VL_t *vol_plugin, H5VL_dataset_get_ H5_DLL herr_t H5VL_dataset_close(void *dset, H5VL_t *vol_plugin, hid_t req); H5_DLL void *H5VL_datatype_commit(void *obj, H5VL_loc_params_t loc_params, H5VL_t *vol_plugin, const char *name, hid_t type_id, hid_t lcpl_id, hid_t tcpl_id, hid_t tapl_id, hid_t req); -H5_DLL void *H5VL_datatype_open(void *obj, H5VL_loc_params_t loc_params, H5VL_t *vol_plugin, const char *name, unsigned char *buf, size_t nalloc, hid_t tapl_id, hid_t req); -H5_DLL ssize_t H5VL_datatype_get_size(void *obj, H5VL_loc_params_t loc_params, H5VL_t *vol_plugin, - const char *name, hid_t tapl_id, hid_t req); +H5_DLL void *H5VL_datatype_open(void *obj, H5VL_loc_params_t loc_params, H5VL_t *vol_plugin, const char *name, hid_t tapl_id, hid_t req); +H5_DLL ssize_t H5VL_datatype_get_binary(void *obj, H5VL_t *vol_plugin, unsigned char *buf, size_t size, hid_t req); H5_DLL herr_t H5VL_datatype_close(void *dt, H5VL_t *vol_plugin, hid_t req); H5_DLL void *H5VL_file_create(H5VL_t *vol_plugin, const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id, hid_t req); diff --git a/src/H5VLpublic.h b/src/H5VLpublic.h index cb9ceac..423eee3 100644 --- a/src/H5VLpublic.h +++ b/src/H5VLpublic.h @@ -215,10 +215,8 @@ typedef struct H5VL_attr_class_t { typedef struct H5VL_datatype_class_t { void *(*commit)(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t type_id, hid_t lcpl_id, hid_t tcpl_id, hid_t tapl_id, hid_t req); - void *(*open) (void *obj, H5VL_loc_params_t loc_params, const char * name, - unsigned char *buf, size_t nalloc, hid_t tapl_id, hid_t req); - ssize_t (*get_size) (void *obj, H5VL_loc_params_t loc_params, const char *name, - hid_t tapl_id, hid_t req); + void *(*open) (void *obj, H5VL_loc_params_t loc_params, const char * name, hid_t tapl_id, hid_t req); + ssize_t (*get_binary) (void *obj, unsigned char *buf, size_t size, hid_t req); herr_t (*close) (void *dt, hid_t req); }H5VL_datatype_class_t; -- cgit v0.12