Embedded Template Library 1.0
Loading...
Searching...
No Matches
circular_iterator.h
Go to the documentation of this file.
1
2
3/******************************************************************************
4The MIT License(MIT)
5
6Embedded Template Library.
7https://github.com/ETLCPP/etl
8https://www.etlcpp.com
9
10Copyright(c) 2022 John Wellbelove
11
12Permission is hereby granted, free of charge, to any person obtaining a copy
13of this software and associated documentation files(the "Software"), to deal
14in the Software without restriction, including without limitation the rights
15to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
16copies of the Software, and to permit persons to whom the Software is
17furnished to do so, subject to the following conditions :
18
19The above copyright notice and this permission notice shall be included in all
20copies or substantial portions of the Software.
21
22THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
25AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28SOFTWARE.
29******************************************************************************/
30
31#ifndef ETL_CIRCULAR_ITERATOR_INCLUDED
32#define ETL_CIRCULAR_ITERATOR_INCLUDED
33
34#include "platform.h"
35#include "iterator.h"
36#include "static_assert.h"
37
39
40namespace etl
41{
42 namespace private_circular_iterator
43 {
44 //***************************************************************************
46 //***************************************************************************
47 template <typename TIterator>
49 : public etl::iterator< typename etl::iterator_traits<TIterator>::iterator_category, typename etl::iterator_traits<TIterator>::value_type>
50 {
51 public:
52
53 typedef typename etl::iterator_traits<TIterator>::value_type value_type;
54 typedef typename etl::iterator_traits<TIterator>::difference_type difference_type;
55 typedef typename etl::iterator_traits<TIterator>::pointer pointer;
56 typedef typename etl::iterator_traits<TIterator>::reference reference;
57 typedef typename etl::iterator_traits<TIterator>::iterator_category iterator_category;
58
59 //***************************************************************************
61 //***************************************************************************
62 ETL_CONSTEXPR14 circular_iterator_common()
63 : itr_begin(TIterator())
64 , itr_end(TIterator())
65 , itr(TIterator())
66 {
67 }
68
69 //***************************************************************************
71 //***************************************************************************
72 ETL_CONSTEXPR14 circular_iterator_common(TIterator itr_begin_, TIterator itr_end_, TIterator start_)
73 : itr_begin(itr_begin_)
74 , itr_end(itr_end_)
75 , itr(start_)
76 {
77 }
78
79 //***************************************************************************
81 //***************************************************************************
83 : itr_begin(other.itr_begin)
84 , itr_end(other.itr_end)
85 , itr(other.itr)
86 {
87 }
88
89 //***************************************************************************
91 //***************************************************************************
93 {
94 itr_begin = other.itr_begin;
95 itr_end = other.itr_end;
96 itr = other.itr;
97
98 return *this;
99 }
100
101 //***************************************************************************
103 //***************************************************************************
104 ETL_CONSTEXPR14 TIterator begin() const
105 {
106 return itr_begin;
107 }
108
109 //***************************************************************************
111 //***************************************************************************
112 ETL_CONSTEXPR14 TIterator end() const
113 {
114 return itr_end;
115 }
116
117 //***************************************************************************
119 //***************************************************************************
120 ETL_CONSTEXPR14 size_t size() const
121 {
122 return static_cast<size_t>(etl::distance(itr_begin, itr_end));
123 }
124
125 //***************************************************************************
127 //***************************************************************************
128 ETL_CONSTEXPR14 bool empty() const
129 {
130 return (itr_begin == itr_end);
131 }
132
133 //***************************************************************************
135 //***************************************************************************
136 ETL_CONSTEXPR14 value_type operator*()
137 {
138 return *itr;
139 }
140
141 //***************************************************************************
143 //***************************************************************************
144 ETL_CONSTEXPR14 const value_type operator*() const
145 {
146 return *itr;
147 }
148
149 //***************************************************************************
151 //***************************************************************************
152 ETL_CONSTEXPR14 TIterator operator->()
153 {
154 return itr;
155 }
156
157 //***************************************************************************
159 //***************************************************************************
160 ETL_CONSTEXPR14 const TIterator operator->() const
161 {
162 return itr;
163 }
164
165 //***************************************************************************
167 //***************************************************************************
168 ETL_CONSTEXPR14 operator TIterator() const
169 {
170 return itr;
171 }
172
173 //***************************************************************************
175 //***************************************************************************
176 ETL_CONSTEXPR14 TIterator current() const
177 {
178 return itr;
179 }
180
181 protected:
182
183 TIterator itr_begin;
184 TIterator itr_end;
185 TIterator itr;
186 };
187
188 //***************************************************************************
193 //***************************************************************************
194 template <typename TIterator, typename TTag = typename etl::iterator_traits<TIterator>::iterator_category>
196 {
197 ETL_STATIC_ASSERT((etl::is_same<TTag, ETL_OR_STD::input_iterator_tag>::value_type),
198 "input_iterator_catagory is not supported by circular_iterator");
199 ETL_STATIC_ASSERT((etl::is_same<TTag, ETL_OR_STD::output_iterator_tag>::value_type),
200 "output_iterator_catagory is not supported by circular_iterator");
201 };
202
203 //***************************************************************************
208 template <typename TIterator>
209 class circular_iterator_impl<TIterator, ETL_OR_STD::forward_iterator_tag> : public circular_iterator_common<TIterator>
210 {
211 private:
212
214
215 public:
216
217 using common_t::operator=;
218
219 typedef typename common_t::value_type value_type;
220 typedef typename common_t::difference_type difference_type;
221 typedef typename common_t::pointer pointer;
222 typedef typename common_t::reference reference;
223 typedef typename common_t::iterator_category iterator_category;
224
225 //***************************************************************************
227 //***************************************************************************
228 ETL_CONSTEXPR14 circular_iterator_impl()
229 : common_t()
230 {
231 }
232
233 //***************************************************************************
235 //***************************************************************************
236 ETL_CONSTEXPR14 circular_iterator_impl(TIterator itr_begin_, TIterator itr_end_)
237 : common_t(itr_begin_, itr_end_, itr_begin_)
238 {
239 }
240
241 //***************************************************************************
243 //***************************************************************************
244 ETL_CONSTEXPR14 circular_iterator_impl(TIterator itr_begin_, TIterator itr_end_, TIterator start_)
245 : common_t(itr_begin_, itr_end_, start_)
246 {
247 }
248
249 //***************************************************************************
251 //***************************************************************************
252 ETL_CONSTEXPR14 circular_iterator_impl(const circular_iterator_impl& other)
253 : common_t(other)
254 {
255 }
256
257 //***************************************************************************
259 //***************************************************************************
261 {
262 common_t::operator=(other);
263
264 return *this;
265 }
266
267 //***************************************************************************
269 //***************************************************************************
271 {
272 if (++this->itr == this->itr_end)
273 {
274 this->itr = this->itr_begin;
275 }
276
277 return *this;
278 }
279
280 //***************************************************************************
282 //***************************************************************************
284 {
285 circular_iterator_impl original(*this);
286
287 ++(*this);
288
289 return (original);
290 }
291 };
292
293 //***************************************************************************
298 template <typename TIterator>
299 class circular_iterator_impl<TIterator, ETL_OR_STD::bidirectional_iterator_tag> : public circular_iterator_common<TIterator>
300 {
301 private:
302
304
305 public:
306
307 using common_t::operator=;
308
309 typedef typename common_t::value_type value_type;
310 typedef typename common_t::difference_type difference_type;
311 typedef typename common_t::pointer pointer;
312 typedef typename common_t::reference reference;
313 typedef typename common_t::iterator_category iterator_category;
314
315 //***************************************************************************
317 //***************************************************************************
318 ETL_CONSTEXPR14 circular_iterator_impl()
319 : common_t()
320 {
321 }
322
323 //***************************************************************************
325 //***************************************************************************
326 ETL_CONSTEXPR14 circular_iterator_impl(TIterator itr_begin_, TIterator itr_end_)
327 : common_t(itr_begin_, itr_end_, itr_begin_)
328 {
329 }
330
331 //***************************************************************************
333 //***************************************************************************
334 ETL_CONSTEXPR14 circular_iterator_impl(TIterator itr_begin_, TIterator itr_end_, TIterator start_)
335 : common_t(itr_begin_, itr_end_, start_)
336 {
337 }
338
339 //***************************************************************************
341 //***************************************************************************
342 ETL_CONSTEXPR14 circular_iterator_impl(const circular_iterator_impl& other)
343 : common_t(other)
344 {
345 }
346
347 //***************************************************************************
349 //***************************************************************************
351 {
352 common_t::operator=(other);
353
354 return *this;
355 }
356
357 //***************************************************************************
359 //***************************************************************************
361 {
362 if (++this->itr == this->itr_end)
363 {
364 this->itr = this->itr_begin;
365 }
366
367 return *this;
368 }
369
370 //***************************************************************************
372 //***************************************************************************
374 {
375 circular_iterator_impl original(*this);
376
377 ++(*this);
378
379 return (original);
380 }
381
382 //***************************************************************************
384 //***************************************************************************
386 {
387 if (this->itr == this->itr_begin)
388 {
389 typename etl::reverse_iterator<TIterator> ritr(this->itr_end);
390 ++ritr;
391 this->itr = ritr.base();
392 }
393 else
394 {
395 --this->itr;
396 }
397
398 return *this;
399 }
400
401 //***************************************************************************
403 //***************************************************************************
405 {
406 circular_iterator_impl original(*this);
407
408 --(*this);
409
410 return (original);
411 }
412 };
413
414 //***************************************************************************
418 //***************************************************************************
419 template <typename TIterator>
422 {
423 private:
424
426
427 public:
428
429 using common_t::operator=;
430
431 typedef typename common_t::value_type value_type;
432 typedef typename common_t::difference_type difference_type;
433 typedef typename common_t::pointer pointer;
434 typedef typename common_t::reference reference;
435 typedef typename common_t::iterator_category iterator_category;
436
437 //***************************************************************************
439 //***************************************************************************
440 ETL_CONSTEXPR14 circular_iterator_impl()
441 : common_t()
442 {
443 }
444
445 //***************************************************************************
447 //***************************************************************************
448 ETL_CONSTEXPR14 circular_iterator_impl(TIterator itr_begin_, TIterator itr_end_)
449 : common_t(itr_begin_, itr_end_, itr_begin_)
450 {
451 }
452
453 //***************************************************************************
455 //***************************************************************************
456 ETL_CONSTEXPR14 circular_iterator_impl(TIterator itr_begin_, TIterator itr_end_, TIterator start_)
457 : common_t(itr_begin_, itr_end_, start_)
458 {
459 }
460
461 //***************************************************************************
463 //***************************************************************************
464 ETL_CONSTEXPR14 circular_iterator_impl(const circular_iterator_impl& other)
465 : common_t(other)
466 {
467 }
468
469 //***************************************************************************
471 //***************************************************************************
473 {
474 common_t::operator=(other);
475
476 return *this;
477 }
478
479 //***************************************************************************
481 //***************************************************************************
483 {
484 if (++this->itr == this->itr_end)
485 {
486 this->itr = this->itr_begin;
487 }
488
489 return *this;
490 }
491
492 //***************************************************************************
494 //***************************************************************************
496 {
497 circular_iterator_impl original(*this);
498
499 ++(*this);
500
501 return (original);
502 }
503
504 //***************************************************************************
506 //***************************************************************************
508 {
509 if (this->itr == this->itr_begin)
510 {
511 typename etl::reverse_iterator<TIterator> ritr(this->itr_end);
512 ++ritr;
513 this->itr = ritr.base();
514 }
515 else
516 {
517 --this->itr;
518 }
519
520 return *this;
521 }
522
523 //***************************************************************************
525 //***************************************************************************
527 {
528 circular_iterator_impl original(*this);
529
530 --(*this);
531
532 return (original);
533 }
534
535 //***************************************************************************
537 //***************************************************************************
538 ETL_CONSTEXPR14 circular_iterator_impl& operator+=(difference_type offset)
539 {
540 const difference_type length = difference_type(this->size());
541 offset %= length;
542
543 if (offset != 0)
544 {
545 const difference_type distance_from_begin = etl::distance(this->itr_begin, this->itr);
546 const difference_type distance_to_end = etl::distance(this->itr, this->itr_end);
547
548 if (offset > 0)
549 {
550 if (distance_to_end > offset)
551 {
552 offset = distance_from_begin + offset;
553 }
554 else
555 {
556 offset = offset - distance_to_end;
557 }
558 }
559 else
560 {
561 offset = -offset;
562
563 if (distance_from_begin >= offset)
564 {
565 offset = distance_from_begin - offset;
566 }
567 else
568 {
569 offset = offset - distance_from_begin;
570 offset = length - offset;
571 }
572 }
573
574 this->itr = this->itr_begin + offset;
575 }
576
577 return *this;
578 }
579
580 //***************************************************************************
582 //***************************************************************************
583 ETL_CONSTEXPR14 circular_iterator_impl& operator-=(typename etl::iterator_traits<TIterator>::difference_type offset)
584 {
585 return operator+=(-offset);
586 }
587 };
588 } // namespace private_circular_iterator
589
590 //***************************************************************************
595 //**************************************************************************
596 template <typename TIterator>
598 : public etl::private_circular_iterator::circular_iterator_impl< TIterator, typename etl::iterator_traits<TIterator>::iterator_category>
599 {
600 private:
601
603 impl_t;
604
605 public:
606
607 using impl_t::operator=;
608
609 typedef typename impl_t::value_type value_type;
610 typedef typename impl_t::difference_type difference_type;
611 typedef typename impl_t::pointer pointer;
612 typedef typename impl_t::reference reference;
613 typedef typename impl_t::iterator_category iterator_category;
614
615 //***************************************************************************
617 //***************************************************************************
618 ETL_CONSTEXPR14 circular_iterator()
619 : impl_t()
620 {
621 }
622
623 //***************************************************************************
625 //***************************************************************************
626 ETL_CONSTEXPR14 circular_iterator(TIterator itr_begin_, TIterator itr_end_)
627 : impl_t(itr_begin_, itr_end_, itr_begin_)
628 {
629 }
630
631 //***************************************************************************
633 //***************************************************************************
634 ETL_CONSTEXPR14 circular_iterator(TIterator itr_begin_, TIterator itr_end_, TIterator start_)
635 : impl_t(itr_begin_, itr_end_, start_)
636 {
637 }
638
639 //***************************************************************************
641 //***************************************************************************
642 ETL_CONSTEXPR14 circular_iterator(const circular_iterator& other)
643 : impl_t(other)
644 {
645 }
646
647 //***************************************************************************
649 //***************************************************************************
650 ETL_CONSTEXPR14 circular_iterator& operator=(const circular_iterator& other)
651 {
652 impl_t::operator=(other);
653
654 return *this;
655 }
656 };
657
658 //*****************************************************************************
660 //*****************************************************************************
661 template <typename TIterator>
662 ETL_CONSTEXPR14 etl::circular_iterator<TIterator> operator+(etl::circular_iterator<TIterator>& lhs,
663 typename etl::iterator_traits<TIterator>::difference_type offset)
664 {
665 etl::circular_iterator<TIterator> result(lhs);
666 result += offset;
667
668 return result;
669 }
670
671 //*****************************************************************************
673 //*****************************************************************************
674 template <typename TIterator>
675 ETL_CONSTEXPR14 etl::circular_iterator<TIterator> operator-(etl::circular_iterator<TIterator>& lhs,
676 typename etl::iterator_traits<TIterator>::difference_type offset)
677 {
678 etl::circular_iterator<TIterator> result(lhs);
679 result -= offset;
680
681 return result;
682 }
683
684 //*****************************************************************************
686 //*****************************************************************************
687 template <typename TIterator>
688 ETL_CONSTEXPR14 typename etl::iterator_traits<TIterator>::difference_type operator-(etl::circular_iterator<TIterator>& lhs,
689 etl::circular_iterator<TIterator>& rhs)
690 {
691 return TIterator(lhs) - TIterator(rhs);
692 }
693
694 //*****************************************************************************
696 //*****************************************************************************
697 template <typename TIterator>
698 ETL_CONSTEXPR14 bool operator==(const etl::circular_iterator<TIterator>& lhs, const etl::circular_iterator<TIterator>& rhs)
699 {
700 return TIterator(lhs) == TIterator(rhs);
701 }
702
703 //*****************************************************************************
705 //*****************************************************************************
706 template <typename TIterator>
707 ETL_CONSTEXPR14 bool operator==(const etl::circular_iterator<TIterator>& lhs, TIterator rhs)
708 {
709 return TIterator(lhs) == rhs;
710 }
711
712 //*****************************************************************************
714 //*****************************************************************************
715 template <typename TIterator>
716 ETL_CONSTEXPR14 bool operator==(TIterator lhs, const etl::circular_iterator<TIterator>& rhs)
717 {
718 return lhs == TIterator(rhs);
719 }
720
721 //*****************************************************************************
723 //*****************************************************************************
724 template <typename TIterator>
725 ETL_CONSTEXPR14 bool operator!=(const etl::circular_iterator<TIterator>& lhs, const etl::circular_iterator<TIterator>& rhs)
726 {
727 return !(lhs == rhs);
728 }
729
730 //*****************************************************************************
732 //*****************************************************************************
733 template <typename TIterator>
734 ETL_CONSTEXPR14 bool operator!=(const etl::circular_iterator<TIterator>& lhs, TIterator rhs)
735 {
736 return !(lhs == rhs);
737 }
738
739 //*****************************************************************************
741 //*****************************************************************************
742 template <typename TIterator>
743 ETL_CONSTEXPR14 bool operator!=(TIterator& lhs, const etl::circular_iterator<TIterator>& rhs)
744 {
745 return !(lhs == rhs);
746 }
747} // namespace etl
748
749#endif
Common circular iterator implementation.
Definition circular_iterator.h:50
ETL_CONSTEXPR14 TIterator current() const
Conversion to base iterator type.
Definition circular_iterator.h:176
ETL_CONSTEXPR14 value_type operator*()
Dereference operator.
Definition circular_iterator.h:136
TIterator itr_end
The underlying end iterator.
Definition circular_iterator.h:184
ETL_CONSTEXPR14 bool empty() const
Is there nothing to iterate over?
Definition circular_iterator.h:128
ETL_CONSTEXPR14 TIterator operator->()
-> operator.
Definition circular_iterator.h:152
ETL_CONSTEXPR14 const value_type operator*() const
Dereference operator.
Definition circular_iterator.h:144
ETL_CONSTEXPR14 const TIterator operator->() const
-> operator.
Definition circular_iterator.h:160
ETL_CONSTEXPR14 circular_iterator_common(const circular_iterator_common &other)
Copy constructor.
Definition circular_iterator.h:82
ETL_CONSTEXPR14 circular_iterator_common()
Default constructor.
Definition circular_iterator.h:62
ETL_CONSTEXPR14 TIterator begin() const
Beginning of the range.
Definition circular_iterator.h:104
ETL_CONSTEXPR14 circular_iterator_common(TIterator itr_begin_, TIterator itr_end_, TIterator start_)
Construct from iterators.
Definition circular_iterator.h:72
TIterator itr_begin
The underlying begin iterator.
Definition circular_iterator.h:183
ETL_CONSTEXPR14 TIterator end() const
End of the range.
Definition circular_iterator.h:112
ETL_CONSTEXPR14 size_t size() const
How long is the range?
Definition circular_iterator.h:120
TIterator itr
The underlying iterator.
Definition circular_iterator.h:185
ETL_CONSTEXPR14 circular_iterator_common & operator=(const circular_iterator_common &other)
Assignment.
Definition circular_iterator.h:92
Definition iterator.h:252
ETL_CONSTEXPR14 circular_iterator_impl & operator--()
Decrement.
Definition circular_iterator.h:507
ETL_CONSTEXPR14 circular_iterator_impl(const circular_iterator_impl &other)
Copy constructor.
Definition circular_iterator.h:464
ETL_CONSTEXPR14 circular_iterator_impl & operator+=(difference_type offset)
+= operator.
Definition circular_iterator.h:538
ETL_CONSTEXPR14 circular_iterator_impl operator++(int)
Increment.
Definition circular_iterator.h:495
ETL_CONSTEXPR14 circular_iterator_impl & operator++()
Increment.
Definition circular_iterator.h:270
ETL_CONSTEXPR14 circular_iterator()
Default constructor.
Definition circular_iterator.h:618
ETL_CONSTEXPR14 circular_iterator & operator=(const circular_iterator &other)
Assignment.
Definition circular_iterator.h:650
ETL_CONSTEXPR14 circular_iterator_impl & operator=(const circular_iterator_impl &other)
Assignment.
Definition circular_iterator.h:472
ETL_CONSTEXPR14 circular_iterator_impl(TIterator itr_begin_, TIterator itr_end_, TIterator start_)
Construct from start + iterators.
Definition circular_iterator.h:334
ETL_CONSTEXPR14 circular_iterator_impl(const circular_iterator_impl &other)
Copy constructor.
Definition circular_iterator.h:342
ETL_CONSTEXPR14 circular_iterator_impl(TIterator itr_begin_, TIterator itr_end_, TIterator start_)
Construct from start + iterators.
Definition circular_iterator.h:244
ETL_CONSTEXPR14 circular_iterator(const circular_iterator &other)
Copy constructor.
Definition circular_iterator.h:642
ETL_CONSTEXPR14 circular_iterator_impl operator++(int)
Increment.
Definition circular_iterator.h:373
ETL_CONSTEXPR14 circular_iterator_impl operator--(int)
Decrement.
Definition circular_iterator.h:404
ETL_CONSTEXPR14 circular_iterator_impl & operator=(const circular_iterator_impl &other)
Assignment.
Definition circular_iterator.h:350
ETL_CONSTEXPR14 circular_iterator_impl & operator++()
Increment.
Definition circular_iterator.h:360
ETL_CONSTEXPR14 circular_iterator_impl(TIterator itr_begin_, TIterator itr_end_, TIterator start_)
Construct from start + iterators.
Definition circular_iterator.h:456
ETL_CONSTEXPR14 circular_iterator(TIterator itr_begin_, TIterator itr_end_)
Construct from iterators.
Definition circular_iterator.h:626
ETL_CONSTEXPR14 circular_iterator_impl(const circular_iterator_impl &other)
Copy constructor.
Definition circular_iterator.h:252
ETL_CONSTEXPR14 circular_iterator_impl()
Default constructor.
Definition circular_iterator.h:318
ETL_CONSTEXPR14 circular_iterator_impl operator++(int)
Increment.
Definition circular_iterator.h:283
ETL_CONSTEXPR14 circular_iterator_impl()
Default constructor.
Definition circular_iterator.h:228
ETL_CONSTEXPR14 circular_iterator_impl & operator=(const circular_iterator_impl &other)
Assignment.
Definition circular_iterator.h:260
ETL_CONSTEXPR14 circular_iterator_impl operator--(int)
Decrement.
Definition circular_iterator.h:526
ETL_CONSTEXPR14 circular_iterator_impl(TIterator itr_begin_, TIterator itr_end_)
Construct from iterators.
Definition circular_iterator.h:236
ETL_CONSTEXPR14 circular_iterator_impl(TIterator itr_begin_, TIterator itr_end_)
Construct from iterators.
Definition circular_iterator.h:326
ETL_CONSTEXPR14 circular_iterator_impl(TIterator itr_begin_, TIterator itr_end_)
Construct from iterators.
Definition circular_iterator.h:448
ETL_CONSTEXPR14 circular_iterator(TIterator itr_begin_, TIterator itr_end_, TIterator start_)
Construct from start + iterators.
Definition circular_iterator.h:634
ETL_CONSTEXPR14 circular_iterator_impl & operator-=(typename etl::iterator_traits< TIterator >::difference_type offset)
-= operator.
Definition circular_iterator.h:583
ETL_CONSTEXPR14 circular_iterator_impl & operator++()
Increment.
Definition circular_iterator.h:482
ETL_CONSTEXPR14 circular_iterator_impl & operator--()
Decrement.
Definition circular_iterator.h:385
ETL_CONSTEXPR14 circular_iterator_impl()
Default constructor.
Definition circular_iterator.h:440
Definition circular_iterator.h:599
bitset_ext
Definition absolute.h:40
ETL_CONSTEXPR14 bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1081
ETL_CONSTEXPR14 etl::circular_iterator< TIterator > operator-(etl::circular_iterator< TIterator > &lhs, typename etl::iterator_traits< TIterator >::difference_type offset)
Definition circular_iterator.h:675
ETL_CONSTEXPR14 bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1093
ETL_CONSTEXPR TContainer::size_type size(const TContainer &container)
Definition iterator.h:1192
ETL_CONSTEXPR14 etl::circular_iterator< TIterator > operator+(etl::circular_iterator< TIterator > &lhs, typename etl::iterator_traits< TIterator >::difference_type offset)
Definition circular_iterator.h:662
Definition iterator.h:61
Definition iterator.h:58
iterator
Definition iterator.h:424
Definition iterator.h:64