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 "../error_handler.h"
39#include "../functional.h"
40#include "../iterator.h"
41#include "../type_traits.h"
42#include "vector_base.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 //*********************************************************************
200 //*********************************************************************
201 void resize(size_t new_size, value_type value)
202 {
203 ETL_ASSERT_OR_RETURN(new_size <= CAPACITY, ETL_ERROR(vector_full));
204
205 pointer p_new_end = p_buffer + new_size;
206
207 // Size up if necessary.
208 if (p_end < p_new_end)
209 {
210 etl::fill(p_end, p_new_end, value);
211 }
212
213 p_end = p_new_end;
214 }
215
216 //*********************************************************************
219 //*********************************************************************
220 void uninitialized_resize(size_t new_size)
221 {
222 ETL_ASSERT_OR_RETURN(new_size <= CAPACITY, ETL_ERROR(vector_full));
223
224 p_end = p_buffer + new_size;
225 }
226
227 //*********************************************************************
231 //*********************************************************************
232 reference operator[](size_t i)
233 {
234 ETL_ASSERT_CHECK_INDEX_OPERATOR(i < size(), ETL_ERROR(vector_out_of_bounds));
235 return p_buffer[i];
236 }
237
238 //*********************************************************************
242 //*********************************************************************
243 const_reference operator[](size_t i) const
244 {
245 ETL_ASSERT_CHECK_INDEX_OPERATOR(i < size(), ETL_ERROR(vector_out_of_bounds));
246 return p_buffer[i];
247 }
248
249 //*********************************************************************
255 //*********************************************************************
256 reference at(size_t i)
257 {
258 ETL_ASSERT(i < size(), ETL_ERROR(vector_out_of_bounds));
259 return p_buffer[i];
260 }
261
262 //*********************************************************************
268 //*********************************************************************
269 const_reference at(size_t i) const
270 {
271 ETL_ASSERT(i < size(), ETL_ERROR(vector_out_of_bounds));
272 return p_buffer[i];
273 }
274
275 //*********************************************************************
278 //*********************************************************************
279 reference front()
280 {
281 ETL_ASSERT_CHECK_EXTRA(size() > 0, ETL_ERROR(vector_out_of_bounds));
282 return p_buffer[0];
283 }
284
285 //*********************************************************************
288 //*********************************************************************
289 const_reference front() const
290 {
291 ETL_ASSERT_CHECK_EXTRA(size() > 0, ETL_ERROR(vector_out_of_bounds));
292 return p_buffer[0];
293 }
294
295 //*********************************************************************
298 //*********************************************************************
299 reference back()
300 {
301 ETL_ASSERT_CHECK_EXTRA(size() > 0, ETL_ERROR(vector_out_of_bounds));
302 return *(p_end - 1);
303 }
304
305 //*********************************************************************
308 //*********************************************************************
309 const_reference back() const
310 {
311 ETL_ASSERT_CHECK_EXTRA(size() > 0, ETL_ERROR(vector_out_of_bounds));
312 return *(p_end - 1);
313 }
314
315 //*********************************************************************
318 //*********************************************************************
319 pointer data()
320 {
321 return p_buffer;
322 }
323
324 //*********************************************************************
327 //*********************************************************************
328 const_pointer data() const
329 {
330 return p_buffer;
331 }
332
333 //*********************************************************************
340 //*********************************************************************
341 template <typename TIterator>
342 typename etl::enable_if<!etl::is_pointer<TIterator>::value, void>::type assign(TIterator first, TIterator last)
343 {
344#if ETL_IS_DEBUG_BUILD
345 difference_type d = etl::distance(first, last);
346 ETL_ASSERT_OR_RETURN(static_cast<size_t>(d) <= CAPACITY, ETL_ERROR(vector_full));
347#endif
348
349 initialise();
350
351 while (first != last)
352 {
353 *p_end++ = (void*)(*first);
354 ++first;
355 }
356 }
357
358 //*********************************************************************
365 //*********************************************************************
366 template <typename TIterator>
367 typename etl::enable_if<etl::is_pointer<TIterator>::value, void>::type assign(TIterator first, TIterator last)
368 {
369#if ETL_IS_DEBUG_BUILD
370 difference_type d = etl::distance(first, last);
371 ETL_ASSERT_OR_RETURN(static_cast<size_t>(d) <= CAPACITY, ETL_ERROR(vector_full));
372#endif
373
374 initialise();
375
376 void** p_first = (void**)(first);
377 void** p_last = (void**)(last);
378
379 p_end = etl::mem_move(p_first, p_last, p_buffer) + (p_last - p_first);
380 }
381
382 //*********************************************************************
388 //*********************************************************************
389 void assign(size_t n, value_type value)
390 {
391 ETL_ASSERT_OR_RETURN(n <= CAPACITY, ETL_ERROR(vector_full));
392
393 initialise();
394
395 p_end = etl::fill_n(p_buffer, n, value);
396 }
397
398 //*************************************************************************
400 //*************************************************************************
401 void clear()
402 {
403 initialise();
404 }
405
406 //*********************************************************************
411 //*********************************************************************
412 void push_back(value_type value)
413 {
414 ETL_ASSERT_CHECK_PUSH_POP_OR_RETURN(size() != CAPACITY, ETL_ERROR(vector_full));
415
416 *p_end++ = value;
417 }
418
419 //*********************************************************************
424 //*********************************************************************
425 void emplace_back(value_type value)
426 {
427 ETL_ASSERT_CHECK_PUSH_POP_OR_RETURN(size() != CAPACITY, ETL_ERROR(vector_full));
428
429 *p_end++ = value;
430 }
431
432 //*************************************************************************
435 //*************************************************************************
436 void pop_back()
437 {
438 ETL_ASSERT_CHECK_PUSH_POP_OR_RETURN(size() > 0, ETL_ERROR(vector_empty));
439
440 --p_end;
441 }
442
443 //*********************************************************************
449 //*********************************************************************
450#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
452#endif
453 iterator insert(const_iterator position, value_type value)
454 {
455 ETL_ASSERT(size() != CAPACITY, ETL_ERROR(vector_full));
456 ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
457
458 iterator position_ = to_iterator(position);
459
460 if (size() != CAPACITY)
461 {
462 if (position_ != end())
463 {
464 ++p_end;
465 etl::mem_move(position_, end() - 1, position_ + 1);
466 *position_ = value;
467 }
468 else
469 {
470 *p_end++ = value;
471 }
472 }
473
474 return position_;
475 }
476#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
477 #include "diagnostic_pop.h"
478#endif
479
480 //*************************************************************************
484 //*************************************************************************
485#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
487#endif
488 iterator emplace(const_iterator position)
489 {
490 ETL_ASSERT(size() != CAPACITY, ETL_ERROR(vector_full));
491 ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
492
493 iterator position_ = to_iterator(position);
494
495 if (position_ != end())
496 {
497 ++p_end;
498 etl::mem_move(position_, end() - 1, position_ + 1);
499 *position_ = ETL_NULLPTR;
500 }
501 else
502 {
503 *p_end++ = ETL_NULLPTR;
504 }
505
506 return position_;
507 }
508#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
509 #include "diagnostic_pop.h"
510#endif
511
512 //*************************************************************************
516 //*************************************************************************
517#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
519#endif
520 iterator emplace(const_iterator position, value_type value)
521 {
522 ETL_ASSERT(size() != CAPACITY, ETL_ERROR(vector_full));
523 ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
524
525 iterator position_ = to_iterator(position);
526
527 if (position_ != end())
528 {
529 ++p_end;
530 etl::mem_move(position_, end() - 1, position_ + 1);
531 *position_ = value;
532 }
533 else
534 {
535 *p_end++ = value;
536 }
537
538 return position_;
539 }
540#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
541 #include "diagnostic_pop.h"
542#endif
543
544 //*********************************************************************
551 //*********************************************************************
552#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
554#endif
555 void insert(const_iterator position, size_t n, value_type value)
556 {
557 ETL_ASSERT_OR_RETURN((size() + n) <= CAPACITY, ETL_ERROR(vector_full));
558 ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
559
560 iterator position_ = to_iterator(position);
561
562 etl::mem_move(position_, p_end, position_ + n);
563 etl::fill_n(position_, n, value);
564
565 p_end += n;
566 }
567#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
568 #include "diagnostic_pop.h"
569#endif
570
571 //*********************************************************************
578 //*********************************************************************
579 template <typename TIterator>
580 typename etl::enable_if<!etl::is_pointer<TIterator>::value, void>::type insert(const_iterator position, TIterator first, TIterator last)
581 {
582 size_t count = static_cast<size_t>(etl::distance(first, last));
583
584 iterator position_ = to_iterator(position);
585
586 ETL_ASSERT_OR_RETURN((size() + count) <= CAPACITY, ETL_ERROR(vector_full));
587 ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
588
589 etl::mem_move(position_, p_end, position_ + count);
590 etl::copy(first, last, position_);
591 p_end += count;
592 }
593
594 //*********************************************************************
601 //*********************************************************************
602 template <typename TIterator>
603 typename etl::enable_if<etl::is_pointer<TIterator>::value, void>::type insert(const_iterator position, TIterator first, TIterator last)
604 {
605 size_t count = static_cast<size_t>(etl::distance(first, last));
606
607 iterator position_ = to_iterator(position);
608
609 ETL_ASSERT_OR_RETURN((size() + count) <= CAPACITY, ETL_ERROR(vector_full));
610 ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
611
612 etl::mem_move(position_, p_end, position_ + count);
613 etl::mem_move((void**)first, (void**)last, position_);
614 p_end += count;
615 }
616
617 //*********************************************************************
622 //*********************************************************************
623 iterator erase(iterator i_element)
624 {
625 ETL_ASSERT_CHECK_EXTRA(cbegin() <= i_element && i_element < cend(), ETL_ERROR(vector_out_of_bounds));
626
627 etl::mem_move(i_element + 1, end(), i_element);
628 --p_end;
629
630 return i_element;
631 }
632
633 //*********************************************************************
638 //*********************************************************************
639 iterator erase(const_iterator i_element)
640 {
641 ETL_ASSERT_CHECK_EXTRA(cbegin() <= i_element && i_element < cend(), ETL_ERROR(vector_out_of_bounds));
642
643 iterator i_element_ = to_iterator(i_element);
644
645 etl::mem_move(i_element_ + 1, end(), i_element_);
646 --p_end;
647
648 return i_element_;
649 }
650
651 //*********************************************************************
659 //*********************************************************************
660 iterator erase(const_iterator first, const_iterator last)
661 {
662 ETL_ASSERT_CHECK_EXTRA(cbegin() <= first && first <= last && last <= cend(), ETL_ERROR(vector_out_of_bounds));
663
664 iterator first_ = to_iterator(first);
665 iterator last_ = to_iterator(last);
666
667 etl::mem_move(last_, end(), first_);
668 size_t n_delete = static_cast<size_t>(etl::distance(first, last));
669
670 // Just adjust the count.
671 p_end -= n_delete;
672
673 return first_;
674 }
675
676 //*************************************************************************
678 //*************************************************************************
680 {
681 if (&rhs != this)
682 {
683 this->initialise();
684 this->resize(rhs.size());
685 etl::mem_copy(rhs.data(), rhs.size(), this->data());
686 }
687
688 return *this;
689 }
690
691#if ETL_USING_CPP11
692 //*************************************************************************
694 //*************************************************************************
696 {
697 if (&rhs != this)
698 {
699 this->initialise();
700 this->resize(rhs.size());
701 etl::mem_copy(rhs.data(), rhs.size(), this->data());
702 rhs.initialise();
703 }
704
705 return *this;
706 }
707#endif
708
709 //*************************************************************************
712 //*************************************************************************
713 size_type size() const
714 {
715 return size_t(p_end - p_buffer);
716 }
717
718 //*************************************************************************
721 //*************************************************************************
722 bool empty() const
723 {
724 return (p_end == p_buffer);
725 }
726
727 //*************************************************************************
730 //*************************************************************************
731 bool full() const
732 {
733 return size() == CAPACITY;
734 }
735
736 //*************************************************************************
739 //*************************************************************************
740 size_t available() const
741 {
742 return max_size() - size();
743 }
744
745 protected:
746
747 //*********************************************************************
749 //*********************************************************************
750 pvoidvector(void** p_buffer_, size_t MAX_SIZE)
751 : vector_base(MAX_SIZE)
752 , p_buffer(p_buffer_)
753 , p_end(p_buffer_)
754 {
755 }
756
757 //*********************************************************************
759 //*********************************************************************
761 {
762 p_end = p_buffer;
763 }
764
765 //*************************************************************************
767 //*************************************************************************
768 void repair_buffer(void** p_buffer_)
769 {
770 uintptr_t length = static_cast<uintptr_t>(p_end - p_buffer);
771
772 p_buffer = p_buffer_;
773 p_end = p_buffer_ + length;
774 }
775
776 void** p_buffer;
777 void** p_end;
778
779 private:
780
781 //*************************************************************************
783 //*************************************************************************
784 iterator to_iterator(const_iterator itr) const
785 {
786 return const_cast<iterator>(itr);
787 }
788
789 // Disable copy construction.
790 pvoidvector(const pvoidvector&);
791 };
792
793 //***************************************************************************
799 //***************************************************************************
800 inline bool operator==(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
801 {
802 return (lhs.size() == rhs.size()) && etl::equal(lhs.begin(), lhs.end(), rhs.begin());
803 }
804
805 //***************************************************************************
811 //***************************************************************************
812 inline bool operator!=(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
813 {
814 return !(lhs == rhs);
815 }
816
817 //***************************************************************************
823 //***************************************************************************
824 inline bool operator<(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
825 {
826 return etl::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
827 }
828
829 //***************************************************************************
835 //***************************************************************************
836 inline bool operator>(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
837 {
838 return (rhs < lhs);
839 }
840
841 //***************************************************************************
848 //***************************************************************************
849 inline bool operator<=(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
850 {
851 return !(lhs > rhs);
852 }
853
854 //***************************************************************************
861 //***************************************************************************
862 inline bool operator>=(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
863 {
864 return !(lhs < rhs);
865 }
866} // namespace etl
867
868#include "minmax_pop.h"
869
870#undef ETL_IN_PVOIDVECTOR
871
872#endif
#define ETL_ASSERT(b, e)
Definition error_handler.h:511
bool full() const
Definition pvoidvector.h:731
iterator erase(const_iterator first, const_iterator last)
Definition pvoidvector.h:660
etl::enable_if<!etl::is_pointer< TIterator >::value, void >::type assign(TIterator first, TIterator last)
Definition pvoidvector.h:342
const_reference at(size_t i) const
Definition pvoidvector.h:269
iterator begin()
Definition pvoidvector.h:76
void emplace_back(value_type value)
Definition pvoidvector.h:425
iterator erase(iterator i_element)
Definition pvoidvector.h:623
pointer data()
Definition pvoidvector.h:319
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:232
void initialise()
Initialise the vector.
Definition pvoidvector.h:760
bool empty() const
Definition pvoidvector.h:722
etl::enable_if<!etl::is_pointer< TIterator >::value, void >::type insert(const_iterator position, TIterator first, TIterator last)
Definition pvoidvector.h:580
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:488
etl::pvoidvector & operator=(const etl::pvoidvector &rhs)
Assignment operator.
Definition pvoidvector.h:679
void insert(const_iterator position, size_t n, value_type value)
Definition pvoidvector.h:555
reverse_iterator rend()
Definition pvoidvector.h:148
iterator insert(const_iterator position, value_type value)
Definition pvoidvector.h:453
void clear()
Clears the vector.
Definition pvoidvector.h:401
void assign(size_t n, value_type value)
Definition pvoidvector.h:389
iterator emplace(const_iterator position, value_type value)
Definition pvoidvector.h:520
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:603
void pop_back()
Definition pvoidvector.h:436
const_reverse_iterator crend() const
Definition pvoidvector.h:175
const_reference front() const
Definition pvoidvector.h:289
void repair_buffer(void **p_buffer_)
Fix the internal pointers after a low level memory copy.
Definition pvoidvector.h:768
reference back()
Definition pvoidvector.h:299
iterator end()
Definition pvoidvector.h:94
void uninitialized_resize(size_t new_size)
Definition pvoidvector.h:220
const_pointer data() const
Definition pvoidvector.h:328
reference front()
Definition pvoidvector.h:279
pvoidvector(void **p_buffer_, size_t MAX_SIZE)
Constructor.
Definition pvoidvector.h:750
const_reference operator[](size_t i) const
Definition pvoidvector.h:243
void push_back(value_type value)
Definition pvoidvector.h:412
const_reference back() const
Definition pvoidvector.h:309
size_t available() const
Definition pvoidvector.h:740
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:713
iterator erase(const_iterator i_element)
Definition pvoidvector.h:639
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:367
reference at(size_t i)
Definition pvoidvector.h:256
void resize(size_t new_size, value_type value)
Definition pvoidvector.h:201
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:40
ETL_CONSTEXPR14 bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1081
T * mem_move(const T *sb, const T *se, T *db) ETL_NOEXCEPT
Definition memory.h:2877
bool operator>(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1133
bool operator>=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1147
ETL_CONSTEXPR14 bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1093
T * mem_copy(const T *sb, const T *se, T *db) ETL_NOEXCEPT
Definition memory.h:2835
bool operator<(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1106
bool operator<=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1120
iterator
Definition iterator.h:424