31#ifndef ETL_CONST_MAP_INCLUDED
32#define ETL_CONST_MAP_INCLUDED
36#if ETL_NOT_USING_CPP11
37 #error NOT SUPPORTED FOR C++03 OR BELOW
53 template <
typename TKey,
typename TMapped,
typename TKeyCompare>
58 using key_type =
TKey;
59 using value_type = ETL_OR_STD::pair<const TKey, TMapped>;
62 using const_reference =
const value_type&;
63 using const_pointer =
const value_type*;
64 using const_iterator =
const value_type*;
75 ETL_CONSTEXPR14
bool operator ()(
const value_type&
element1,
const value_type&
element2)
const ETL_NOEXCEPT
81 ETL_CONSTEXPR14
bool operator ()(
const value_type& element,
const key_type& key)
const ETL_NOEXCEPT
83 return kcompare(element.first, key);
89 ETL_CONSTEXPR14
bool operator ()(
const value_type& element,
const K& key)
const ETL_NOEXCEPT
91 return kcompare(element.first, key);
95 ETL_CONSTEXPR14
bool operator ()(
const key_type& key,
const value_type& element)
const ETL_NOEXCEPT
97 return kcompare(key, element.first);
103 ETL_CONSTEXPR14
bool operator ()(
const K& key,
const value_type& element)
const ETL_NOEXCEPT
105 return kcompare(key, element.first);
108 key_compare kcompare;
140 ETL_CONSTEXPR14 const_iterator
end()
const ETL_NOEXCEPT
142 return element_list_end;
148 ETL_CONSTEXPR14 const_iterator
cend()
const ETL_NOEXCEPT
150 return element_list_end;
167 ETL_CONSTEXPR14
const mapped_type&
operator[](
const key_type& key)
const ETL_NOEXCEPT
169 const_iterator itr =
find(key);
182 ETL_CONSTEXPR14
const mapped_type&
operator[](
const K& key)
const ETL_NOEXCEPT
184 const_iterator itr =
find(key);
195 ETL_CONSTEXPR14
const mapped_type&
at(
const key_type& key)
const ETL_NOEXCEPT
197 const_iterator itr =
find(key);
210 ETL_CONSTEXPR14
const mapped_type&
at(
const K& key)
const ETL_NOEXCEPT
212 const_iterator itr =
find(key);
223 ETL_CONSTEXPR14 const_iterator
find(
const key_type& key)
const ETL_NOEXCEPT
227 if ((itr !=
end()) && (keys_are_equal(itr->first, key)))
243 ETL_CONSTEXPR14 const_iterator
find(
const K& key)
const ETL_NOEXCEPT
247 if ((itr !=
end()) && (keys_are_equal(itr->first, key)))
260 ETL_CONSTEXPR14
bool contains(
const key_type& key)
const ETL_NOEXCEPT
272 ETL_CONSTEXPR14
bool contains(
const K& key)
const ETL_NOEXCEPT
282 ETL_CONSTEXPR14 size_type
count(
const key_type& key)
const ETL_NOEXCEPT
294 ETL_CONSTEXPR14 size_type
count(
const K& key)
const ETL_NOEXCEPT
307 ETL_CONSTEXPR14 ETL_OR_STD::pair<const_iterator, const_iterator>
equal_range(
const key_type& key)
const ETL_NOEXCEPT
309 return etl::equal_range(
begin(),
end(), key, vcompare);
322 ETL_CONSTEXPR14 ETL_OR_STD::pair<const_iterator, const_iterator>
equal_range(
const K& key)
const ETL_NOEXCEPT
324 return etl::equal_range(
begin(),
end(), key, vcompare);
333 ETL_CONSTEXPR14 const_iterator
lower_bound(
const key_type& key)
const ETL_NOEXCEPT
335 return etl::lower_bound(
begin(),
end(), key, vcompare);
346 ETL_CONSTEXPR14 const_iterator
lower_bound(
const K& key)
const ETL_NOEXCEPT
348 return etl::lower_bound(
begin(),
end(), key, vcompare);
357 ETL_CONSTEXPR14 const_iterator
upper_bound(
const key_type& key)
const ETL_NOEXCEPT
359 return etl::upper_bound(
begin(),
end(), key, vcompare);
370 ETL_CONSTEXPR14 const_iterator
upper_bound(
const K& key)
const ETL_NOEXCEPT
372 return etl::upper_bound(
begin(),
end(), key, vcompare);
390 return (max_elements != 0) && (
size() == max_elements);
399 return size_type(element_list_end - element_list);
427 return vcompare.kcompare;
457 ETL_CONSTEXPR14
bool keys_are_equal(
const key_type&
key1,
const key_type&
key2)
const ETL_NOEXCEPT
467 ETL_CONSTEXPR14
bool keys_are_equal(
const K1&
key1,
const K2&
key2)
const ETL_NOEXCEPT
472 value_compare vcompare;
474 const value_type* element_list;
475 const value_type* element_list_end;
476 size_type max_elements;
482 template <
typename TKey,
typename TMapped,
size_t Size,
typename TKeyCompare = etl::less<TKey>>
489 using key_type =
typename base_t::key_type;
490 using value_type =
typename base_t::value_type;
491 using mapped_type =
typename base_t::mapped_type ;
492 using key_compare =
typename base_t::key_compare;
493 using const_reference =
typename base_t::const_reference;
494 using const_pointer =
typename base_t::const_pointer;
495 using const_iterator =
typename base_t::const_iterator;
496 using size_type =
typename base_t::size_type;
512 static_assert(
sizeof...(elements) <= Size,
"Number of elements exceeds capacity");
517 value_type element_list[Size];
527 sizeof...(TElements)>;
533 template <
typename TKey,
typename TMapped,
typename TKeyCompare = etl::less<TKey>>
540 using key_type =
typename base_t::key_type;
541 using value_type =
typename base_t::value_type;
542 using mapped_type =
typename base_t::mapped_type ;
543 using key_compare =
typename base_t::key_compare;
544 using const_reference =
typename base_t::const_reference;
545 using const_pointer =
typename base_t::const_pointer;
546 using const_iterator =
typename base_t::const_iterator;
547 using size_type =
typename base_t::size_type;
563 template <
size_type Size>
572 template <
size_type Size>
583 template <
typename TElements,
size_t N>
586 template <
typename TElements,
size_t N>
593 template <
typename TKey,
typename TMapped,
typename TKeyCompare>
597 return (
lhs.size() ==
rhs.size()) && etl::equal(
lhs.begin(),
lhs.end(),
rhs.begin());
603 template <
typename TKey,
typename TMapped,
typename TKeyCompare>
613 template <
typename TKey,
typename TMapped,
typename TKeyCompare>
617 return etl::lexicographical_compare(
lhs.begin(),
lhs.end(),
625 template <
typename TKey,
typename TMapped,
typename TKeyCompare>
635 template <
typename TKey,
typename TMapped,
typename TKeyCompare>
645 template <
typename TKey,
typename TMapped,
typename TKeyCompare>
Template deduction guides.
Definition const_map.h:535
ETL_CONSTEXPR14 const_map_ext(const value_type(&begin_)[Size]) ETL_NOEXCEPT
Construct a const_map from an array.
Definition const_map.h:573
ETL_CONSTEXPR14 const_map_ext() ETL_NOEXCEPT
Default construct a const_map.
Definition const_map.h:555
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:564
Map type designed for constexpr.
Definition const_map.h:484
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:507
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:182
ETL_CONSTEXPR14 size_type full() const ETL_NOEXCEPT
Definition const_map.h:388
ETL_CONSTEXPR14 key_compare key_comp() const ETL_NOEXCEPT
Definition const_map.h:425
ETL_CONSTEXPR14 size_type count(const key_type &key) const ETL_NOEXCEPT
Counts the numbeer elements with key.
Definition const_map.h:282
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:357
ETL_CONSTEXPR14 size_type empty() const ETL_NOEXCEPT
Definition const_map.h:379
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:307
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:370
ETL_CONSTEXPR14 const mapped_type & operator[](const key_type &key) const ETL_NOEXCEPT
Index operator.
Definition const_map.h:167
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:346
ETL_CONSTEXPR14 size_type max_size() const ETL_NOEXCEPT
Definition const_map.h:406
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:397
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:223
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:272
ETL_CONSTEXPR14 iconst_map(const value_type *element_list_, size_type size_, size_type max_elements_) ETL_NOEXCEPT
Constructor.
Definition const_map.h:445
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:434
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:322
ETL_CONSTEXPR14 bool contains(const key_type &key) const ETL_NOEXCEPT
Checks if the map contains an element with key.
Definition const_map.h:260
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:333
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:243
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:294
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:195
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:416
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:210
Span - Fixed Extent.
Definition span.h:110
ETL_NODISCARD ETL_CONSTEXPR14 bool is_unique_sorted(TIterator begin, TIterator end)
Definition algorithm.h:1794
bitset_ext
Definition absolute.h:38
bool operator>(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1148
bool operator>=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1160
bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1109
bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1097
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_even_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:314
bool operator<(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1121
bool operator<=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1136
Definition type_traits_generator.h:2226