1#ifndef TATOOINE_LAZY_READER_H
2#define TATOOINE_LAZY_READER_H
11template <
typename DataSet,
typename GlobalIndexOrder = x_fastest,
12 typename LocalIndexOrder = GlobalIndexOrder>
32 mutable std::vector<std::unique_ptr<std::mutex>>
m_mutexes;
62 mutex = std::make_unique<std::mutex>();
70 std::cerr <<
"not in range: ";
71 ((std::cerr <<
indices <<
", "), ...);
74 std::cerr <<
"size is: ";
75 for (
auto s : this->
size()) {
76 std::cerr << s <<
", ";
95 auto& chunk = *this->
chunk_at(plain_chunk_index);
96 m_read[plain_chunk_index] =
true;
99 for (std::size_t i = 0; i < offset.size(); ++i) {
100 assert(offset[i] + chunk.size()[i] <= this->size()[i]);
102 m_dataset.read(offset, chunk.size(), chunk);
106 return this->
chunk_at(plain_chunk_index);
111 auto const plain_chunk_index =
113 auto lock = std::lock_guard {*
m_mutexes[plain_chunk_index]};
116 if (chunk ==
nullptr) {
121 plain_chunk_index,
indices...)];
125 template <
integral Index, std::size_t N, std::size_t... Seq>
127 std::index_sequence<Seq...> )
const ->
value_type const& {
132 template <
integral Index, std::
size_t N>
134 return at(
indices, std::make_index_sequence<N>{});
144 auto const& chunk_data =
chunk_at(plain_chunk_index)->data();
145 for (
auto const& v : chunk_data) {
154 ->
bool requires is_arithmetic<value_type> {
auto indices() const
Definition: dynamic_multidim_size.h:236
Definition: concepts.h:21
Definition: algorithm.h:6
auto begin(Range &&range)
Definition: iterator_facade.h:318
auto end(Range &&range)
Definition: iterator_facade.h:322
Definition: chunked_multidim_array.h:27
auto global_indices_from_chunk_indices(std::vector< Int > is) const
Definition: chunked_multidim_array.h:220
auto constexpr in_range(integral auto const ... indices) const
Definition: dynamic_multidim_size.h:130
auto chunk_indices_from_global_indices(std::index_sequence< Seq... >, integral auto const ... is) const
Definition: chunked_multidim_array.h:197
auto chunk_at(integral auto const chunk_index0, integral auto const ... chunk_indices) const -> auto const &
Definition: chunked_multidim_array.h:241
auto chunk_size() const
Definition: chunked_multidim_array.h:332
auto create_chunk_at(std::size_t const plain_chunk_index, std::vector< std::size_t > const &multi_indices) const -> auto const &
Definition: chunked_multidim_array.h:269
auto plain_internal_chunk_index_from_global_indices(std::size_t plain_chunk_index, std::index_sequence< Seq... >, integral auto const ... is) const
Definition: chunked_multidim_array.h:138
auto chunk_at_is_null(integral auto const chunk_index0, integral auto const ... chunk_indices) const
Definition: chunked_multidim_array.h:252
auto size() const -> auto const &
Definition: dynamic_multidim_size.h:107
auto num_chunks() const
Definition: chunked_multidim_array.h:330
auto num_dimensions() const
Definition: dynamic_multidim_size.h:105
auto resize(SizeRange &&size) -> void requires(is_integral< typename std::decay_t< SizeRange >::value_type >)
Definition: chunked_multidim_array.h:87
auto plain_chunk_index_from_global_indices(std::index_sequence< Seq... >, integral auto const ... is) const
Definition: chunked_multidim_array.h:158
Definition: lazy_reader.h:14
auto set_max_num_chunks_loaded(std::size_t const)
Definition: lazy_reader.h:158
static auto default_value() -> value_type &
Definition: lazy_reader.h:20
bool m_limit_num_chunks_loaded
Definition: lazy_reader.h:29
lazy_reader(lazy_reader const &other)
Definition: lazy_reader.h:41
std::size_t m_max_num_chunks_loaded
Definition: lazy_reader.h:28
auto read_chunk(std::size_t const plain_chunk_index, integral auto const ... indices) const -> auto const &
Definition: lazy_reader.h:66
auto chunk_at(integral auto const chunk_index0, integral auto const ... chunk_indices) const -> auto const &
Definition: chunked_multidim_array.h:241
std::vector< std::size_t > m_chunks_loaded
Definition: lazy_reader.h:31
typename DataSet::value_type value_type
Definition: lazy_reader.h:16
auto is_chunk_filled_with_value(std::size_t const plain_chunk_index, value_type const &value) const -> bool
Definition: lazy_reader.h:142
auto chunk_is_loaded(std::size_t const plain_chunk_index) const
Definition: lazy_reader.h:173
auto num_chunks_loaded() const
Definition: lazy_reader.h:167
auto create_mutexes()
Definition: lazy_reader.h:59
auto is_chunk_filled_with_zeros(std::size_t const plain_chunk_index) const -> bool
Definition: lazy_reader.h:153
std::vector< std::unique_ptr< std::mutex > > m_mutexes
Definition: lazy_reader.h:32
auto chunks_loaded() const -> auto const &
Definition: lazy_reader.h:171
lazy_reader(DataSet const &file, std::vector< std::size_t > const &chunk_size)
Definition: lazy_reader.h:35
std::mutex m_chunks_loaded_mutex
Definition: lazy_reader.h:30
auto limit_num_chunks_loaded(bool const =true)
Definition: lazy_reader.h:163
std::vector< bool > m_read
Definition: lazy_reader.h:27
auto at(integral auto const ... indices) const -> value_type const &
Definition: lazy_reader.h:110
auto init(std::vector< std::size_t > const &chunk_size) -> void
Definition: lazy_reader.h:52
auto operator()(integral auto const ... indices) const -> value_type const &
Definition: lazy_reader.h:137
auto at(std::array< Index, N > const &indices, std::index_sequence< Seq... >) const -> value_type const &
Definition: lazy_reader.h:126
auto at(std::array< Index, N > const &indices) const -> value_type const &
Definition: lazy_reader.h:133
DataSet m_dataset
Definition: lazy_reader.h:26