23 #include "openPMD/Error.hpp"
24 #include "openPMD/Iteration.hpp"
25 #include "openPMD/Series.hpp"
26 #include "openPMD/Streaming.hpp"
27 #include "openPMD/auxiliary/Variant.hpp"
28 #include "openPMD/backend/ParsePreference.hpp"
29 #include "openPMD/snapshots/IteratorTraits.hpp"
35 #include <unordered_map>
55 namespace step_status_types
71 std::optional<Iteration::IterationIndex_t> iteration_idx;
75 std::vector<Iteration::IterationIndex_t>
76 available_iterations_in_step;
80 std::optional<Iteration::IterationIndex_t> iteration_idx,
81 std::vector<Iteration::IterationIndex_t>
82 available_iterations_in_step);
95 step_status_types::Before_t,
96 step_status_types::During_t,
97 step_status_types::After_t>
103 constexpr
static After_t After{};
105 using variant_t = std::variant<
110 using variant_t::operator=;
112 template <
typename V>
113 auto get_variant() -> std::optional<V *>;
114 template <
typename V>
115 auto get_variant()
const -> std::optional<V const *>;
117 auto get_iteration_index()
const
118 -> std::optional<Iteration::IterationIndex_t>;
123 enum class AtTheEdge : bool
139 template <
typename F,
typename G>
140 void map_during_t(F &&map, G &&create_new);
145 template <
typename F>
146 void map_during_t(F &&map);
150 inline auto as_base()
const -> variant_t
const &
154 inline auto as_base() -> variant_t &
171 Iteration::IterationIndex_t iteration_idx;
175 struct Seek : std::variant<seek_types::Next_t, seek_types::Seek_Iteration_t>
180 static constexpr
Next_t const Next{};
183 std::variant<seek_types::Next_t, seek_types::Seek_Iteration_t>;
186 inline auto as_base()
const -> variant_t
const &
190 inline auto as_base() -> variant_t &
203 Container<Iteration, Iteration::IterationIndex_t>::value_type>
209 using iteration_index_t = IndexedIteration::index_t;
215 SharedData() =
default;
216 SharedData(SharedData
const &) =
delete;
217 SharedData(SharedData &&) =
delete;
218 SharedData &operator=(SharedData
const &) =
delete;
219 SharedData &operator=(SharedData &&) =
delete;
223 using step_index = size_t;
241 std::optional<internal::ParsePreference> parsePreference;
256 std::unordered_map<iteration_index_t, step_index> seen_iterations;
262 auto currentIteration()
const
263 -> std::optional<Iteration::IterationIndex_t>;
270 std::shared_ptr<std::optional<SharedData>> m_data =
271 std::make_shared<std::optional<SharedData>>(std::nullopt);
273 auto get() -> SharedData &;
274 auto get()
const -> SharedData
const &;
283 using typename parent_t ::difference_type;
306 std::optional<internal::ParsePreference>
const &parsePreference);
311 auto operator*() -> value_type &;
312 auto operator*() const -> value_type const &;
336 auto is_end() const ->
bool;
338 operator
bool() const;
368 void initIteratorFilebased();
373 void deactivateDeadIteration(iteration_index_t);
375 void initSeriesInLinearReadMode();
383 enum class TypeOfEndIterator :
char
386 NoMoreIterationsInStep
388 auto turn_into_end_iterator(TypeOfEndIterator) -> void;
389 auto assert_end_iterator() const ->
void;
391 auto resetCurrentIterationToBegin(
392 size_t num_skipped_iterations,
393 std::vector<iteration_index_t> current_iterations) ->
void;
394 auto peekCurrentlyOpenIteration() const
395 -> std::optional<value_type const *>;
396 auto peekCurrentlyOpenIteration() -> std::optional<value_type *>;
398 auto reparse_possibly_deleted_iteration(iteration_index_t) ->
void;
406 template <
typename F,
typename G>
407 void CurrentStep::map_during_t(F &&map, G &&create_new)
410 auxiliary::overloaded{
411 [&](During_t &during) { std::forward<F>(map)(during); },
412 [&](Before_t
const &) {
413 std::optional<variant_t> res =
414 std::forward<G>(create_new)(AtTheEdge::Begin);
420 [&](After_t
const &) {
421 std::optional<variant_t> res =
422 std::forward<G>(create_new)(AtTheEdge::End);
431 template <
typename F>
432 void CurrentStep::map_during_t(F &&map)
435 std::forward<F>(map), [](
auto const &) {
return std::nullopt; });
Definition: IteratorTraits.hpp:93
Map-like container that enforces openPMD requirements and handles IO.
Definition: Container.hpp:104
Implementation for the root level of the openPMD hierarchy.
Definition: Series.hpp:288
Definition: StatefulIterator.hpp:300
Definition: StatefulIterator.hpp:297
Based on the logic of the former class ReadIterations, integrating into itself the logic of former Wr...
Definition: StatefulIterator.hpp:204
StatefulIterator()
construct the end() iterator
Definition: ContainerImpls.hpp:36
Data members for Series.
Definition: Series.hpp:90
Public definitions of openPMD-api.
Definition: Date.cpp:29
Definition: StatefulIterator.hpp:98
Definition: StatefulIterator.hpp:176
Definition: StatefulIterator.hpp:167
Definition: StatefulIterator.hpp:170
Definition: StatefulIterator.hpp:87
Definition: StatefulIterator.hpp:60
Definition: StatefulIterator.hpp:64