Improvements to the filter API


I’m working on the creation of a HDF5 filter that needs access to arbitrary metadata from the underlying file. The filter API won’t let me do that, however; the callbacks only provide access to the dataset’s property list, datatype, and dataspace:

htri_t (*H5Z_can_apply_func_t)(hid_t dcpl_id, hid_t type_id, hid_t space_id);
herr_t (*H5Z_set_local_func_t)(hid_t dcpl_id, hid_t type_id, hid_t space_id);

I have been also working on another filter that, for performance reasons, needs to allocate memory once and reuse it across the various calls to the filter. While I can allocate that memory on set_local(), the filter never knows when it’s safe to deallocate that, as the current filter design does not include a teardown callback.

I have a working patchset that introduces two new optional callbacks: init() and teardown(). In the first, the file id that’s embedded in the pipeline object (H5O_shared_t) is provided to the user, along with the three other well known hid_t objects. The signature of the latter is the same as set_local()/can_apply(), and it’s called on H5D_close().

My first question to you is: is this the right place to discuss API changes? The second question is: are you willing to accept such modifications? Last, my understanding is that we’d need a new H5Z_class3_t structure to prevent breaking existing applications. If that’s the case, then we could probably have a new version of set_local() as well which simply takes an extra File handle object, as opposed to introducing one more callback.

Thank you in advance for your attention and guidance.

A post was merged into an existing topic: H5Ovisit does not follow soft links