Open ax3l opened 5 years ago
cc @C0nsultant @franzpoeschel do you have thoughts on this? We could improve data safety for user-provided containers and python bindings a lot if we could store more complex T
types in our std::shared_ptr<T> data
members.
It would probably be useful if we added a trait / policy or runtime converter to the
Parameter< Operation::READ_DATASET >
(and write) data members of shared pointers in order to share more complex data objects.For example returning to python a
py::array
, that the user might not handle, might result in it getting garbage collected before ourflush()
can be called, which in turn causes in invalid memory access in the backend. We could keep thatpy::array
alive untilflush()
as in C++ by returning ashared_ptr< py::array >
.Overloads for
RecordComponent::loadChunk<T>
are already okay and well designed, but we cannot share yet an object that needs a more indirect data access pattern than a shared_ptr of raw memory, since we access it right away: https://github.com/openPMD/openPMD-api/blob/0.7.1-alpha/src/IO/HDF5/HDF5IOHandler.cpp#L1017