Embedded Template Library 1.0
Loading...
Searching...
No Matches
const_map.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) 2025 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_CONST_MAP_INCLUDED
32#define ETL_CONST_MAP_INCLUDED
33
34#include "platform.h"
35
36#if ETL_NOT_USING_CPP11
37 #error NOT SUPPORTED FOR C++03 OR BELOW
38#endif
39
40#include "algorithm.h"
41#include "functional.h"
42#include "nth_type.h"
43#include "span.h"
44#include "type_traits.h"
45
47
50
51namespace etl
52{
53 template <typename TKey, typename TMapped, typename TKeyCompare>
55 {
56 public:
57
58 using key_type = TKey;
59 using value_type = ETL_OR_STD::pair<const TKey, TMapped>;
60 using mapped_type = TMapped;
61 using key_compare = TKeyCompare;
62 using const_reference = const value_type&;
63 using const_pointer = const value_type*;
64 using const_iterator = const value_type*;
65 using size_type = size_t;
66
67 //*********************************************************************
69 //*********************************************************************
71 {
72 public:
73
74 // Compare two value types.
75 ETL_CONSTEXPR14 bool operator()(const value_type& element1, const value_type& element2) const ETL_NOEXCEPT
76 {
77 return kcompare(element1.first, element2.first);
78 }
79
80 // Compare value type and key.
81 ETL_CONSTEXPR14 bool operator()(const value_type& element, const key_type& key) const ETL_NOEXCEPT
82 {
83 return kcompare(element.first, key);
84 }
85
86 // Compare value types and key.
87 // Enabled for transparent comparators.
88 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
89 ETL_CONSTEXPR14 bool operator()(const value_type& element, const K& key) const ETL_NOEXCEPT
90 {
91 return kcompare(element.first, key);
92 }
93
94 // Compare key and value type.
95 ETL_CONSTEXPR14 bool operator()(const key_type& key, const value_type& element) const ETL_NOEXCEPT
96 {
97 return kcompare(key, element.first);
98 }
99
100 // Compare key and value type.
101 // Enabled for transparent comparators.
102 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
103 ETL_CONSTEXPR14 bool operator()(const K& key, const value_type& element) const ETL_NOEXCEPT
104 {
105 return kcompare(key, element.first);
106 }
107
108 key_compare kcompare;
109 };
110
111 //*************************************************************************
115 //*************************************************************************
116 ETL_CONSTEXPR14 bool is_valid() const ETL_NOEXCEPT
117 {
118 return etl::is_unique_sorted(begin(), end(), vcompare);
119 }
120
121 //*************************************************************************
123 //*************************************************************************
124 ETL_CONSTEXPR14 const_iterator begin() const ETL_NOEXCEPT
125 {
126 return element_list;
127 }
128
129 //*************************************************************************
131 //*************************************************************************
132 ETL_CONSTEXPR14 const_iterator cbegin() const ETL_NOEXCEPT
133 {
134 return element_list;
135 }
136
137 //*************************************************************************
139 //*************************************************************************
140 ETL_CONSTEXPR14 const_iterator end() const ETL_NOEXCEPT
141 {
142 return element_list_end;
143 }
144
145 //*************************************************************************
147 //*************************************************************************
148 ETL_CONSTEXPR14 const_iterator cend() const ETL_NOEXCEPT
149 {
150 return element_list_end;
151 }
152
153 //*************************************************************************
155 //*************************************************************************
156 ETL_CONSTEXPR14 const_pointer data() const ETL_NOEXCEPT
157 {
158 return element_list;
159 }
160
161 //*************************************************************************
167 //*************************************************************************
168 ETL_CONSTEXPR14 const mapped_type& operator[](const key_type& key) const ETL_NOEXCEPT
169 {
170 const_iterator itr = find(key);
171
172 return itr->second;
173 }
174
175 //*************************************************************************
182 //*************************************************************************
183 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
184 ETL_CONSTEXPR14 const mapped_type& operator[](const K& key) const ETL_NOEXCEPT
185 {
186 const_iterator itr = find(key);
187
188 return itr->second;
189 }
190
191 //*************************************************************************
197 //*************************************************************************
198 ETL_CONSTEXPR14 const mapped_type& at(const key_type& key) const ETL_NOEXCEPT
199 {
200 const_iterator itr = find(key);
201
202 return itr->second;
203 }
204
205 //*************************************************************************
212 //*************************************************************************
213 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
214 ETL_CONSTEXPR14 const mapped_type& at(const K& key) const ETL_NOEXCEPT
215 {
216 const_iterator itr = find(key);
217
218 return itr->second;
219 }
220
221 //*************************************************************************
226 //*************************************************************************
227 ETL_CONSTEXPR14 const_iterator find(const key_type& key) const ETL_NOEXCEPT
228 {
229 const_iterator itr = lower_bound(key);
230
231 if ((itr != end()) && (keys_are_equal(itr->first, key)))
232 {
233 return itr;
234 }
235
236 return end();
237 }
238
239 //*************************************************************************
245 //*************************************************************************
246 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
247 ETL_CONSTEXPR14 const_iterator find(const K& key) const ETL_NOEXCEPT
248 {
249 const_iterator itr = lower_bound(key);
250
251 if ((itr != end()) && (keys_are_equal(itr->first, key)))
252 {
253 return itr;
254 }
255
256 return end();
257 }
258
259 //*************************************************************************
263 //*************************************************************************
264 ETL_CONSTEXPR14 bool contains(const key_type& key) const ETL_NOEXCEPT
265 {
266 return find(key) != end();
267 }
268
269 //*************************************************************************
274 //*************************************************************************
275 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
276 ETL_CONSTEXPR14 bool contains(const K& key) const ETL_NOEXCEPT
277 {
278 return find(key) != end();
279 }
280
281 //*************************************************************************
285 //*************************************************************************
286 ETL_CONSTEXPR14 size_type count(const key_type& key) const ETL_NOEXCEPT
287 {
288 return contains(key) ? 1 : 0;
289 }
290
291 //*************************************************************************
296 //*************************************************************************
297 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
298 ETL_CONSTEXPR14 size_type count(const K& key) const ETL_NOEXCEPT
299 {
300 return contains(key) ? 1 : 0;
301 }
302
303 //*************************************************************************
310 //*************************************************************************
311 ETL_CONSTEXPR14 ETL_OR_STD::pair<const_iterator, const_iterator> equal_range(const key_type& key) const ETL_NOEXCEPT
312 {
313 return etl::equal_range(begin(), end(), key, vcompare);
314 }
315
316 //*************************************************************************
324 //*************************************************************************
325 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
326 ETL_CONSTEXPR14 ETL_OR_STD::pair<const_iterator, const_iterator> equal_range(const K& key) const ETL_NOEXCEPT
327 {
328 return etl::equal_range(begin(), end(), key, vcompare);
329 }
330
331 //*************************************************************************
338 //*************************************************************************
339 ETL_CONSTEXPR14 const_iterator lower_bound(const key_type& key) const ETL_NOEXCEPT
340 {
341 return etl::lower_bound(begin(), end(), key, vcompare);
342 }
343
344 //*************************************************************************
351 //*************************************************************************
352 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
353 ETL_CONSTEXPR14 const_iterator lower_bound(const K& key) const ETL_NOEXCEPT
354 {
355 return etl::lower_bound(begin(), end(), key, vcompare);
356 }
357
358 //*************************************************************************
365 //*************************************************************************
366 ETL_CONSTEXPR14 const_iterator upper_bound(const key_type& key) const ETL_NOEXCEPT
367 {
368 return etl::upper_bound(begin(), end(), key, vcompare);
369 }
370
371 //*************************************************************************
378 //*************************************************************************
379 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
380 ETL_CONSTEXPR14 const_iterator upper_bound(const K& key) const ETL_NOEXCEPT
381 {
382 return etl::upper_bound(begin(), end(), key, vcompare);
383 }
384
385 //*************************************************************************
388 //*************************************************************************
389 ETL_CONSTEXPR14 size_type empty() const ETL_NOEXCEPT
390 {
391 return size() == 0U;
392 }
393
394 //*************************************************************************
397 //*************************************************************************
398 ETL_CONSTEXPR14 size_type full() const ETL_NOEXCEPT
399 {
400 return (max_elements != 0) && (size() == max_elements);
401 }
402
403 //*************************************************************************
406 //*************************************************************************
407 ETL_CONSTEXPR14 size_type size() const ETL_NOEXCEPT
408 {
409 return size_type(element_list_end - element_list);
410 }
411
412 //*************************************************************************
415 //*************************************************************************
416 ETL_CONSTEXPR14 size_type max_size() const ETL_NOEXCEPT
417 {
418 return max_elements;
419 }
420
421 //*************************************************************************
425 //*************************************************************************
426 ETL_CONSTEXPR14 size_type capacity() const ETL_NOEXCEPT
427 {
428 return max_elements;
429 }
430
431 //*************************************************************************
434 //*************************************************************************
435 ETL_CONSTEXPR14 key_compare key_comp() const ETL_NOEXCEPT
436 {
437 return vcompare.kcompare;
438 }
439
440 //*************************************************************************
443 //*************************************************************************
444 ETL_CONSTEXPR14 value_compare value_comp() const ETL_NOEXCEPT
445 {
446 return vcompare;
447 }
448
449 protected:
450
451 //*************************************************************************
453 //*************************************************************************
454 template <typename... TElements>
455 ETL_CONSTEXPR14 explicit iconst_map(const value_type* element_list_, size_type size_, size_type max_elements_) ETL_NOEXCEPT
456 : element_list(element_list_)
457 , element_list_end{element_list_ + size_}
458 , max_elements(max_elements_)
459 {
460 }
461
462 private:
463
464 //*********************************************************************
466 //*********************************************************************
467 ETL_CONSTEXPR14 bool keys_are_equal(const key_type& key1, const key_type& key2) const ETL_NOEXCEPT
468 {
469 return !key_compare()(key1, key2) && !key_compare()(key2, key1);
470 }
471
472 //*********************************************************************
475 //*********************************************************************
476 template <typename K1, typename K2, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
477 ETL_CONSTEXPR14 bool keys_are_equal(const K1& key1, const K2& key2) const ETL_NOEXCEPT
478 {
479 return !key_compare()(key1, key2) && !key_compare()(key2, key1);
480 }
481
482 value_compare vcompare;
483
484 const value_type* element_list;
485 const value_type* element_list_end;
486 size_type max_elements;
487 };
488
489 //*********************************************************************
491 //*********************************************************************
492 template <typename TKey, typename TMapped, size_t Size, typename TKeyCompare = etl::less<TKey>>
493 class const_map : public iconst_map<TKey, TMapped, TKeyCompare>
494 {
495 public:
496
498
499 using key_type = typename base_t::key_type;
500 using value_type = typename base_t::value_type;
501 using mapped_type = typename base_t::mapped_type;
502 using key_compare = typename base_t::key_compare;
503 using const_reference = typename base_t::const_reference;
504 using const_pointer = typename base_t::const_pointer;
505 using const_iterator = typename base_t::const_iterator;
506 using size_type = typename base_t::size_type;
507
508 static_assert((etl::is_default_constructible<key_type>::value), "key_type must be default constructible");
509 static_assert((etl::is_default_constructible<mapped_type>::value), "mapped_type must be default constructible");
510
511 //*************************************************************************
516 //*************************************************************************
517 template <typename... TElements>
518 ETL_CONSTEXPR14 explicit const_map(TElements&&... elements) ETL_NOEXCEPT
519 : iconst_map<TKey, TMapped, TKeyCompare>(element_list, sizeof...(elements), Size)
520 , element_list{etl::forward<TElements>(elements)...}
521 {
522 static_assert((etl::are_all_same<value_type, etl::decay_t<TElements>...>::value), "All elements must be value_type");
523 static_assert(sizeof...(elements) <= Size, "Number of elements exceeds capacity");
524 }
525
526 private:
527
528 value_type element_list[Size];
529 };
530
531 //*************************************************************************
533 //*************************************************************************
534#if ETL_USING_CPP17
535 template <typename... TElements>
536 const_map(TElements...)
537 -> const_map<typename etl::nth_type_t<0, TElements...>::first_type, typename etl::nth_type_t<0, TElements...>::second_type, sizeof...(TElements)>;
538#endif
539
540 //*********************************************************************
542 //*********************************************************************
543 template <typename TKey, typename TMapped, typename TKeyCompare = etl::less<TKey>>
544 class const_map_ext : public iconst_map<TKey, TMapped, TKeyCompare>
545 {
546 public:
547
549
550 using key_type = typename base_t::key_type;
551 using value_type = typename base_t::value_type;
552 using mapped_type = typename base_t::mapped_type;
553 using key_compare = typename base_t::key_compare;
554 using const_reference = typename base_t::const_reference;
555 using const_pointer = typename base_t::const_pointer;
556 using const_iterator = typename base_t::const_iterator;
557 using size_type = typename base_t::size_type;
558
559 static_assert((etl::is_default_constructible<key_type>::value), "key_type must be default constructible");
560 static_assert((etl::is_default_constructible<mapped_type>::value), "mapped_type must be default constructible");
561
562 //*************************************************************************
564 //*************************************************************************
565 ETL_CONSTEXPR14 const_map_ext() ETL_NOEXCEPT
566 : iconst_map<TKey, TMapped, TKeyCompare>(nullptr, 0, 0)
567 {
568 }
569
570 //*************************************************************************
572 //*************************************************************************
573 template <size_type Size>
574 ETL_CONSTEXPR14 explicit const_map_ext(const etl::span<const value_type, Size>& sp) ETL_NOEXCEPT
575 : iconst_map<TKey, TMapped, TKeyCompare>(sp.data(), Size, Size)
576 {
577 }
578
579 //*************************************************************************
581 //*************************************************************************
582 template <size_type Size>
583 ETL_CONSTEXPR14 explicit const_map_ext(const value_type (&begin_)[Size]) ETL_NOEXCEPT
584 : iconst_map<TKey, TMapped, TKeyCompare>(begin_, Size, Size)
585 {
586 }
587 };
588
589 //*************************************************************************
591 //*************************************************************************
592#if ETL_USING_CPP17
593 template <typename TElements, size_t Size>
594 const_map_ext(const etl::span<TElements, Size>&) -> const_map_ext<typename TElements::first_type, typename TElements::second_type>;
595
596 template <typename TElements, size_t Size>
597 const_map_ext(const TElements (&)[Size]) -> const_map_ext<typename TElements::first_type, typename TElements::second_type>;
598#endif
599
600 //*************************************************************************
602 //*************************************************************************
603 template <typename TKey, typename TMapped, typename TKeyCompare>
605 ETL_NOEXCEPT
606 {
607 return (lhs.size() == rhs.size()) && etl::equal(lhs.begin(), lhs.end(), rhs.begin());
608 }
609
610 //*************************************************************************
612 //*************************************************************************
613 template <typename TKey, typename TMapped, typename TKeyCompare>
615 ETL_NOEXCEPT
616 {
617 return !(lhs == rhs);
618 }
619
620 //*************************************************************************
622 //*************************************************************************
623 template <typename TKey, typename TMapped, typename TKeyCompare>
625 ETL_NOEXCEPT
626 {
627 return etl::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end(), lhs.value_comp());
628 }
629
630 //*************************************************************************
632 //*************************************************************************
633 template <typename TKey, typename TMapped, typename TKeyCompare>
635 ETL_NOEXCEPT
636 {
637 return (rhs < lhs);
638 }
639
640 //*************************************************************************
642 //*************************************************************************
643 template <typename TKey, typename TMapped, typename TKeyCompare>
645 ETL_NOEXCEPT
646 {
647 return !(rhs < lhs);
648 }
649
650 //*************************************************************************
652 //*************************************************************************
653 template <typename TKey, typename TMapped, typename TKeyCompare>
655 ETL_NOEXCEPT
656 {
657 return !(lhs < rhs);
658 }
659} // namespace etl
660
661#endif
ETL_CONSTEXPR14 const_map_ext(const value_type(&begin_)[Size]) ETL_NOEXCEPT
Construct a const_map from an array.
Definition const_map.h:583
ETL_CONSTEXPR14 const_map_ext() ETL_NOEXCEPT
Default construct a const_map.
Definition const_map.h:565
ETL_CONSTEXPR14 const_map_ext(const etl::span< const value_type, Size > &sp) ETL_NOEXCEPT
Construct a const_map from a variadic list of elements.
Definition const_map.h:574
Map type designed for constexpr.
Definition const_map.h:494
ETL_CONSTEXPR14 const_map(TElements &&... elements) ETL_NOEXCEPT
Construct a const_map from a variadic list of elements. Static asserts if the elements are not of typ...
Definition const_map.h:518
How to compare elements and keys.
Definition const_map.h:71
Definition const_map.h:55
ETL_CONSTEXPR14 const mapped_type & operator[](const K &key) const ETL_NOEXCEPT
Key index operator. Enabled for transparent comparators.
Definition const_map.h:184
ETL_CONSTEXPR14 size_type full() const ETL_NOEXCEPT
Definition const_map.h:398
ETL_CONSTEXPR14 key_compare key_comp() const ETL_NOEXCEPT
Definition const_map.h:435
ETL_CONSTEXPR14 size_type count(const key_type &key) const ETL_NOEXCEPT
Counts the numbeer elements with key.
Definition const_map.h:286
ETL_CONSTEXPR14 const_iterator upper_bound(const key_type &key) const ETL_NOEXCEPT
Returns a const_iterator to the first element that is greater than the key. Returns a const_iterator ...
Definition const_map.h:366
ETL_CONSTEXPR14 size_type empty() const ETL_NOEXCEPT
Definition const_map.h:389
ETL_CONSTEXPR14 ETL_OR_STD::pair< const_iterator, const_iterator > equal_range(const key_type &key) const ETL_NOEXCEPT
Returns a range containing all elements with the key. The range is defined by a pair of two iterators...
Definition const_map.h:311
ETL_CONSTEXPR14 const_iterator end() const ETL_NOEXCEPT
Returns a const_iterator to the end of the map.
Definition const_map.h:140
ETL_CONSTEXPR14 const_iterator upper_bound(const K &key) const ETL_NOEXCEPT
Returns a const_iterator to the first element that is greater than the key. Returns a const_iterator ...
Definition const_map.h:380
ETL_CONSTEXPR14 const mapped_type & operator[](const key_type &key) const ETL_NOEXCEPT
Index operator.
Definition const_map.h:168
ETL_CONSTEXPR14 const_iterator lower_bound(const K &key) const ETL_NOEXCEPT
Returns a const_iterator to the first element that is not less than the key. Returns a const_iterator...
Definition const_map.h:353
ETL_CONSTEXPR14 size_type max_size() const ETL_NOEXCEPT
Definition const_map.h:416
ETL_CONSTEXPR14 bool is_valid() const ETL_NOEXCEPT
Definition const_map.h:116
ETL_CONSTEXPR14 size_type size() const ETL_NOEXCEPT
Definition const_map.h:407
ETL_CONSTEXPR14 const_iterator find(const key_type &key) const ETL_NOEXCEPT
Gets a const_iterator to the mapped value at the key index.
Definition const_map.h:227
ETL_CONSTEXPR14 bool contains(const K &key) const ETL_NOEXCEPT
Checks if the map contains an element with key. Enabled if the comparator is transparent.
Definition const_map.h:276
ETL_CONSTEXPR14 iconst_map(const value_type *element_list_, size_type size_, size_type max_elements_) ETL_NOEXCEPT
Constructor.
Definition const_map.h:455
ETL_CONSTEXPR14 const_iterator cbegin() const ETL_NOEXCEPT
Returns a const_iterator to the beginning of the map.
Definition const_map.h:132
ETL_CONSTEXPR14 const_iterator cend() const ETL_NOEXCEPT
Returns a const_iterator to the end of the map.
Definition const_map.h:148
ETL_CONSTEXPR14 value_compare value_comp() const ETL_NOEXCEPT
Definition const_map.h:444
ETL_CONSTEXPR14 ETL_OR_STD::pair< const_iterator, const_iterator > equal_range(const K &key) const ETL_NOEXCEPT
Returns a range containing all elements with the key. The range is defined by a pair of two iterators...
Definition const_map.h:326
ETL_CONSTEXPR14 bool contains(const key_type &key) const ETL_NOEXCEPT
Checks if the map contains an element with key.
Definition const_map.h:264
ETL_CONSTEXPR14 const_iterator lower_bound(const key_type &key) const ETL_NOEXCEPT
Returns a const_iterator to the first element that is not less than the key. Returns a const_iterator...
Definition const_map.h:339
ETL_CONSTEXPR14 const_pointer data() const ETL_NOEXCEPT
Returns a const_pointer to the beginning of the map.
Definition const_map.h:156
ETL_CONSTEXPR14 const_iterator find(const K &key) const ETL_NOEXCEPT
Gets a const_iterator to the mapped value at the key index. Enabled if the comparator is transparent.
Definition const_map.h:247
ETL_CONSTEXPR14 size_type count(const K &key) const ETL_NOEXCEPT
Counts the numbeer elements with key. Enabled if the comparator is transparent.
Definition const_map.h:298
ETL_CONSTEXPR14 const mapped_type & at(const key_type &key) const ETL_NOEXCEPT
Gets the mapped value at the key index.
Definition const_map.h:198
ETL_CONSTEXPR14 const_iterator begin() const ETL_NOEXCEPT
Returns a const_iterator to the beginning of the map.
Definition const_map.h:124
ETL_CONSTEXPR14 size_type capacity() const ETL_NOEXCEPT
Definition const_map.h:426
ETL_CONSTEXPR14 const mapped_type & at(const K &key) const ETL_NOEXCEPT
Gets the mapped value at the key index. Enabled if the comparator is transparent.
Definition const_map.h:214
Span - Fixed Extent.
Definition span.h:208
ETL_NODISCARD ETL_CONSTEXPR14 bool is_unique_sorted(TIterator begin, TIterator end)
Definition algorithm.h:1718
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
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
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