31#ifndef ETL_MULTI_SPAN_INCLUDED
32#define ETL_MULTI_SPAN_INCLUDED
51 typedef T element_type;
52 typedef typename etl::remove_cv<T>::type value_type;
53 typedef size_t size_type;
55 typedef const T& const_reference;
57 typedef const T* const_pointer;
72 : p_current(ETL_NULLPTR)
74 , p_value(ETL_NULLPTR)
81 if (p_current != p_end)
85 if (p_value == p_current->
end())
90 }
while ((p_current != p_end) && p_current->
empty());
92 if (p_current != p_end)
94 p_value = p_current->
begin();
98 p_value = ETL_NULLPTR;
153 return (lhs.p_current == rhs.p_current);
161 return !(lhs == rhs);
166 typedef typename span_list_type::iterator span_list_iterator;
169 iterator(span_list_iterator p_current_, span_list_iterator p_end_)
170 : p_current(p_current_)
172 , p_value(ETL_NULLPTR)
174 if (p_current != p_end)
176 p_value = p_current->
begin();
180 typedef const span_type* span_list_pointer;
182 span_list_pointer p_current;
183 span_list_pointer p_end;
191 : span_list(span_list_)
199 template <
typename TContainer>
201 : span_list(a.data(), a.data() + a.size())
209 template <
typename TContainer>
211 : span_list(a.data(), a.data() + a.size())
218 template <
typename TIterator>
227 template <
typename TIterator>
237 : span_list(other.span_list)
246 span_list = other.span_list;
262 ETL_CONSTEXPR iterator
end()
const
264 return iterator(span_list.
end(), span_list.
end());
270 ETL_CONSTEXPR14
size_t size() const ETL_NOEXCEPT
272 size_t total_n_spans = 0U;
274 for (
typename span_list_type::iterator itr = span_list.
begin();
275 itr != span_list.
end();
278 total_n_spans += itr->size();
281 return total_n_spans;
287 ETL_CONSTEXPR
bool empty() const ETL_NOEXCEPT
289 if (span_list.
empty())
304 size_t total_n_spans_bytes = 0U;
306 for (
typename span_list_type::iterator itr = span_list.
begin();
307 itr != span_list.
end();
310 total_n_spans_bytes += itr->size_bytes();
313 return total_n_spans_bytes;
321 return span_list.
size();
326 span_list_type span_list;
Iterator.
Definition: multi_span.h:66
friend bool operator==(const iterator &lhs, const iterator &rhs)
== operator
Definition: multi_span.h:151
reference operator*()
Definition: multi_span.h:119
pointer operator->()
-> operator
Definition: multi_span.h:135
friend bool operator!=(const iterator &lhs, const iterator &rhs)
!= operator
Definition: multi_span.h:159
Definition: multi_span.h:48
ETL_CONSTEXPR14 size_t size() const ETL_NOEXCEPT
Returns the number of elements in the multi_span.
Definition: multi_span.h:270
ETL_CONSTEXPR bool empty() const ETL_NOEXCEPT
Returns true if the multi_span size is zero.
Definition: multi_span.h:287
ETL_CONSTEXPR multi_span(span_list_type span_list_)
Constructor.
Definition: multi_span.h:190
ETL_CONSTEXPR multi_span & operator=(const multi_span &other)
Assignment operator.
Definition: multi_span.h:244
ETL_CONSTEXPR14 size_t size_bytes() const ETL_NOEXCEPT
Returns the size of the multi_span.
Definition: multi_span.h:302
ETL_CONSTEXPR size_t size_spans() const ETL_NOEXCEPT
Returns the number of spans in the multi_span.
Definition: multi_span.h:319
Span - Fixed Extent.
Definition: span.h:62
ETL_NODISCARD ETL_CONSTEXPR iterator begin() const ETL_NOEXCEPT
Returns an iterator to the beginning of the span.
Definition: span.h:256
ETL_NODISCARD ETL_CONSTEXPR bool empty() const ETL_NOEXCEPT
Returns true if the span size is zero.
Definition: span.h:304
ETL_NODISCARD ETL_CONSTEXPR size_t size() const ETL_NOEXCEPT
Returns the size of the span.
Definition: span.h:312
ETL_NODISCARD ETL_CONSTEXPR iterator end() const ETL_NOEXCEPT
Returns an iterator to the end of the span.
Definition: span.h:272
ETL_CONSTEXPR17 T * addressof(T &t)
Definition: addressof.h:51
bitset_ext
Definition: absolute.h:38
ETL_CONSTEXPR TContainer::iterator begin(TContainer &container)
Definition: iterator.h:931
ETL_CONSTEXPR TContainer::iterator end(TContainer &container)
Definition: iterator.h:961
iterator
Definition: iterator.h:399