16#include "pw_multibuf/internal/chunk_iterator.h"
18namespace pw::multibuf {
29template <
typename Derived,
typename Deque>
32 using size_type =
typename Deque::size_type;
33 using value_type =
typename Deque::value_type;
34 using difference_type =
typename Deque::difference_type;
40 constexpr size_type size()
const {
return deque().size() / depth(); }
41 constexpr size_type capacity()
const {
return deque().capacity() / depth(); }
43 constexpr const_iterator cbegin()
const {
return derived().begin(); }
47 constexpr void Init(Deque& deque, size_type depth) {
48 derived().begin_.deque_ = &deque;
49 derived().begin_.depth_ = depth;
50 derived().end_.deque_ = &deque;
51 derived().end_.depth_ = depth;
52 derived().end_.index_ = deque.size();
55 constexpr Derived& derived() {
return static_cast<Derived&
>(*this); }
56 constexpr const Derived& derived()
const {
57 return static_cast<const Derived&
>(*this);
60 constexpr const Deque& deque()
const {
return *(derived().begin_.deque_); }
61 constexpr size_type depth()
const {
return derived().begin_.depth_; }
78template <
typename Deque>
85 using typename Base::difference_type;
87 using typename Base::size_type;
88 using typename Base::value_type;
90 constexpr Chunks() =
default;
92 constexpr iterator begin()
const {
return begin_; }
93 constexpr iterator end()
const {
return end_; }
96 template <
typename,
typename>
97 friend class ::pw::multibuf::internal::ChunksImpl;
98 friend class ::pw::multibuf::internal::GenericMultiBuf;
101 friend class ::pw::multibuf::test::IteratorTest;
103 constexpr Chunks(Deque& deque, size_type depth) { Base::Init(deque, depth); }
121template <
typename Deque>
129 using typename Base::difference_type;
130 using typename Base::size_type;
131 using typename Base::value_type;
139 template <
typename,
typename>
140 friend class ::pw::multibuf::internal::ChunksImpl;
141 friend class ::pw::multibuf::internal::GenericMultiBuf;
143 constexpr ConstChunks(
const Deque& deque, size_type depth) {
144 Base::Init(deque, depth);
Definition: chunk_iterator.h:43
Base class for ranges of chunks.
Definition: chunks.h:30