31 #ifndef ETL_REFERENCE_FLAT_MAP_INCLUDED
32 #define ETL_REFERENCE_FLAT_MAP_INCLUDED
43 #include "static_assert.h"
67 flat_map_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
68 :
exception(reason_, file_name_, line_number_)
81 flat_map_full(string_type file_name_, numeric_type line_number_)
82 :
flat_map_exception(ETL_ERROR_TEXT(
"flat_map: full", ETL_FILE
"A"), file_name_, line_number_)
96 :
flat_map_exception(ETL_ERROR_TEXT(
"flat_map:bounds", ETL_FILE
"B"), file_name_, line_number_)
106 template <
typename TKey,
typename TMapped,
typename TKeyCompare = etl::less<TKey> >
111 typedef ETL_OR_STD::pair<const TKey, TMapped> value_type;
119 typedef TKey key_type;
120 typedef TMapped mapped_type;
121 typedef TKeyCompare key_compare;
122 typedef value_type& reference;
123 typedef const value_type& const_reference;
124 typedef value_type* pointer;
125 typedef const value_type* const_pointer;
126 typedef size_t size_type;
140 iterator(
typename lookup_t::iterator ilookup_)
146 : ilookup(other.ilookup)
152 ilookup = other.ilookup;
182 reference operator *()
187 const_reference operator *()
const
199 return &(*(*ilookup));
202 pointer operator ->()
207 const_pointer operator ->()
const
214 return lhs.ilookup == rhs.ilookup;
219 return !(lhs == rhs);
224 typename lookup_t::iterator ilookup;
244 : ilookup(other.ilookup)
249 : ilookup(other.ilookup)
255 ilookup = other.ilookup;
261 ilookup = other.ilookup;
291 const_reference operator *()
const
301 const_pointer operator ->()
const
308 return lhs.ilookup == rhs.ilookup;
313 return !(lhs == rhs);
318 typename lookup_t::const_iterator ilookup;
321 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
322 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
323 typedef typename etl::iterator_traits<iterator>::difference_type difference_type;
338 bool operator ()(
const value_type& element, key_type key)
const
340 return comp(element.first, key);
343 bool operator ()(key_type key,
const value_type& element)
const
345 return comp(key, element.first);
413 return reverse_iterator(lookup.
rbegin());
422 return reverse_iterator(lookup.
rbegin());
431 return reverse_iterator(lookup.
rend());
438 const_reverse_iterator
rend()
const
440 return const_reverse_iterator(lookup.
rend());
449 return const_reverse_iterator(lookup.
crbegin());
456 const_reverse_iterator
crend()
const
458 return const_reverse_iterator(lookup.
crend());
472 return i_element->second;
486 return i_element->second;
495 mapped_type&
at(key_parameter_t key)
501 return i_element->second;
510 const mapped_type&
at(key_parameter_t key)
const
516 return i_element->second;
526 template <
typename TIterator>
527 void assign(TIterator first, TIterator last)
529 ETL_STATIC_ASSERT((
etl::is_same<value_type,
typename etl::iterator_traits<TIterator>::value_type>::value),
"Incompatible data for assign");
531 #if defined(ETL_DEBUG)
532 difference_type d = etl::distance(first, last);
538 while (first != last)
549 ETL_OR_STD::pair<iterator, bool>
insert(reference value)
564 return insert(value).first;
574 template <
class TIterator>
575 void insert(TIterator first, TIterator last)
577 while (first != last)
592 if (i_element ==
end())
598 lookup.
erase(i_element.ilookup);
609 lookup.
erase(i_element.ilookup);
621 lookup.
erase(first.ilookup, last.ilookup);
685 size_t count(key_parameter_t key)
const
687 return (
find(key) ==
end()) ? 0U : 1U;
735 ETL_OR_STD::pair<iterator, iterator>
equal_range(key_parameter_t key)
739 return ETL_OR_STD::make_pair(i_lower, etl::upper_bound(i_lower,
end(), key,
compare));
747 ETL_OR_STD::pair<const_iterator, const_iterator>
equal_range(key_parameter_t key)
const
751 return ETL_OR_STD::make_pair(i_lower, etl::upper_bound(i_lower,
cend(), key,
compare));
760 return lookup.
size();
769 return lookup.
empty();
778 return lookup.
full();
825 ETL_OR_STD::pair<iterator, bool> result(
end(),
false);
827 if (i_element ==
end())
833 result.first = --
end();
834 result.second =
true;
839 result.first = i_element;
846 lookup.
insert(i_element.ilookup, &value);
847 result.second =
true;
859 return !key_compare()(key1, key2) && !key_compare()(key2, key1);
875 #if defined(ETL_POLYMORPHIC_REFERENCE_FLAT_MAP) || defined(ETL_POLYMORPHIC_CONTAINERS)
895 template <
typename TKey,
typename TMapped,
typename TKeyCompare>
908 template <
typename TKey,
typename TMapped,
typename TKeyCompare>
911 return !(lhs == rhs);
922 template <
typename TKey,
typename TValue, const
size_t MAX_SIZE_,
typename TCompare = etl::less<TKey> >
927 static const size_t MAX_SIZE = MAX_SIZE_;
943 template <
typename TIterator>
975 typedef typename ireference_flat_map<TKey, TValue, TCompare>::value_type node_t;
Definition: reference_flat_map.h:229
Definition: reference_flat_map.h:130
bitset< MAXN > operator&(const bitset< MAXN > &lhs, const bitset< MAXN > &rhs)
Definition: bitset.h:1157
#define ETL_ASSERT(b, e)
Definition: error_handler.h:290
exception(string_type reason_, string_type file_, numeric_type line_)
Constructor.
Definition: exception.h:67
Definition: exception.h:47
T * addressof(T &t)
Definition: memory.h:61
ETL_OR_STD::pair< const_iterator, const_iterator > equal_range(key_parameter_t key) const
Definition: reference_flat_map.h:747
iterator begin()
Definition: reference_flat_map.h:357
void clear()
Clears the reference_flat_map.
Definition: reference_flat_map.h:627
const_reverse_iterator rbegin() const
Definition: reference_flat_map.h:420
~ireference_flat_map()
Destructor.
Definition: reference_flat_map.h:882
const_iterator lower_bound(key_parameter_t key) const
Definition: reference_flat_map.h:705
const_reverse_iterator crbegin() const
Definition: reference_flat_map.h:447
reverse_iterator rend()
Definition: reference_flat_map.h:429
reference_flat_map()
Constructor.
Definition: reference_flat_map.h:932
ETL_OR_STD::pair< iterator, iterator > equal_range(key_parameter_t key)
Definition: reference_flat_map.h:735
size_t count(key_parameter_t key) const
Definition: reference_flat_map.h:685
iterator insert(iterator position, reference value)
Definition: reference_flat_map.h:562
iterator end()
Definition: reference_flat_map.h:375
const mapped_type & at(key_parameter_t key) const
Definition: reference_flat_map.h:510
const_iterator cbegin() const
Definition: reference_flat_map.h:393
size_t available() const
Definition: reference_flat_map.h:803
ireference_flat_map(lookup_t &lookup_)
Constructor.
Definition: reference_flat_map.h:813
const_reverse_iterator crend() const
Definition: reference_flat_map.h:456
reference_flat_map & operator=(const reference_flat_map &rhs)
Assignment operator.
Definition: reference_flat_map.h:961
reference_flat_map(TIterator first, TIterator last)
Definition: reference_flat_map.h:944
size_type max_size() const
Definition: reference_flat_map.h:794
~reference_flat_map()
Destructor.
Definition: reference_flat_map.h:953
bool empty() const
Definition: reference_flat_map.h:767
ETL_OR_STD::pair< iterator, bool > insert(reference value)
Definition: reference_flat_map.h:549
const_iterator upper_bound(key_parameter_t key) const
Definition: reference_flat_map.h:725
const_iterator begin() const
Definition: reference_flat_map.h:366
iterator lower_bound(key_parameter_t key)
Definition: reference_flat_map.h:695
reverse_iterator rbegin()
Definition: reference_flat_map.h:411
iterator upper_bound(key_parameter_t key)
Definition: reference_flat_map.h:715
const_reverse_iterator rend() const
Definition: reference_flat_map.h:438
size_type size() const
Definition: reference_flat_map.h:758
iterator find(key_parameter_t key)
Definition: reference_flat_map.h:637
const_iterator cend() const
Definition: reference_flat_map.h:402
const_iterator find(key_parameter_t key) const
Definition: reference_flat_map.h:661
mapped_type & at(key_parameter_t key)
Definition: reference_flat_map.h:495
bool keys_are_equal(key_parameter_t key1, key_parameter_t key2) const
Check to see if the keys are equal.
Definition: reference_flat_map.h:857
size_t erase(key_parameter_t key)
Definition: reference_flat_map.h:588
void erase(iterator i_element)
Definition: reference_flat_map.h:607
bool full() const
Definition: reference_flat_map.h:776
mapped_type & operator[](key_parameter_t key)
Definition: reference_flat_map.h:466
ETL_OR_STD::pair< iterator, bool > insert_at(iterator i_element, value_type &value)
Definition: reference_flat_map.h:823
void assign(TIterator first, TIterator last)
Definition: reference_flat_map.h:527
size_type capacity() const
Definition: reference_flat_map.h:785
void erase(iterator first, iterator last)
Definition: reference_flat_map.h:619
const_iterator end() const
Definition: reference_flat_map.h:384
void insert(TIterator first, TIterator last)
Definition: reference_flat_map.h:575
Definition: reference_flat_map.h:64
Definition: reference_flat_map.h:78
Definition: reference_flat_map.h:92
Definition: reference_flat_map.h:108
Definition: reference_flat_map.h:924
bool operator==(const etl::ireference_flat_map< TKey, TMapped, TKeyCompare > &lhs, const etl::ireference_flat_map< TKey, TMapped, TKeyCompare > &rhs)
Definition: reference_flat_map.h:896
bool operator!=(const etl::ireference_flat_map< TKey, TMapped, TKeyCompare > &lhs, const etl::ireference_flat_map< TKey, TMapped, TKeyCompare > &rhs)
Definition: reference_flat_map.h:909
is_same
Definition: type_traits_generator.h:981
iterator begin()
Definition: vector.h:108
size_type max_size() const
Definition: vector_base.h:143
void push_back(const_reference value)
Definition: vector.h:408
const_reverse_iterator crbegin() const
Definition: vector.h:198
reverse_iterator rend()
Definition: vector.h:180
size_type capacity() const
Definition: vector_base.h:134
iterator insert(iterator position, const_reference value)
Definition: vector.h:531
const_iterator cend() const
Definition: vector.h:153
void clear()
Clears the vector.
Definition: vector.h:398
iterator end()
Definition: vector.h:126
const_reverse_iterator crend() const
Definition: vector.h:207
const_iterator cbegin() const
Definition: vector.h:144
bool full() const
Definition: vector.h:914
size_type size() const
Definition: vector.h:896
iterator erase(iterator i_element)
Definition: vector.h:820
bool empty() const
Definition: vector.h:905
size_t available() const
Definition: vector.h:923
reverse_iterator rbegin()
Definition: vector.h:162
Definition: absolute.h:37
bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:594
bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:582
iterator
Definition: iterator.h:422
etl::conditional< etl::is_fundamental< T >::value||etl::is_pointer< T >::value, T, const T & >::type type
By default fundamental and pointer types are passed by value.
Definition: parameter_type.h:48