31 #ifndef ETL_REFERENCE_FLAT_MULTIMAP_BASE_INCLUDED
32 #define ETL_REFERENCE_FLAT_MULTIMAP_BASE_INCLUDED
57 :
exception(reason_, file_name_, line_number_)
81 template <
typename TKey,
typename TMapped,
typename TKeyCompare = etl::less<TKey> >
86 typedef ETL_OR_STD::pair<const TKey, TMapped> value_type;
94 typedef TKey key_type;
95 typedef TMapped mapped_type;
96 typedef TKeyCompare key_compare;
97 typedef value_type& reference;
98 typedef const value_type& const_reference;
99 typedef value_type* pointer;
100 typedef const value_type* const_pointer;
101 typedef size_t size_type;
115 iterator(
typename lookup_t::iterator ilookup_)
121 : ilookup(other.ilookup)
127 ilookup = other.ilookup;
157 reference operator *()
162 const_reference operator *()
const
174 return &(*(*ilookup));
177 pointer operator ->()
182 const_pointer operator ->()
const
189 return lhs.ilookup == rhs.ilookup;
194 return !(lhs == rhs);
199 typename lookup_t::iterator ilookup;
219 : ilookup(other.ilookup)
224 : ilookup(other.ilookup)
230 ilookup = other.ilookup;
236 ilookup = other.ilookup;
266 const_reference operator *()
const
276 const_pointer operator ->()
const
283 return lhs.ilookup == rhs.ilookup;
288 return !(lhs == rhs);
293 typename lookup_t::const_iterator ilookup;
296 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
297 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
298 typedef typename etl::iterator_traits<iterator>::difference_type difference_type;
313 bool operator ()(
const value_type& element, key_type key)
const
315 return comp(element.first, key);
318 bool operator ()(key_type key,
const value_type& element)
const
320 return comp(key, element.first);
388 return reverse_iterator(lookup.
rbegin());
397 return const_reverse_iterator(lookup.
rbegin());
406 return reverse_iterator(lookup.
rend());
413 const_reverse_iterator
rend()
const
415 return const_reverse_iterator(lookup.
rend());
424 return const_reverse_iterator(lookup.
crbegin());
431 const_reverse_iterator
crend()
const
433 return const_reverse_iterator(lookup.
crend());
443 template <
typename TIterator>
444 void assign(TIterator first, TIterator last)
446 #if defined(ETL_DEBUG)
447 difference_type d = etl::distance(first, last);
453 while (first != last)
464 ETL_OR_STD::pair<iterator, bool>
insert(value_type& value)
468 ETL_OR_STD::pair<iterator, bool> result(
end(),
false);
483 return insert(value).first;
493 template <
class TIterator>
494 void insert(TIterator first, TIterator last)
496 while (first != last)
509 ETL_OR_STD::pair<iterator, iterator> range =
equal_range(key);
511 if (range.first ==
end())
517 size_t d = etl::distance(range.first, range.second);
518 erase(range.first, range.second);
529 lookup.
erase(i_element.ilookup);
541 lookup.
erase(first.ilookup, last.ilookup);
563 if (!key_compare()(itr->first, key) && !key_compare()(key, itr->first))
587 if (!key_compare()(itr->first, key) && !key_compare()(key, itr->first))
605 size_t count(key_parameter_t key)
const
607 ETL_OR_STD::pair<const_iterator, const_iterator> range =
equal_range(key);
609 return etl::distance(range.first, range.second);
657 ETL_OR_STD::pair<iterator, iterator>
equal_range(key_parameter_t key)
661 return ETL_OR_STD::make_pair(i_lower, etl::upper_bound(i_lower,
end(), key,
compare));
669 ETL_OR_STD::pair<const_iterator, const_iterator>
equal_range(key_parameter_t key)
const
673 return ETL_OR_STD::make_pair(i_lower, etl::upper_bound(i_lower,
cend(), key,
compare));
682 return lookup.
size();
691 return lookup.
empty();
700 return lookup.
full();
747 ETL_OR_STD::pair<iterator, bool> result(
end(),
false);
749 if (i_element ==
end())
753 result.first = --
end();
754 result.second =
true;
759 lookup.
insert(i_element.ilookup, &value);
760 result.first = i_element;
761 result.second =
true;
780 #if defined(ETL_POLYMORPHIC_REFERENCE_FLAT_MULTIMAP) || defined(ETL_POLYMORPHIC_CONTAINERS)
800 template <
typename TKey,
typename TMapped,
typename TKeyCompare>
813 template <
typename TKey,
typename TMapped,
typename TKeyCompare>
816 return !(lhs == rhs);
827 template <
typename TKey,
typename TValue, const
size_t MAX_SIZE_,
typename TCompare = etl::less<TKey> >
832 static const size_t MAX_SIZE = MAX_SIZE_;
857 template <
typename TIterator>
874 typedef typename ireference_flat_multimap<TKey, TValue, TCompare>::value_type node_t;
Definition: reference_flat_multimap.h:53
Definition: reference_flat_multimap.h:67
Definition: reference_flat_multimap.h:204
Definition: reference_flat_multimap.h:105
Definition: reference_flat_multimap.h:83
const_reverse_iterator crbegin() const
Definition: reference_flat_multimap.h:422
size_t count(key_parameter_t key) const
Definition: reference_flat_multimap.h:605
iterator lower_bound(key_parameter_t key)
Definition: reference_flat_multimap.h:617
const_iterator find(key_parameter_t key) const
Definition: reference_flat_multimap.h:581
reverse_iterator rbegin()
Definition: reference_flat_multimap.h:386
const_reverse_iterator crend() const
Definition: reference_flat_multimap.h:431
iterator upper_bound(key_parameter_t key)
Definition: reference_flat_multimap.h:637
bool empty() const
Definition: reference_flat_multimap.h:689
const_reverse_iterator rbegin() const
Definition: reference_flat_multimap.h:395
const_iterator cbegin() const
Definition: reference_flat_multimap.h:368
size_type size() const
Definition: reference_flat_multimap.h:680
ETL_OR_STD::pair< iterator, iterator > equal_range(key_parameter_t key)
Definition: reference_flat_multimap.h:657
size_t available() const
Definition: reference_flat_multimap.h:725
ETL_OR_STD::pair< iterator, bool > insert(value_type &value)
Definition: reference_flat_multimap.h:464
bool full() const
Definition: reference_flat_multimap.h:698
size_t erase(key_parameter_t key)
Definition: reference_flat_multimap.h:507
~ireference_flat_multimap()
Destructor.
Definition: reference_flat_multimap.h:787
const_iterator end() const
Definition: reference_flat_multimap.h:359
void erase(iterator i_element)
Definition: reference_flat_multimap.h:527
ETL_OR_STD::pair< iterator, bool > insert_at(iterator i_element, value_type &value)
Definition: reference_flat_multimap.h:745
const_iterator upper_bound(key_parameter_t key) const
Definition: reference_flat_multimap.h:647
const_reverse_iterator rend() const
Definition: reference_flat_multimap.h:413
iterator begin()
Definition: reference_flat_multimap.h:332
iterator insert(iterator position, const value_type &value)
Definition: reference_flat_multimap.h:481
ETL_OR_STD::pair< const_iterator, const_iterator > equal_range(key_parameter_t key) const
Definition: reference_flat_multimap.h:669
iterator end()
Definition: reference_flat_multimap.h:350
iterator find(key_parameter_t key)
Definition: reference_flat_multimap.h:557
const_iterator cend() const
Definition: reference_flat_multimap.h:377
size_type max_size() const
Definition: reference_flat_multimap.h:716
void clear()
Clears the reference_flat_multimap.
Definition: reference_flat_multimap.h:547
void insert(TIterator first, TIterator last)
Definition: reference_flat_multimap.h:494
ireference_flat_multimap(lookup_t &lookup_)
Constructor.
Definition: reference_flat_multimap.h:735
void assign(TIterator first, TIterator last)
Definition: reference_flat_multimap.h:444
size_type capacity() const
Definition: reference_flat_multimap.h:707
reverse_iterator rend()
Definition: reference_flat_multimap.h:404
const_iterator lower_bound(key_parameter_t key) const
Definition: reference_flat_multimap.h:627
void erase(iterator first, iterator last)
Definition: reference_flat_multimap.h:539
const_iterator begin() const
Definition: reference_flat_multimap.h:341
Definition: reference_flat_multimap.h:829
~reference_flat_multimap()
Destructor.
Definition: reference_flat_multimap.h:867
reference_flat_multimap()
Constructor.
Definition: reference_flat_multimap.h:837
reference_flat_multimap(const reference_flat_multimap &other)
Copy constructor.
Definition: reference_flat_multimap.h:845
reference_flat_multimap(TIterator first, TIterator last)
Definition: reference_flat_multimap.h:858
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
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
bool operator==(const etl::ireference_flat_multimap< TKey, TMapped, TKeyCompare > &lhs, const etl::ireference_flat_multimap< TKey, TMapped, TKeyCompare > &rhs)
Definition: reference_flat_multimap.h:801
bool operator!=(const etl::ireference_flat_multimap< TKey, TMapped, TKeyCompare > &lhs, const etl::ireference_flat_multimap< TKey, TMapped, TKeyCompare > &rhs)
Definition: reference_flat_multimap.h:814
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