Embedded Template Library 1.0
Loading...
Searching...
No Matches
pvoidvector.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) 2016 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_PVOIDVECTOR_INCLUDED
32#define ETL_PVOIDVECTOR_INCLUDED
33
34#define ETL_IN_PVOIDVECTOR
35
36#include "../platform.h"
37#include "../algorithm.h"
38#include "vector_base.h"
39#include "../type_traits.h"
40#include "../error_handler.h"
41#include "../functional.h"
42#include "../iterator.h"
43
44#include <stddef.h>
45
46#include "minmax_push.h"
47
48namespace etl
49{
50 //***************************************************************************
53 //***************************************************************************
54 class pvoidvector : public vector_base
55 {
56 public:
57
58 typedef void* value_type;
59 typedef value_type& reference;
60 typedef const value_type& const_reference;
61 typedef value_type* pointer;
62 typedef const value_type* const_pointer;
63 typedef value_type* iterator;
64 typedef const value_type* const_iterator;
65 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
66 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
67 typedef size_t size_type;
68 typedef etl::iterator_traits<iterator>::difference_type difference_type;
69
70 public:
71
72 //*********************************************************************
75 //*********************************************************************
76 iterator begin()
77 {
78 return p_buffer;
79 }
80
81 //*********************************************************************
84 //*********************************************************************
85 const_iterator begin() const
86 {
87 return const_iterator(p_buffer);
88 }
89
90 //*********************************************************************
93 //*********************************************************************
94 iterator end()
95 {
96 return p_end;
97 }
98
99 //*********************************************************************
102 //*********************************************************************
103 const_iterator end() const
104 {
105 return const_iterator(p_end);
106 }
107
108 //*********************************************************************
111 //*********************************************************************
112 const_iterator cbegin() const
113 {
114 return const_iterator(p_buffer);
115 }
116
117 //*********************************************************************
120 //*********************************************************************
121 const_iterator cend() const
122 {
123 return const_iterator(p_end);
124 }
125
126 //*********************************************************************
129 //*********************************************************************
130 reverse_iterator rbegin()
131 {
132 return reverse_iterator(end());
133 }
134
135 //*********************************************************************
138 //*********************************************************************
139 const_reverse_iterator rbegin() const
140 {
141 return const_reverse_iterator(end());
142 }
143
144 //*********************************************************************
147 //*********************************************************************
148 reverse_iterator rend()
149 {
150 return reverse_iterator(begin());
151 }
152
153 //*********************************************************************
156 //*********************************************************************
157 const_reverse_iterator rend() const
158 {
159 return const_reverse_iterator(begin());
160 }
161
162 //*********************************************************************
165 //*********************************************************************
166 const_reverse_iterator crbegin() const
167 {
168 return const_reverse_iterator(cend());
169 }
170
171 //*********************************************************************
174 //*********************************************************************
175 const_reverse_iterator crend() const
176 {
177 return const_reverse_iterator(cbegin());
178 }
179
180 //*********************************************************************
185 //*********************************************************************
186 void resize(size_t new_size)
187 {
188 ETL_ASSERT_OR_RETURN(new_size <= CAPACITY, ETL_ERROR(vector_full));
189
190 p_end = p_buffer + new_size;
191 }
192
193 //*********************************************************************
199 //*********************************************************************
200 void resize(size_t new_size, value_type value)
201 {
202 ETL_ASSERT_OR_RETURN(new_size <= CAPACITY, ETL_ERROR(vector_full));
203
204 pointer p_new_end = p_buffer + new_size;
205
206 // Size up if necessary.
207 if (p_end < p_new_end)
208 {
209 etl::fill(p_end, p_new_end, value);
210 }
211
212 p_end = p_new_end;
213 }
214
215 //*********************************************************************
218 //*********************************************************************
219 void uninitialized_resize(size_t new_size)
220 {
221 ETL_ASSERT_OR_RETURN(new_size <= CAPACITY, ETL_ERROR(vector_full));
222
223 p_end = p_buffer + new_size;
224 }
225
226 //*********************************************************************
230 //*********************************************************************
231 reference operator [](size_t i)
232 {
233 ETL_ASSERT_CHECK_INDEX_OPERATOR(i < size(), ETL_ERROR(vector_out_of_bounds));
234 return p_buffer[i];
235 }
236
237 //*********************************************************************
241 //*********************************************************************
242 const_reference operator [](size_t i) const
243 {
244 ETL_ASSERT_CHECK_INDEX_OPERATOR(i < size(), ETL_ERROR(vector_out_of_bounds));
245 return p_buffer[i];
246 }
247
248 //*********************************************************************
253 //*********************************************************************
254 reference at(size_t i)
255 {
256 ETL_ASSERT(i < size(), ETL_ERROR(vector_out_of_bounds));
257 return p_buffer[i];
258 }
259
260 //*********************************************************************
265 //*********************************************************************
266 const_reference at(size_t i) const
267 {
268 ETL_ASSERT(i < size(), ETL_ERROR(vector_out_of_bounds));
269 return p_buffer[i];
270 }
271
272 //*********************************************************************
275 //*********************************************************************
276 reference front()
277 {
278 ETL_ASSERT_CHECK_EXTRA(size() > 0, ETL_ERROR(vector_out_of_bounds));
279 return p_buffer[0];
280 }
281
282 //*********************************************************************
285 //*********************************************************************
286 const_reference front() const
287 {
288 ETL_ASSERT_CHECK_EXTRA(size() > 0, ETL_ERROR(vector_out_of_bounds));
289 return p_buffer[0];
290 }
291
292 //*********************************************************************
295 //*********************************************************************
296 reference back()
297 {
298 ETL_ASSERT_CHECK_EXTRA(size() > 0, ETL_ERROR(vector_out_of_bounds));
299 return *(p_end - 1);
300 }
301
302 //*********************************************************************
305 //*********************************************************************
306 const_reference back() const
307 {
308 ETL_ASSERT_CHECK_EXTRA(size() > 0, ETL_ERROR(vector_out_of_bounds));
309 return *(p_end - 1);
310 }
311
312 //*********************************************************************
315 //*********************************************************************
316 pointer data()
317 {
318 return p_buffer;
319 }
320
321 //*********************************************************************
324 //*********************************************************************
325 const_pointer data() const
326 {
327 return p_buffer;
328 }
329
330 //*********************************************************************
336 //*********************************************************************
337 template <typename TIterator>
339 assign(TIterator first, TIterator last)
340 {
341#if ETL_IS_DEBUG_BUILD
342 difference_type d = etl::distance(first, last);
343 ETL_ASSERT_OR_RETURN(static_cast<size_t>(d) <= CAPACITY, ETL_ERROR(vector_full));
344#endif
345
346 initialise();
347
348 while (first != last)
349 {
350 *p_end++ = (void*)(*first);
351 ++first;
352 }
353 }
354
355 //*********************************************************************
361 //*********************************************************************
362 template <typename TIterator>
364 assign(TIterator first, TIterator last)
365 {
366#if ETL_IS_DEBUG_BUILD
367 difference_type d = etl::distance(first, last);
368 ETL_ASSERT_OR_RETURN(static_cast<size_t>(d) <= CAPACITY, ETL_ERROR(vector_full));
369#endif
370
371 initialise();
372
373 void** p_first = (void**)(first);
374 void** p_last = (void**)(last);
375
376 p_end = etl::mem_move(p_first, p_last, p_buffer) + (p_last - p_first);
377 }
378
379 //*********************************************************************
384 //*********************************************************************
385 void assign(size_t n, value_type value)
386 {
387 ETL_ASSERT_OR_RETURN(n <= CAPACITY, ETL_ERROR(vector_full));
388
389 initialise();
390
391 p_end = etl::fill_n(p_buffer, n, value);
392 }
393
394 //*************************************************************************
396 //*************************************************************************
397 void clear()
398 {
399 initialise();
400 }
401
402 //*********************************************************************
406 //*********************************************************************
407 void push_back(value_type value)
408 {
409 ETL_ASSERT_CHECK_PUSH_POP_OR_RETURN(size() != CAPACITY, ETL_ERROR(vector_full));
410
411 *p_end++ = value;
412 }
413
414 //*********************************************************************
418 //*********************************************************************
419 void emplace_back(value_type value)
420 {
421 ETL_ASSERT_CHECK_PUSH_POP_OR_RETURN(size() != CAPACITY, ETL_ERROR(vector_full));
422
423 * p_end++ = value;
424 }
425
426 //*************************************************************************
429 //*************************************************************************
430 void pop_back()
431 {
432 ETL_ASSERT_CHECK_PUSH_POP_OR_RETURN(size() > 0, ETL_ERROR(vector_empty));
433
434 --p_end;
435 }
436
437 //*********************************************************************
442 //*********************************************************************
443#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
445#endif
446 iterator insert(const_iterator position, value_type value)
447 {
448 ETL_ASSERT(size() != CAPACITY, ETL_ERROR(vector_full));
449 ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
450
451 iterator position_ = to_iterator(position);
452
453 if (size() != CAPACITY)
454 {
455 if (position_ != end())
456 {
457 ++p_end;
458 etl::mem_move(position_, end() - 1, position_ + 1);
459 *position_ = value;
460 }
461 else
462 {
463 *p_end++ = value;
464 }
465 }
466
467 return position_;
468 }
469#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
470 #include "diagnostic_pop.h"
471#endif
472
473 //*************************************************************************
476 //*************************************************************************
477#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
479#endif
480 iterator emplace(const_iterator position)
481 {
482 ETL_ASSERT(size() != CAPACITY, ETL_ERROR(vector_full));
483 ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
484
485 iterator position_ = to_iterator(position);
486
487 if (position_ != end())
488 {
489 ++p_end;
490 etl::mem_move(position_, end() - 1, position_ + 1);
491 *position_ = ETL_NULLPTR;
492 }
493 else
494 {
495 *p_end++ = ETL_NULLPTR;
496 }
497
498 return position_;
499 }
500#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
501 #include "diagnostic_pop.h"
502#endif
503
504 //*************************************************************************
507 //*************************************************************************
508#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
510#endif
511 iterator emplace(const_iterator position, value_type value)
512 {
513 ETL_ASSERT(size() != CAPACITY, ETL_ERROR(vector_full));
514 ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
515
516 iterator position_ = to_iterator(position);
517
518 if (position_ != end())
519 {
520 ++p_end;
521 etl::mem_move(position_, end() - 1, position_ + 1);
522 *position_ = value;
523 }
524 else
525 {
526 *p_end++ = value;
527 }
528
529 return position_;
530 }
531#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
532 #include "diagnostic_pop.h"
533#endif
534
535 //*********************************************************************
541 //*********************************************************************
542#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
544#endif
545 void insert(const_iterator position, size_t n, value_type value)
546 {
547 ETL_ASSERT_OR_RETURN((size() + n) <= CAPACITY, ETL_ERROR(vector_full));
548 ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
549
550 iterator position_ = to_iterator(position);
551
552 etl::mem_move(position_, p_end, position_ + n);
553 etl::fill_n(position_, n, value);
554
555 p_end += n;
556 }
557#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
558 #include "diagnostic_pop.h"
559#endif
560
561 //*********************************************************************
568 //*********************************************************************
569 template <typename TIterator>
571 insert(const_iterator position, TIterator first, TIterator last)
572 {
573 size_t count = etl::distance(first, last);
574
575 iterator position_ = to_iterator(position);
576
577 ETL_ASSERT_OR_RETURN((size() + count) <= CAPACITY, ETL_ERROR(vector_full));
578 ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
579
580 etl::mem_move(position_, p_end, position_ + count);
581 etl::copy(first, last, position_);
582 p_end += count;
583 }
584
585 //*********************************************************************
592 //*********************************************************************
593 template <typename TIterator>
595 insert(const_iterator position, TIterator first, TIterator last)
596 {
597 size_t count = etl::distance(first, last);
598
599 iterator position_ = to_iterator(position);
600
601 ETL_ASSERT_OR_RETURN((size() + count) <= CAPACITY, ETL_ERROR(vector_full));
602 ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
603
604 etl::mem_move(position_, p_end, position_ + count);
605 etl::mem_move((void**)first, (void**)last, position_);
606 p_end += count;
607 }
608
609 //*********************************************************************
613 //*********************************************************************
614 iterator erase(iterator i_element)
615 {
616 ETL_ASSERT_CHECK_EXTRA(cbegin() <= i_element && i_element < cend(), ETL_ERROR(vector_out_of_bounds));
617
618 etl::mem_move(i_element + 1, end(), i_element);
619 --p_end;
620
621 return i_element;
622 }
623
624 //*********************************************************************
628 //*********************************************************************
629 iterator erase(const_iterator i_element)
630 {
631 ETL_ASSERT_CHECK_EXTRA(cbegin() <= i_element && i_element < cend(), ETL_ERROR(vector_out_of_bounds));
632
633 iterator i_element_ = to_iterator(i_element);
634
635 etl::mem_move(i_element_ + 1, end(), i_element_);
636 --p_end;
637
638 return i_element_;
639 }
640
641 //*********************************************************************
648 //*********************************************************************
649 iterator erase(const_iterator first, const_iterator last)
650 {
651 ETL_ASSERT_CHECK_EXTRA(cbegin() <= first && first <= last && last <= cend(), ETL_ERROR(vector_out_of_bounds));
652
653 iterator first_ = to_iterator(first);
654 iterator last_ = to_iterator(last);
655
656 etl::mem_move(last_, end(), first_);
657 size_t n_delete = static_cast<size_t>(etl::distance(first, last));
658
659 // Just adjust the count.
660 p_end -= n_delete;
661
662 return first_;
663 }
664
665 //*************************************************************************
667 //*************************************************************************
669 {
670 if (&rhs != this)
671 {
672 this->initialise();
673 this->resize(rhs.size());
674 etl::mem_copy(rhs.data(), rhs.size(), this->data());
675 }
676
677 return *this;
678 }
679
680#if ETL_USING_CPP11
681 //*************************************************************************
683 //*************************************************************************
685 {
686 if (&rhs != this)
687 {
688 this->initialise();
689 this->resize(rhs.size());
690 etl::mem_copy(rhs.data(), rhs.size(), this->data());
691 rhs.initialise();
692 }
693
694 return *this;
695 }
696#endif
697
698 //*************************************************************************
701 //*************************************************************************
702 size_type size() const
703 {
704 return size_t(p_end - p_buffer);
705 }
706
707 //*************************************************************************
710 //*************************************************************************
711 bool empty() const
712 {
713 return (p_end == p_buffer);
714 }
715
716 //*************************************************************************
719 //*************************************************************************
720 bool full() const
721 {
722 return size() == CAPACITY;
723 }
724
725 //*************************************************************************
728 //*************************************************************************
729 size_t available() const
730 {
731 return max_size() - size();
732 }
733
734 protected:
735
736 //*********************************************************************
738 //*********************************************************************
739 pvoidvector(void** p_buffer_, size_t MAX_SIZE)
740 : vector_base(MAX_SIZE)
741 , p_buffer(p_buffer_)
742 , p_end(p_buffer_)
743 {
744 }
745
746 //*********************************************************************
748 //*********************************************************************
750 {
751 p_end = p_buffer;
752 }
753
754 //*************************************************************************
756 //*************************************************************************
757 void repair_buffer(void** p_buffer_)
758 {
759 uintptr_t length = static_cast<uintptr_t>(p_end - p_buffer);
760
761 p_buffer = p_buffer_;
762 p_end = p_buffer_ + length;
763 }
764
765 void** p_buffer;
766 void** p_end;
767
768 private:
769
770 //*************************************************************************
772 //*************************************************************************
773 iterator to_iterator(const_iterator itr) const
774 {
775 return const_cast<iterator>(itr);
776 }
777
778 // Disable copy construction.
779 pvoidvector(const pvoidvector&);
780 };
781
782 //***************************************************************************
788 //***************************************************************************
789 inline bool operator ==(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
790 {
791 return (lhs.size() == rhs.size()) && etl::equal(lhs.begin(), lhs.end(), rhs.begin());
792 }
793
794 //***************************************************************************
800 //***************************************************************************
801 inline bool operator !=(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
802 {
803 return !(lhs == rhs);
804 }
805
806 //***************************************************************************
812 //***************************************************************************
813 inline bool operator <(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
814 {
815 return etl::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
816 }
817
818 //***************************************************************************
824 //***************************************************************************
825 inline bool operator >(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
826 {
827 return (rhs < lhs);
828 }
829
830 //***************************************************************************
836 //***************************************************************************
837 inline bool operator <=(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
838 {
839 return !(lhs > rhs);
840 }
841
842 //***************************************************************************
848 //***************************************************************************
849 inline bool operator >=(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
850 {
851 return !(lhs < rhs);
852 }
853}
854
855#include "minmax_pop.h"
856
857#undef ETL_IN_PVOIDVECTOR
858
859#endif
#define ETL_ASSERT(b, e)
Definition error_handler.h:356
enable_if
Definition type_traits_generator.h:1254
bool full() const
Definition pvoidvector.h:720
iterator erase(const_iterator first, const_iterator last)
Definition pvoidvector.h:649
etl::enable_if<!etl::is_pointer< TIterator >::value, void >::type assign(TIterator first, TIterator last)
Definition pvoidvector.h:339
const_reference at(size_t i) const
Definition pvoidvector.h:266
iterator begin()
Definition pvoidvector.h:76
void emplace_back(value_type value)
Definition pvoidvector.h:419
iterator erase(iterator i_element)
Definition pvoidvector.h:614
pointer data()
Definition pvoidvector.h:316
size_type max_size() const
Definition vector_base.h:140
const_reverse_iterator rend() const
Definition pvoidvector.h:157
reference operator[](size_t i)
Definition pvoidvector.h:231
void initialise()
Initialise the vector.
Definition pvoidvector.h:749
bool empty() const
Definition pvoidvector.h:711
etl::enable_if<!etl::is_pointer< TIterator >::value, void >::type insert(const_iterator position, TIterator first, TIterator last)
Definition pvoidvector.h:571
const_iterator end() const
Definition pvoidvector.h:103
vector_base(size_t max_size_)
Constructor.
Definition vector_base.h:150
const size_type CAPACITY
The maximum number of elements in the vector.
Definition vector_base.h:170
iterator emplace(const_iterator position)
Definition pvoidvector.h:480
etl::pvoidvector & operator=(const etl::pvoidvector &rhs)
Assignment operator.
Definition pvoidvector.h:668
void insert(const_iterator position, size_t n, value_type value)
Definition pvoidvector.h:545
reverse_iterator rend()
Definition pvoidvector.h:148
iterator insert(const_iterator position, value_type value)
Definition pvoidvector.h:446
void clear()
Clears the vector.
Definition pvoidvector.h:397
void assign(size_t n, value_type value)
Definition pvoidvector.h:385
iterator emplace(const_iterator position, value_type value)
Definition pvoidvector.h:511
void resize(size_t new_size)
Definition pvoidvector.h:186
etl::enable_if< etl::is_pointer< TIterator >::value, void >::type insert(const_iterator position, TIterator first, TIterator last)
Definition pvoidvector.h:595
void pop_back()
Definition pvoidvector.h:430
const_reverse_iterator crend() const
Definition pvoidvector.h:175
const_reference front() const
Definition pvoidvector.h:286
void repair_buffer(void **p_buffer_)
Fix the internal pointers after a low level memory copy.
Definition pvoidvector.h:757
reference back()
Definition pvoidvector.h:296
iterator end()
Definition pvoidvector.h:94
void uninitialized_resize(size_t new_size)
Definition pvoidvector.h:219
const_pointer data() const
Definition pvoidvector.h:325
reference front()
Definition pvoidvector.h:276
pvoidvector(void **p_buffer_, size_t MAX_SIZE)
Constructor.
Definition pvoidvector.h:739
void push_back(value_type value)
Definition pvoidvector.h:407
const_reference back() const
Definition pvoidvector.h:306
size_t available() const
Definition pvoidvector.h:729
const_iterator cend() const
Definition pvoidvector.h:121
const_iterator begin() const
Definition pvoidvector.h:85
const_iterator cbegin() const
Definition pvoidvector.h:112
size_type size() const
Definition pvoidvector.h:702
iterator erase(const_iterator i_element)
Definition pvoidvector.h:629
const_reverse_iterator crbegin() const
Definition pvoidvector.h:166
reverse_iterator rbegin()
Definition pvoidvector.h:130
etl::enable_if< etl::is_pointer< TIterator >::value, void >::type assign(TIterator first, TIterator last)
Definition pvoidvector.h:364
reference at(size_t i)
Definition pvoidvector.h:254
void resize(size_t new_size, value_type value)
Definition pvoidvector.h:200
const_reverse_iterator rbegin() const
Definition pvoidvector.h:139
Definition pvoidvector.h:55
Definition vector_base.h:80
Definition vector_base.h:66
Definition vector_base.h:94
bitset_ext
Definition absolute.h:39
T * mem_move(const T *sb, const T *se, T *db) ETL_NOEXCEPT
Definition memory.h:2339
bool operator>(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1190
bool operator>=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1202
bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1151
bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1139
T * mem_copy(const T *sb, const T *se, T *db) ETL_NOEXCEPT
Definition memory.h:2289
bool operator<(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1163
bool operator<=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1178
iterator
Definition iterator.h:399