60 likes | 285 Views
Writing Your Own HDF5 Virtual File Driver (VFD). Dana Robinson The HDF Group. Efficient Use of HDF5 With High Data Rate X-Ray Detectors Paul Scherrer Institut. Main Idea: Users should be able to write their own VFD without having to rebuild the HDF5 library. HDF5 Library. HDF5 API.
E N D
Writing Your Own HDF5Virtual File Driver (VFD) Dana Robinson The HDF Group Efficient Use of HDF5 With High Data Rate X-Ray Detectors Paul ScherrerInstitut
Main Idea: Users should be able to write their own VFD without having to rebuild the HDF5 library.
HDF5 Library HDF5 API Virtual File Layer VFD VFD User-Supplied VFD disk
What do I have to do? 1) Implement H5FDset_fapl_foo(). This will need to work with H5Pset_driver() 2) Implement appropriate VFD functions – read, write, etc. 3) Compile your code into a library or directly into your app.
"Demo" VFD The STDIO VFD is a demo driver which uses no internal HDF5 calls. Not intended for production use! Unfortunately, this means that you do not get HDF5's platform-independent wrapper functions. Can copy and paste as a basis for your own VFD.
static const H5FD_class_t H5FD_sec2_g = { "sec2", /*name */ MAXADDR, /*maxaddr*/ H5F_CLOSE_WEAK, /*fc_degree*/ H5FD_sec2_term, /*terminate */ NULL, /*sb_size*/ NULL, /*sb_encode*/ NULL, /*sb_decode*/ 0, /*fapl_size*/ NULL, /*fapl_get*/ NULL, /*fapl_copy*/ NULL, /*fapl_free*/ 0, /*dxpl_size*/ NULL, /*dxpl_copy*/ NULL, /*dxpl_free*/ H5FD_sec2_open, /*open */ H5FD_sec2_close, /*close */ H5FD_sec2_cmp, /*cmp*/ H5FD_sec2_query, /*query */ NULL, /*get_type_map*/ NULL, /*alloc*/ NULL, /*free */ H5FD_sec2_get_eoa, /*get_eoa*/ H5FD_sec2_set_eoa, /*set_eoa*/ H5FD_sec2_get_eof, /*get_eof*/ H5FD_sec2_get_handle, /*get_handle*/ H5FD_sec2_read, /*read */ H5FD_sec2_write, /*write */ NULL, /*flush */ H5FD_sec2_truncate,/*truncate */ NULL, /*lock */ NULL, /*unlock */ H5FD_FLMAP_SINGLE /*fl_map*/ }; Each VFD contains a struct which maps our abstract VFL calls to your VFDs functions Use NULL when not implemented