From cd11fcb14c7174e16dec8f39a566b5d47b9a877a Mon Sep 17 00:00:00 2001 From: Mohamad Chaarawi Date: Fri, 22 Aug 2014 11:59:56 -0500 Subject: [svn-r25544] - add a new version of H5Lis_registered. - rename external log plugin test in examples. --- examples/Makefile.am | 6 +- examples/Makefile.in | 6 +- examples/h5_external_log_native_vol.c | 506 --------------------------------- examples/h5_vol_external_log_native.c | 508 ++++++++++++++++++++++++++++++++++ src/H5I.c | 2 +- src/H5Iprivate.h | 2 +- src/H5VL.c | 50 +++- src/H5VLpublic.h | 10 +- 8 files changed, 572 insertions(+), 518 deletions(-) delete mode 100644 examples/h5_external_log_native_vol.c create mode 100644 examples/h5_vol_external_log_native.c diff --git a/examples/Makefile.am b/examples/Makefile.am index 85668e9..55b6b09 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -38,7 +38,7 @@ EXAMPLE_PROG = h5_write h5_read h5_extend_write h5_chunk_read h5_compound \ h5_crtatt h5_crtgrp h5_crtdat \ h5_group h5_select h5_attribute h5_mount h5_reference h5_drivers \ h5_ref2reg h5_extlink h5_elink_unix2win h5_shared_mesg \ - h5_external_log_native_vol + h5_vol_external_log_native TEST_SCRIPT=testh5cc.sh TEST_EXAMPLES_SCRIPT=$(INSTALL_SCRIPT_FILES) @@ -50,7 +50,7 @@ INSTALL_FILES = h5_write.c h5_read.c h5_extend_write.c h5_chunk_read.c \ h5_compound.c h5_group.c h5_select.c h5_attribute.c h5_mount.c \ h5_reference.c h5_drivers.c h5_extlink.c h5_elink_unix2win.c \ h5_ref2reg.c h5_shared_mesg.c ph5example.c \ - h5_external_log_native_vol.c + h5_vol_external_log_native.c @@ -119,7 +119,7 @@ h5_dtransform: $(srcdir)/h5_dtransform.c h5_extlink: $(srcdir)/h5_extlink.c $(EXTLINK_DIRS) h5_elink_unix2win: $(srcdir)/h5_elink_unix2win.c $(EXTLINK_DIRS) h5_shared_mesg: $(srcdir)/h5_shared_mesg.c -h5_external_log_native_vol: $(srcdir)/h5_external_log_native_vol.c +h5_vol_external_log_native: $(srcdir)/h5_vol_external_log_native.c if BUILD_SHARED_SZIP_CONDITIONAL LD_LIBRARY_PATH=$(LL_PATH) diff --git a/examples/Makefile.in b/examples/Makefile.in index 48b3221..aaa595d 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -625,7 +625,7 @@ EXAMPLE_PROG = h5_write h5_read h5_extend_write h5_chunk_read h5_compound \ h5_crtatt h5_crtgrp h5_crtdat \ h5_group h5_select h5_attribute h5_mount h5_reference h5_drivers \ h5_ref2reg h5_extlink h5_elink_unix2win h5_shared_mesg \ - h5_external_log_native_vol + h5_vol_external_log_native TEST_SCRIPT = testh5cc.sh TEST_EXAMPLES_SCRIPT = $(INSTALL_SCRIPT_FILES) @@ -638,7 +638,7 @@ INSTALL_FILES = h5_write.c h5_read.c h5_extend_write.c h5_chunk_read.c \ h5_compound.c h5_group.c h5_select.c h5_attribute.c h5_mount.c \ h5_reference.c h5_drivers.c h5_extlink.c h5_elink_unix2win.c \ h5_ref2reg.c h5_shared_mesg.c ph5example.c \ - h5_external_log_native_vol.c + h5_vol_external_log_native.c # The external link examples demonstrate how to use paths; they need @@ -1091,7 +1091,7 @@ h5_dtransform: $(srcdir)/h5_dtransform.c h5_extlink: $(srcdir)/h5_extlink.c $(EXTLINK_DIRS) h5_elink_unix2win: $(srcdir)/h5_elink_unix2win.c $(EXTLINK_DIRS) h5_shared_mesg: $(srcdir)/h5_shared_mesg.c -h5_external_log_native_vol: $(srcdir)/h5_external_log_native_vol.c +h5_vol_external_log_native: $(srcdir)/h5_vol_external_log_native.c # How to create EXAMPLEDIR if it doesn't already exist $(EXAMPLEDIR): diff --git a/examples/h5_external_log_native_vol.c b/examples/h5_external_log_native_vol.c deleted file mode 100644 index 658c73a..0000000 --- a/examples/h5_external_log_native_vol.c +++ /dev/null @@ -1,506 +0,0 @@ - -#include -#include -#include -#include "hdf5.h" - -#define LOG 502 - -/* Datatype callbacks */ -static void *H5VL_log_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 dxpl_id, void **req); -static void *H5VL_log_datatype_open(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t tapl_id, hid_t dxpl_id, void **req); -static herr_t H5VL_log_datatype_get(void *dt, H5VL_datatype_get_t get_type, hid_t dxpl_id, void **req, va_list arguments); -static herr_t H5VL_log_datatype_close(void *dt, hid_t dxpl_id, void **req); - -/* Dataset callbacks */ -static void *H5VL_log_dataset_create(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t dcpl_id, hid_t dapl_id, hid_t dxpl_id, void **req); -static void *H5VL_log_dataset_open(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t dapl_id, hid_t dxpl_id, void **req); -static herr_t H5VL_log_dataset_read(void *dset, hid_t mem_type_id, hid_t mem_space_id, - hid_t file_space_id, hid_t plist_id, void *buf, void **req); -static herr_t H5VL_log_dataset_write(void *dset, hid_t mem_type_id, hid_t mem_space_id, - hid_t file_space_id, hid_t plist_id, const void *buf, void **req); -static herr_t H5VL_log_dataset_close(void *dset, hid_t dxpl_id, void **req); - -/* File callbacks */ -static void *H5VL_log_file_create(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id, hid_t dxpl_id, void **req); -static void *H5VL_log_file_open(const char *name, unsigned flags, hid_t fapl_id, hid_t dxpl_id, void **req); -static herr_t H5VL_log_file_get(void *file, H5VL_file_get_t get_type, hid_t dxpl_id, void **req, va_list arguments); -static herr_t H5VL_log_file_close(void *file, hid_t dxpl_id, void **req); - -/* Group callbacks */ -static void *H5VL_log_group_create(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t gcpl_id, hid_t gapl_id, hid_t dxpl_id, void **req); -static herr_t H5VL_log_group_close(void *grp, hid_t dxpl_id, void **req); - -/* Link callbacks */ - -/* Object callbacks */ -static void *H5VL_log_object_open(void *obj, H5VL_loc_params_t loc_params, H5I_type_t *opened_type, hid_t dxpl_id, void **req); -static herr_t H5VL_log_object_specific(void *obj, H5VL_loc_params_t loc_params, H5VL_object_specific_t specific_type, hid_t dxpl_id, void **req, va_list arguments); - -static const H5VL_class_t H5VL_log_g = { - LOG, - "log", /* name */ - NULL, /* initialize */ - NULL, /* terminate */ - sizeof(hid_t), - NULL, - NULL, - { /* attribute_cls */ - NULL, //H5VL_log_attr_create, /* create */ - NULL, //H5VL_log_attr_open, /* open */ - NULL, //H5VL_log_attr_read, /* read */ - NULL, //H5VL_log_attr_write, /* write */ - NULL, //H5VL_log_attr_get, /* get */ - NULL, //H5VL_log_attr_specific, /* specific */ - NULL, //H5VL_log_attr_optional, /* optional */ - NULL //H5VL_log_attr_close /* close */ - }, - { /* dataset_cls */ - H5VL_log_dataset_create, /* create */ - H5VL_log_dataset_open, /* open */ - H5VL_log_dataset_read, /* read */ - H5VL_log_dataset_write, /* write */ - NULL, //H5VL_log_dataset_get, /* get */ - NULL, //H5VL_log_dataset_specific, /* specific */ - NULL, //H5VL_log_dataset_optional, /* optional */ - H5VL_log_dataset_close /* close */ - }, - { /* datatype_cls */ - H5VL_log_datatype_commit, /* commit */ - H5VL_log_datatype_open, /* open */ - H5VL_log_datatype_get, /* get_size */ - NULL, //H5VL_log_datatype_specific, /* specific */ - NULL, //H5VL_log_datatype_optional, /* optional */ - H5VL_log_datatype_close /* close */ - }, - { /* file_cls */ - H5VL_log_file_create, /* create */ - H5VL_log_file_open, /* open */ - H5VL_log_file_get, /* get */ - NULL, //H5VL_log_file_specific, /* specific */ - NULL, //H5VL_log_file_optional, /* optional */ - H5VL_log_file_close /* close */ - }, - { /* group_cls */ - H5VL_log_group_create, /* create */ - NULL, //H5VL_log_group_open, /* open */ - NULL, //H5VL_log_group_get, /* get */ - NULL, //H5VL_log_group_specific, /* specific */ - NULL, //H5VL_log_group_optional, /* optional */ - H5VL_log_group_close /* close */ - }, - { /* link_cls */ - NULL, //H5VL_log_link_create, /* create */ - NULL, //H5VL_log_link_copy, /* copy */ - NULL, //H5VL_log_link_move, /* move */ - NULL, //H5VL_log_link_get, /* get */ - NULL, //H5VL_log_link_specific, /* specific */ - NULL, //H5VL_log_link_optional, /* optional */ - }, - { /* object_cls */ - H5VL_log_object_open, /* open */ - NULL, //H5VL_log_object_copy, /* copy */ - NULL, //H5VL_log_object_get, /* get */ - H5VL_log_object_specific, /* specific */ - NULL, //H5VL_log_object_optional, /* optional */ - }, - { - NULL, - NULL, - NULL - }, - NULL -}; - -typedef struct H5VL_log_t { - void *under_object; - H5VL_t *under_plugin; -} H5VL_log_t; - -static herr_t -visit_cb(hid_t oid, const char *name, - const H5O_info_t *oinfo, void *udata) -{ - ssize_t len; - char n[25]; - - if(H5Iget_type(oid) == H5I_GROUP) { - len = H5VLget_plugin_name(oid, n, 50); - printf ("Visiting GROUP VOL name = %s %d\n", n, len); - } - if(H5Iget_type(oid) == H5I_DATASET) - printf("visiting dataset\n"); - if(H5Iget_type(oid) == H5I_DATATYPE) - printf("visiting datatype\n"); - - return 1; -} /* end h5_verify_cached_stabs_cb() */ - -int main(int argc, char **argv) { - const char file_name[]="large_dataset.h5"; - const char group_name[]="/Group"; - const char dataset_name[]="Data"; - char fullpath[500]; - hid_t file_id; - hid_t group_id; - hid_t dataspaceId; - hid_t datasetId; - hid_t acc_tpl; - hid_t under_fapl; - hid_t vol_id; - hid_t int_id; - hid_t attr; - hid_t space; - const unsigned int nelem=60; - int *data; - unsigned int i; - hsize_t dims[1]; - ssize_t len; - char name[25]; - static hsize_t ds_size[2] = {10, 20}; - - under_fapl = H5Pcreate (H5P_FILE_ACCESS); - H5Pset_fapl_native(under_fapl); - vol_id = H5VLregister (&H5VL_log_g); - acc_tpl = H5Pcreate (H5P_FILE_ACCESS); - H5Pset_vol(acc_tpl, vol_id, &under_fapl); - - file_id = H5Fcreate(file_name, H5F_ACC_TRUNC, H5P_DEFAULT, acc_tpl); - len = H5VLget_plugin_name(file_id, name, 25); - printf ("FILE VOL name = %s %d\n", name, len); - - group_id = H5Gcreate2(file_id, group_name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); - len = H5VLget_plugin_name(group_id, name, 50); - printf ("GROUP VOL name = %s %d\n", name, len); - - int_id = H5Tcopy(H5T_NATIVE_INT); - H5Tcommit2(file_id, "int", int_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); - len = H5VLget_plugin_name(int_id, name, 50); - printf ("DT COMMIT name = %s %d\n", name, len); - H5Tclose(int_id); - - int_id = H5Topen2(file_id, "int", H5P_DEFAULT); - len = H5VLget_plugin_name(int_id, name, 50); - printf ("DT OPEN name = %s %d\n", name, len); - H5Tclose(int_id); - - int_id = H5Oopen(file_id,"int",H5P_DEFAULT); - len = H5VLget_plugin_name(int_id, name, 50); - printf ("DT OOPEN name = %s %d\n", name, len); - - len = H5Fget_name(file_id, name, 50); - printf("name = %d %s\n", len, name); - - data = malloc (sizeof(int)*nelem); - for(i=0;iunder_object = H5VLfile_create(&(file->under_plugin), name, flags, fcpl_id, under_fapl, dxpl_id, req); - - printf("------- LOG H5Fcreate\n"); - return (void *)file; -} - -static void * -H5VL_log_file_open(const char *name, unsigned flags, hid_t fapl_id, hid_t dxpl_id, void **req) -{ - hid_t under_fapl; - H5VL_log_t *file; - - file = (H5VL_log_t *)calloc(1, sizeof(H5VL_log_t)); - - under_fapl = *((hid_t *)H5Pget_vol_info(fapl_id)); - file->under_object = H5VLfile_open(&(file->under_plugin), name, flags, under_fapl, dxpl_id, req); - - printf("------- LOG H5Fopen\n"); - return (void *)file; -} - -static herr_t -H5VL_log_file_get(void *file, H5VL_file_get_t get_type, hid_t dxpl_id, void **req, va_list arguments) -{ - H5VL_log_t *f = (H5VL_log_t *)file; - - H5VLfile_get(f->under_object, f->under_plugin, get_type, dxpl_id, req, arguments); - - printf("------- LOG H5Fget %d\n", get_type); - return 1; -} -static herr_t -H5VL_log_file_close(void *file, hid_t dxpl_id, void **req) -{ - H5VL_log_t *f = (H5VL_log_t *)file; - - H5VLfile_close(f->under_object, f->under_plugin, dxpl_id, req); - free(f); - - printf("------- LOG H5Fclose\n"); - return 1; -} - -static void * -H5VL_log_group_create(void *obj, H5VL_loc_params_t loc_params, const char *name, - hid_t gcpl_id, hid_t gapl_id, hid_t dxpl_id, void **req) -{ - H5VL_log_t *group; - H5VL_log_t *o = (H5VL_log_t *)obj; - - group = (H5VL_log_t *)calloc(1, sizeof(H5VL_log_t)); - - group->under_object = H5VLgroup_create(o->under_object, loc_params, o->under_plugin, name, gcpl_id, gapl_id, dxpl_id, req); - group->under_plugin = o->under_plugin; - - printf("------- LOG H5Gcreate\n"); - return (void *)group; -} - -static herr_t -H5VL_log_group_close(void *grp, hid_t dxpl_id, void **req) -{ - H5VL_log_t *g = (H5VL_log_t *)grp; - - H5VLgroup_close(g->under_object, g->under_plugin, dxpl_id, req); - free(g); - - printf("------- LOG H5Gclose\n"); - return 1; -} - -static void * -H5VL_log_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 dxpl_id, void **req) -{ - H5VL_log_t *dt; - H5VL_log_t *o = (H5VL_log_t *)obj; - - dt = (H5VL_log_t *)calloc(1, sizeof(H5VL_log_t)); - - dt->under_object = H5VLdatatype_commit(o->under_object, loc_params, o->under_plugin, name, - type_id, lcpl_id, tcpl_id, tapl_id, dxpl_id, req); - dt->under_plugin = o->under_plugin; - - printf("------- LOG H5Tcommit\n"); - return dt; -} -static void * -H5VL_log_datatype_open(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t tapl_id, hid_t dxpl_id, void **req) -{ - H5VL_log_t *dt; - H5VL_log_t *o = (H5VL_log_t *)obj; - - dt = (H5VL_log_t *)calloc(1, sizeof(H5VL_log_t)); - - dt->under_object = H5VLdatatype_open(o->under_object, loc_params, o->under_plugin, name, tapl_id, dxpl_id, req); - dt->under_plugin = o->under_plugin; - - printf("------- LOG H5Topen\n"); - return (void *)dt; -} - -static herr_t -H5VL_log_datatype_get(void *dt, H5VL_datatype_get_t get_type, hid_t dxpl_id, void **req, va_list arguments) -{ - H5VL_log_t *o = (H5VL_log_t *)dt; - herr_t ret_value; - - ret_value = H5VLdatatype_get(o->under_object, o->under_plugin, get_type, dxpl_id, req, arguments); - - printf("------- LOG datatype get\n"); - return ret_value; -} - -static herr_t -H5VL_log_datatype_close(void *dt, hid_t dxpl_id, void **req) -{ - H5VL_log_t *type = (H5VL_log_t *)dt; - - assert(type->under_object); - assert(type->under_plugin); - - H5VLdatatype_close(type->under_object, type->under_plugin, dxpl_id, req); - free(type); - - printf("------- LOG H5Tclose\n"); - return 1; -} - -static void * -H5VL_log_object_open(void *obj, H5VL_loc_params_t loc_params, H5I_type_t *opened_type, hid_t dxpl_id, void **req) -{ - H5VL_log_t *new_obj; - H5VL_log_t *o = (H5VL_log_t *)obj; - - new_obj = (H5VL_log_t *)calloc(1, sizeof(H5VL_log_t)); - - new_obj->under_object = H5VLobject_open(o->under_object, loc_params, o->under_plugin, opened_type, dxpl_id, req); - new_obj->under_plugin = o->under_plugin; - - printf("------- LOG H5Oopen\n"); - return (void *)new_obj; -} - -static herr_t -H5VL_log_object_specific(void *obj, H5VL_loc_params_t loc_params, H5VL_object_specific_t specific_type, - hid_t dxpl_id, void **req, va_list arguments) -{ - H5VL_log_t *o = (H5VL_log_t *)obj; - - H5VLobject_specific(o->under_object, loc_params, o->under_plugin, specific_type, dxpl_id, req, arguments); - - printf("------- LOG Object specific\n"); - return 1; -} - -static void * -H5VL_log_dataset_create(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t dcpl_id, hid_t dapl_id, hid_t dxpl_id, void **req) -{ - H5VL_log_t *dset; - H5VL_log_t *o = (H5VL_log_t *)obj; - - dset = (H5VL_log_t *)calloc(1, sizeof(H5VL_log_t)); - - dset->under_object = H5VLdataset_create(o->under_object, loc_params, o->under_plugin, name, dcpl_id, dapl_id, dxpl_id, req); - dset->under_plugin = o->under_plugin; - - printf("------- LOG H5Dcreate\n"); - return (void *)dset; -} - -static void * -H5VL_log_dataset_open(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t dapl_id, hid_t dxpl_id, void **req) -{ - H5VL_log_t *dset; - H5VL_log_t *o = (H5VL_log_t *)obj; - - dset = (H5VL_log_t *)calloc(1, sizeof(H5VL_log_t)); - - dset->under_object = H5VLdataset_open(o->under_object, loc_params, o->under_plugin, name, dapl_id, dxpl_id, req); - dset->under_plugin = o->under_plugin; - - printf("------- LOG H5Dopen\n"); - return (void *)dset; -} - -static herr_t -H5VL_log_dataset_read(void *dset, hid_t mem_type_id, hid_t mem_space_id, - hid_t file_space_id, hid_t plist_id, void *buf, void **req) -{ - H5VL_log_t *d = (H5VL_log_t *)dset; - - H5VLdataset_read(d->under_object, d->under_plugin, mem_type_id, mem_space_id, file_space_id, - plist_id, buf, req); - - printf("------- LOG H5Dread\n"); - return 1; -} -static herr_t -H5VL_log_dataset_write(void *dset, hid_t mem_type_id, hid_t mem_space_id, - hid_t file_space_id, hid_t plist_id, const void *buf, void **req) -{ - H5VL_log_t *d = (H5VL_log_t *)dset; - - H5VLdataset_write(d->under_object, d->under_plugin, mem_type_id, mem_space_id, file_space_id, - plist_id, buf, req); - - printf("------- LOG H5Dwrite\n"); - return 1; -} -static herr_t -H5VL_log_dataset_close(void *dset, hid_t dxpl_id, void **req) -{ - H5VL_log_t *d = (H5VL_log_t *)dset; - - H5VLdataset_close(d->under_object, d->under_plugin, dxpl_id, req); - free(d); - - printf("------- LOG H5Dclose\n"); - return 1; -} - -#if 0 -static void *H5VL_log_attr_create(void *obj, H5VL_loc_params_t loc_params, const char *attr_name, hid_t acpl_id, hid_t aapl_id, hid_t dxpl_id, void **req){ -static herr_t H5VL_log_attr_close(void *attr, hid_t dxpl_id, void **req){ - -/* Datatype callbacks */ - - -/* Dataset callbacks */ -static void *H5VL_log_dataset_create(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t dcpl_id, hid_t dapl_id, hid_t dxpl_id, void **req){ -static herr_t H5VL_log_dataset_close(void *dset, hid_t dxpl_id, void **req){ - -/* File callbacks */ - - -static void *H5VL_log_file_open(const char *name, unsigned flags, hid_t fapl_id, hid_t dxpl_id, void **req){ - - -/* Group callbacks */ - -static void *H5VL_log_group_open(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t gapl_id, hid_t dxpl_id, void **req){ -static herr_t H5VL_log_group_get(void *obj, H5VL_group_get_t get_type, hid_t dxpl_id, void **req, va_list arguments){ - - -/* Link callbacks */ - -/* Object callbacks */ - - -#endif diff --git a/examples/h5_vol_external_log_native.c b/examples/h5_vol_external_log_native.c new file mode 100644 index 0000000..625403f --- /dev/null +++ b/examples/h5_vol_external_log_native.c @@ -0,0 +1,508 @@ + +#include +#include +#include +#include "hdf5.h" + +#define LOG 502 + +/* Datatype callbacks */ +static void *H5VL_log_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 dxpl_id, void **req); +static void *H5VL_log_datatype_open(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t tapl_id, hid_t dxpl_id, void **req); +static herr_t H5VL_log_datatype_get(void *dt, H5VL_datatype_get_t get_type, hid_t dxpl_id, void **req, va_list arguments); +static herr_t H5VL_log_datatype_close(void *dt, hid_t dxpl_id, void **req); + +/* Dataset callbacks */ +static void *H5VL_log_dataset_create(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t dcpl_id, hid_t dapl_id, hid_t dxpl_id, void **req); +static void *H5VL_log_dataset_open(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t dapl_id, hid_t dxpl_id, void **req); +static herr_t H5VL_log_dataset_read(void *dset, hid_t mem_type_id, hid_t mem_space_id, + hid_t file_space_id, hid_t plist_id, void *buf, void **req); +static herr_t H5VL_log_dataset_write(void *dset, hid_t mem_type_id, hid_t mem_space_id, + hid_t file_space_id, hid_t plist_id, const void *buf, void **req); +static herr_t H5VL_log_dataset_close(void *dset, hid_t dxpl_id, void **req); + +/* File callbacks */ +static void *H5VL_log_file_create(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id, hid_t dxpl_id, void **req); +static void *H5VL_log_file_open(const char *name, unsigned flags, hid_t fapl_id, hid_t dxpl_id, void **req); +static herr_t H5VL_log_file_get(void *file, H5VL_file_get_t get_type, hid_t dxpl_id, void **req, va_list arguments); +static herr_t H5VL_log_file_close(void *file, hid_t dxpl_id, void **req); + +/* Group callbacks */ +static void *H5VL_log_group_create(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t gcpl_id, hid_t gapl_id, hid_t dxpl_id, void **req); +static herr_t H5VL_log_group_close(void *grp, hid_t dxpl_id, void **req); + +/* Link callbacks */ + +/* Object callbacks */ +static void *H5VL_log_object_open(void *obj, H5VL_loc_params_t loc_params, H5I_type_t *opened_type, hid_t dxpl_id, void **req); +static herr_t H5VL_log_object_specific(void *obj, H5VL_loc_params_t loc_params, H5VL_object_specific_t specific_type, hid_t dxpl_id, void **req, va_list arguments); + +static const H5VL_class_t H5VL_log_g = { + LOG, + "log", /* name */ + NULL, /* initialize */ + NULL, /* terminate */ + sizeof(hid_t), + NULL, + NULL, + { /* attribute_cls */ + NULL, //H5VL_log_attr_create, /* create */ + NULL, //H5VL_log_attr_open, /* open */ + NULL, //H5VL_log_attr_read, /* read */ + NULL, //H5VL_log_attr_write, /* write */ + NULL, //H5VL_log_attr_get, /* get */ + NULL, //H5VL_log_attr_specific, /* specific */ + NULL, //H5VL_log_attr_optional, /* optional */ + NULL //H5VL_log_attr_close /* close */ + }, + { /* dataset_cls */ + H5VL_log_dataset_create, /* create */ + H5VL_log_dataset_open, /* open */ + H5VL_log_dataset_read, /* read */ + H5VL_log_dataset_write, /* write */ + NULL, //H5VL_log_dataset_get, /* get */ + NULL, //H5VL_log_dataset_specific, /* specific */ + NULL, //H5VL_log_dataset_optional, /* optional */ + H5VL_log_dataset_close /* close */ + }, + { /* datatype_cls */ + H5VL_log_datatype_commit, /* commit */ + H5VL_log_datatype_open, /* open */ + H5VL_log_datatype_get, /* get_size */ + NULL, //H5VL_log_datatype_specific, /* specific */ + NULL, //H5VL_log_datatype_optional, /* optional */ + H5VL_log_datatype_close /* close */ + }, + { /* file_cls */ + H5VL_log_file_create, /* create */ + H5VL_log_file_open, /* open */ + H5VL_log_file_get, /* get */ + NULL, //H5VL_log_file_specific, /* specific */ + NULL, //H5VL_log_file_optional, /* optional */ + H5VL_log_file_close /* close */ + }, + { /* group_cls */ + H5VL_log_group_create, /* create */ + NULL, //H5VL_log_group_open, /* open */ + NULL, //H5VL_log_group_get, /* get */ + NULL, //H5VL_log_group_specific, /* specific */ + NULL, //H5VL_log_group_optional, /* optional */ + H5VL_log_group_close /* close */ + }, + { /* link_cls */ + NULL, //H5VL_log_link_create, /* create */ + NULL, //H5VL_log_link_copy, /* copy */ + NULL, //H5VL_log_link_move, /* move */ + NULL, //H5VL_log_link_get, /* get */ + NULL, //H5VL_log_link_specific, /* specific */ + NULL, //H5VL_log_link_optional, /* optional */ + }, + { /* object_cls */ + H5VL_log_object_open, /* open */ + NULL, //H5VL_log_object_copy, /* copy */ + NULL, //H5VL_log_object_get, /* get */ + H5VL_log_object_specific, /* specific */ + NULL, //H5VL_log_object_optional, /* optional */ + }, + { + NULL, + NULL, + NULL + }, + NULL +}; + +typedef struct H5VL_log_t { + void *under_object; + H5VL_t *under_plugin; +} H5VL_log_t; + +static herr_t +visit_cb(hid_t oid, const char *name, + const H5O_info_t *oinfo, void *udata) +{ + ssize_t len; + char n[25]; + + if(H5Iget_type(oid) == H5I_GROUP) { + len = H5VLget_plugin_name(oid, n, 50); + printf ("Visiting GROUP VOL name = %s %d\n", n, len); + } + if(H5Iget_type(oid) == H5I_DATASET) + printf("visiting dataset\n"); + if(H5Iget_type(oid) == H5I_DATATYPE) + printf("visiting datatype\n"); + + return 1; +} /* end h5_verify_cached_stabs_cb() */ + +int main(int argc, char **argv) { + const char file_name[]="large_dataset.h5"; + const char group_name[]="/Group"; + const char dataset_name[]="Data"; + char fullpath[500]; + hid_t file_id; + hid_t group_id; + hid_t dataspaceId; + hid_t datasetId; + hid_t acc_tpl; + hid_t under_fapl; + hid_t vol_id; + hid_t int_id; + hid_t attr; + hid_t space; + const unsigned int nelem=60; + int *data; + unsigned int i; + hsize_t dims[1]; + ssize_t len; + char name[25]; + static hsize_t ds_size[2] = {10, 20}; + + under_fapl = H5Pcreate (H5P_FILE_ACCESS); + H5Pset_fapl_native(under_fapl); + vol_id = H5VLregister (&H5VL_log_g); + assert(H5VLis_registered(&H5VL_log_g) == 1); + + acc_tpl = H5Pcreate (H5P_FILE_ACCESS); + H5Pset_vol(acc_tpl, vol_id, &under_fapl); + + file_id = H5Fcreate(file_name, H5F_ACC_TRUNC, H5P_DEFAULT, acc_tpl); + len = H5VLget_plugin_name(file_id, name, 25); + printf ("FILE VOL name = %s %d\n", name, len); + + group_id = H5Gcreate2(file_id, group_name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + len = H5VLget_plugin_name(group_id, name, 50); + printf ("GROUP VOL name = %s %d\n", name, len); + + int_id = H5Tcopy(H5T_NATIVE_INT); + H5Tcommit2(file_id, "int", int_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + len = H5VLget_plugin_name(int_id, name, 50); + printf ("DT COMMIT name = %s %d\n", name, len); + H5Tclose(int_id); + + int_id = H5Topen2(file_id, "int", H5P_DEFAULT); + len = H5VLget_plugin_name(int_id, name, 50); + printf ("DT OPEN name = %s %d\n", name, len); + H5Tclose(int_id); + + int_id = H5Oopen(file_id,"int",H5P_DEFAULT); + len = H5VLget_plugin_name(int_id, name, 50); + printf ("DT OOPEN name = %s %d\n", name, len); + + len = H5Fget_name(file_id, name, 50); + printf("name = %d %s\n", len, name); + + data = malloc (sizeof(int)*nelem); + for(i=0;iunder_object = H5VLfile_create(&(file->under_plugin), name, flags, fcpl_id, under_fapl, dxpl_id, req); + + printf("------- LOG H5Fcreate\n"); + return (void *)file; +} + +static void * +H5VL_log_file_open(const char *name, unsigned flags, hid_t fapl_id, hid_t dxpl_id, void **req) +{ + hid_t under_fapl; + H5VL_log_t *file; + + file = (H5VL_log_t *)calloc(1, sizeof(H5VL_log_t)); + + under_fapl = *((hid_t *)H5Pget_vol_info(fapl_id)); + file->under_object = H5VLfile_open(&(file->under_plugin), name, flags, under_fapl, dxpl_id, req); + + printf("------- LOG H5Fopen\n"); + return (void *)file; +} + +static herr_t +H5VL_log_file_get(void *file, H5VL_file_get_t get_type, hid_t dxpl_id, void **req, va_list arguments) +{ + H5VL_log_t *f = (H5VL_log_t *)file; + + H5VLfile_get(f->under_object, f->under_plugin, get_type, dxpl_id, req, arguments); + + printf("------- LOG H5Fget %d\n", get_type); + return 1; +} +static herr_t +H5VL_log_file_close(void *file, hid_t dxpl_id, void **req) +{ + H5VL_log_t *f = (H5VL_log_t *)file; + + H5VLfile_close(f->under_object, f->under_plugin, dxpl_id, req); + free(f); + + printf("------- LOG H5Fclose\n"); + return 1; +} + +static void * +H5VL_log_group_create(void *obj, H5VL_loc_params_t loc_params, const char *name, + hid_t gcpl_id, hid_t gapl_id, hid_t dxpl_id, void **req) +{ + H5VL_log_t *group; + H5VL_log_t *o = (H5VL_log_t *)obj; + + group = (H5VL_log_t *)calloc(1, sizeof(H5VL_log_t)); + + group->under_object = H5VLgroup_create(o->under_object, loc_params, o->under_plugin, name, gcpl_id, gapl_id, dxpl_id, req); + group->under_plugin = o->under_plugin; + + printf("------- LOG H5Gcreate\n"); + return (void *)group; +} + +static herr_t +H5VL_log_group_close(void *grp, hid_t dxpl_id, void **req) +{ + H5VL_log_t *g = (H5VL_log_t *)grp; + + H5VLgroup_close(g->under_object, g->under_plugin, dxpl_id, req); + free(g); + + printf("------- LOG H5Gclose\n"); + return 1; +} + +static void * +H5VL_log_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 dxpl_id, void **req) +{ + H5VL_log_t *dt; + H5VL_log_t *o = (H5VL_log_t *)obj; + + dt = (H5VL_log_t *)calloc(1, sizeof(H5VL_log_t)); + + dt->under_object = H5VLdatatype_commit(o->under_object, loc_params, o->under_plugin, name, + type_id, lcpl_id, tcpl_id, tapl_id, dxpl_id, req); + dt->under_plugin = o->under_plugin; + + printf("------- LOG H5Tcommit\n"); + return dt; +} +static void * +H5VL_log_datatype_open(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t tapl_id, hid_t dxpl_id, void **req) +{ + H5VL_log_t *dt; + H5VL_log_t *o = (H5VL_log_t *)obj; + + dt = (H5VL_log_t *)calloc(1, sizeof(H5VL_log_t)); + + dt->under_object = H5VLdatatype_open(o->under_object, loc_params, o->under_plugin, name, tapl_id, dxpl_id, req); + dt->under_plugin = o->under_plugin; + + printf("------- LOG H5Topen\n"); + return (void *)dt; +} + +static herr_t +H5VL_log_datatype_get(void *dt, H5VL_datatype_get_t get_type, hid_t dxpl_id, void **req, va_list arguments) +{ + H5VL_log_t *o = (H5VL_log_t *)dt; + herr_t ret_value; + + ret_value = H5VLdatatype_get(o->under_object, o->under_plugin, get_type, dxpl_id, req, arguments); + + printf("------- LOG datatype get\n"); + return ret_value; +} + +static herr_t +H5VL_log_datatype_close(void *dt, hid_t dxpl_id, void **req) +{ + H5VL_log_t *type = (H5VL_log_t *)dt; + + assert(type->under_object); + assert(type->under_plugin); + + H5VLdatatype_close(type->under_object, type->under_plugin, dxpl_id, req); + free(type); + + printf("------- LOG H5Tclose\n"); + return 1; +} + +static void * +H5VL_log_object_open(void *obj, H5VL_loc_params_t loc_params, H5I_type_t *opened_type, hid_t dxpl_id, void **req) +{ + H5VL_log_t *new_obj; + H5VL_log_t *o = (H5VL_log_t *)obj; + + new_obj = (H5VL_log_t *)calloc(1, sizeof(H5VL_log_t)); + + new_obj->under_object = H5VLobject_open(o->under_object, loc_params, o->under_plugin, opened_type, dxpl_id, req); + new_obj->under_plugin = o->under_plugin; + + printf("------- LOG H5Oopen\n"); + return (void *)new_obj; +} + +static herr_t +H5VL_log_object_specific(void *obj, H5VL_loc_params_t loc_params, H5VL_object_specific_t specific_type, + hid_t dxpl_id, void **req, va_list arguments) +{ + H5VL_log_t *o = (H5VL_log_t *)obj; + + H5VLobject_specific(o->under_object, loc_params, o->under_plugin, specific_type, dxpl_id, req, arguments); + + printf("------- LOG Object specific\n"); + return 1; +} + +static void * +H5VL_log_dataset_create(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t dcpl_id, hid_t dapl_id, hid_t dxpl_id, void **req) +{ + H5VL_log_t *dset; + H5VL_log_t *o = (H5VL_log_t *)obj; + + dset = (H5VL_log_t *)calloc(1, sizeof(H5VL_log_t)); + + dset->under_object = H5VLdataset_create(o->under_object, loc_params, o->under_plugin, name, dcpl_id, dapl_id, dxpl_id, req); + dset->under_plugin = o->under_plugin; + + printf("------- LOG H5Dcreate\n"); + return (void *)dset; +} + +static void * +H5VL_log_dataset_open(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t dapl_id, hid_t dxpl_id, void **req) +{ + H5VL_log_t *dset; + H5VL_log_t *o = (H5VL_log_t *)obj; + + dset = (H5VL_log_t *)calloc(1, sizeof(H5VL_log_t)); + + dset->under_object = H5VLdataset_open(o->under_object, loc_params, o->under_plugin, name, dapl_id, dxpl_id, req); + dset->under_plugin = o->under_plugin; + + printf("------- LOG H5Dopen\n"); + return (void *)dset; +} + +static herr_t +H5VL_log_dataset_read(void *dset, hid_t mem_type_id, hid_t mem_space_id, + hid_t file_space_id, hid_t plist_id, void *buf, void **req) +{ + H5VL_log_t *d = (H5VL_log_t *)dset; + + H5VLdataset_read(d->under_object, d->under_plugin, mem_type_id, mem_space_id, file_space_id, + plist_id, buf, req); + + printf("------- LOG H5Dread\n"); + return 1; +} +static herr_t +H5VL_log_dataset_write(void *dset, hid_t mem_type_id, hid_t mem_space_id, + hid_t file_space_id, hid_t plist_id, const void *buf, void **req) +{ + H5VL_log_t *d = (H5VL_log_t *)dset; + + H5VLdataset_write(d->under_object, d->under_plugin, mem_type_id, mem_space_id, file_space_id, + plist_id, buf, req); + + printf("------- LOG H5Dwrite\n"); + return 1; +} +static herr_t +H5VL_log_dataset_close(void *dset, hid_t dxpl_id, void **req) +{ + H5VL_log_t *d = (H5VL_log_t *)dset; + + H5VLdataset_close(d->under_object, d->under_plugin, dxpl_id, req); + free(d); + + printf("------- LOG H5Dclose\n"); + return 1; +} + +#if 0 +static void *H5VL_log_attr_create(void *obj, H5VL_loc_params_t loc_params, const char *attr_name, hid_t acpl_id, hid_t aapl_id, hid_t dxpl_id, void **req){ +static herr_t H5VL_log_attr_close(void *attr, hid_t dxpl_id, void **req){ + +/* Datatype callbacks */ + + +/* Dataset callbacks */ +static void *H5VL_log_dataset_create(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t dcpl_id, hid_t dapl_id, hid_t dxpl_id, void **req){ +static herr_t H5VL_log_dataset_close(void *dset, hid_t dxpl_id, void **req){ + +/* File callbacks */ + + +static void *H5VL_log_file_open(const char *name, unsigned flags, hid_t fapl_id, hid_t dxpl_id, void **req){ + + +/* Group callbacks */ + +static void *H5VL_log_group_open(void *obj, H5VL_loc_params_t loc_params, const char *name, hid_t gapl_id, hid_t dxpl_id, void **req){ +static herr_t H5VL_log_group_get(void *obj, H5VL_group_get_t get_type, hid_t dxpl_id, void **req, va_list arguments){ + + +/* Link callbacks */ + +/* Object callbacks */ + + +#endif diff --git a/src/H5I.c b/src/H5I.c index 7a5b48e..4839624 100644 --- a/src/H5I.c +++ b/src/H5I.c @@ -2489,7 +2489,7 @@ H5I__get_id_cb(void *_item, void UNUSED *_key, void *_udata) *------------------------------------------------------------------------- */ hid_t -H5I_get_id(void *object, H5I_type_t type) +H5I_get_id(const void *object, H5I_type_t type) { hid_t ret_value = FAIL; /* Return value */ H5I_id_type_t *type_ptr; /*ptr to the type */ diff --git a/src/H5Iprivate.h b/src/H5Iprivate.h index a902be5..ef8b3d3 100644 --- a/src/H5Iprivate.h +++ b/src/H5Iprivate.h @@ -88,7 +88,7 @@ H5_DLL int H5I_dec_app_ref_always_close(hid_t id); H5_DLL herr_t H5I_dec_type_ref(H5I_type_t type); H5_DLL herr_t H5I_register_aux(hid_t id, void *aux_ptr); H5_DLL void *H5I_get_aux(hid_t id); -H5_DLL hid_t H5I_get_id(void *object, H5I_type_t type); +H5_DLL hid_t H5I_get_id(const void *object, H5I_type_t type); #endif /* _H5Iprivate_H */ diff --git a/src/H5VL.c b/src/H5VL.c index 6e8823b..8d88e9a 100644 --- a/src/H5VL.c +++ b/src/H5VL.c @@ -51,6 +51,10 @@ static herr_t H5VL_free_cls(H5VL_class_t *cls); /*******************/ /* Local Variables */ /*******************/ +typedef struct { + const H5VL_class_t *vol_cls; + hid_t ret_id; +} H5VL_is_registered_ud_t; /* VOL ID class */ static const H5I_class_t H5I_VOL_CLS[1] = {{ @@ -289,6 +293,39 @@ done: /*------------------------------------------------------------------------- + * Function: H5VL__is_registered_cb + * + * Purpose: Callback routine to search through registered VLs + * + * Return: Success: The first object in the type for which FUNC + * returns non-zero. NULL if FUNC returned zero + * for every object in the type. + * Failure: NULL + * + * Programmer: Quincey Koziol + * Friday, March 30, 2012 + * + *------------------------------------------------------------------------- + */ +static int +H5VL__is_registered_cb(void *obj, hid_t id, void *_op_data) +{ + H5VL_is_registered_ud_t *op_data = (H5VL_is_registered_ud_t *)_op_data; /* User data for callback */ + H5VL_class_t *cls = (H5VL_class_t *)obj; + int ret_value; /* Callback return value */ + + FUNC_ENTER_STATIC_NOERR + + if(cls->value == op_data->vol_cls->value) { + op_data->ret_id = id; + ret_value = H5_ITER_STOP; + } + + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5VL__is_registered_cb() */ + + +/*------------------------------------------------------------------------- * Function: H5VLis_registered * * Purpose: Tests whether a VOL class has been registered or not @@ -303,15 +340,22 @@ done: *------------------------------------------------------------------------- */ htri_t -H5VLis_registered(hid_t id) +H5VLis_registered(const H5VL_class_t *cls) { + H5VL_is_registered_ud_t op_data; htri_t ret_value = FALSE; /* Return value */ FUNC_ENTER_API(FAIL) - H5TRACE1("t", "i", id); + H5TRACE1("t", "*x", cls); + + op_data.ret_id = FAIL; + op_data.vol_cls = cls; /* Check arguments */ - if(NULL != H5I_object_verify(id, H5I_VOL)) + if(H5I_iterate(H5I_VOL, H5VL__is_registered_cb, &op_data, TRUE) < 0) + HGOTO_ERROR(H5E_VOL, H5E_BADITER, FAIL, "can't iterate over VOL ids") + + if(op_data.ret_id != FAIL) ret_value = TRUE; done: diff --git a/src/H5VLpublic.h b/src/H5VLpublic.h index 73c5b6a..d0598d3 100644 --- a/src/H5VLpublic.h +++ b/src/H5VLpublic.h @@ -428,10 +428,18 @@ H5_DLL herr_t H5VLrequest_wait(void **req, H5VL_t *vol_plugin, H5ES_status_t *st /* Function prototypes */ H5_DLL hid_t H5VLregister(const H5VL_class_t *cls); H5_DLL herr_t H5VLunregister(hid_t plugin_id); -H5_DLL htri_t H5VLis_registered(hid_t id); +H5_DLL htri_t H5VLis_registered(const H5VL_class_t *cls); H5_DLL ssize_t H5VLget_plugin_name(hid_t id, char *name/*out*/, size_t size); H5_DLL hid_t H5VLobject_register(void *obj, H5I_type_t obj_type, const H5VL_class_t *cls); H5_DLL herr_t H5VLget_object(hid_t obj_id, void **obj, H5VL_t **vol_plugin); +#if 0 + H5_DLL hid_t H5VLregister_by_name(const char *plugin_name); + H5_DLL herr_t H5VLinitialize(hid_t plugin_id, hid_t vipl_id); + H5_DLL herr_t H5VLterminate(hid_t plugin_id, hid_t vtpl_id); + H5_DLL hid_t H5VLget_plugin_id(H5VL_class_value_t or char *); + H5_DLL herr_t H5VLclose(hid_t plugin_id); + H5_DLL herr_t H5VLioctl(hid_t loc_id or vol_id, , ...); +#endif #ifdef __cplusplus } -- cgit v0.12