16#include "pw_containers/internal/var_len_entry.h"
17#include "pw_preprocessor/util.h"
31#include "pw_containers/internal/wrap.h"
32#include "pw_span/span.h"
43namespace pw::containers::internal {
48 using difference_type = std::ptrdiff_t;
50 using size_type = uint32_t;
53 using iterator_category = std::forward_iterator_tag;
55 static_assert(std::is_same_v<size_type, typename VarLenEntry<T>::size_type>);
67 size_type entry_size = ReadVarLenEntryEncodedSize(data_, offset_);
69 offset_, entry_size,
static_cast<size_type
>(data_.size()));
77 return previous_value;
87 constexpr pointer operator->()
const {
98 return lhs.data_.data() == rhs.data_.data() &&
99 lhs.data_.size() == rhs.data_.size() && lhs.offset_ == rhs.offset_;
101 [[nodiscard]]
friend constexpr bool operator!=(
104 return !(lhs == rhs);
110 template <
typename,
typename>
111 friend class GenericVarLenEntryQueue;
113 friend class VarLenEntryQueueIteratorC;
115 constexpr VarLenEntryQueueIterator(SpanType data,
size_t offset)
116 : data_(data), offset_(static_cast<size_type>(offset)) {}
118 constexpr void LoadEntry()
const;
121 size_type offset_ = 0;
122 mutable value_type entry_;
129constexpr void VarLenEntryQueueIterator<T>::LoadEntry()
const {
130 if (!entry_.empty()) {
133 auto [prefix_size, data_size] = ReadVarLenEntrySize(data_, offset_);
134 size_type offset = offset_;
135 IncrementWithWrap(offset, prefix_size,
static_cast<size_type
>(data_.size()));
136 size_t first_chunk = data_.size() - offset;
137 if (data_size <= first_chunk) {
138 entry_ = VarLenEntry<T>(data_.subspan(offset, data_size), SpanType());
140 entry_ = VarLenEntry<T>(data_.subspan(offset, first_chunk),
141 data_.subspan(0, data_size - first_chunk));
167 uint8_t* internal_data;
168 uint32_t internal_size;
169 uint32_t internal_offset;
173 const uint8_t* internal_data;
174 uint32_t internal_size;
175 uint32_t internal_offset;
179void pw_InlineVarLenEntryQueue_Iterator_Advance(
181void pw_InlineVarLenEntryQueue_ConstIterator_Advance(
185bool pw_InlineVarLenEntryQueue_Iterator_Equal(
188bool pw_InlineVarLenEntryQueue_ConstIterator_Equal(
Refers to an entry in-place in the queue. Entries may be discontiguous.
Definition: var_len_entry.h:65
Definition: var_len_entry_queue_iterator.h:146
Definition: var_len_entry_queue_iterator.h:46
constexpr VarLenEntryQueueIterator & operator++()
Definition: var_len_entry_queue_iterator.h:66
friend constexpr bool operator==(const VarLenEntryQueueIterator &lhs, const VarLenEntryQueueIterator &rhs)
Definition: var_len_entry_queue_iterator.h:95
constexpr reference operator*() const
Definition: var_len_entry_queue_iterator.h:83
Definition: span_impl.h:235
Definition: var_len_entry.h:245
Definition: var_len_entry_queue_iterator.h:172
Definition: var_len_entry.h:238
Definition: var_len_entry_queue_iterator.h:166