the I/O system. It establishes a polymorphic layer that allows the
high-level user session to interact with various I/O backends through a
consistent interface.
The architecture is designed in distinct layers:
User code
- interacts only with the Session layer
Session layer (m_io_session)
- manages all I/O complexity (file handles, state, etc.)
- instantiates the I/O backend selected at compile-time
- provides reader_session_t and writer_session_t for users
Backend layer (m_io_backend)
- concrete implementation of an I/O backed (e.g., ADIOS2)
- extends the abstract base types defined in this module
Base layer (m_io_base, this module)
- provides abstract reader_base_t and writer_base_t types
- enforces a consistent interface for all backends
The sole public interface for I/O is the high-level session API provided in
m_io_session.
Nodes of different colours represent the following:
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
Nodes of different colours represent the following:
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.