31 #ifndef ETL_REFERENCE_FLAT_MULTISET_INCLUDED
32 #define ETL_REFERENCE_FLAT_MULTISET_INCLUDED
63 :
exception(reason_, file_name_, line_number_)
101 template <
typename T,
typename TKeyCompare = etl::less<T> >
107 typedef T value_type;
108 typedef TKeyCompare key_compare;
109 typedef value_type& reference;
110 typedef const value_type& const_reference;
111 typedef value_type* pointer;
112 typedef const value_type* const_pointer;
113 typedef size_t size_type;
132 iterator(
typename lookup_t::iterator ilookup_)
138 : ilookup(other.ilookup)
144 ilookup = other.ilookup;
174 reference operator *()
179 const_reference operator *()
const
191 return &(*(*ilookup));
194 pointer operator ->()
199 const_pointer operator ->()
const
206 return lhs.ilookup == rhs.ilookup;
211 return !(lhs == rhs);
216 typename lookup_t::iterator ilookup;
236 : ilookup(other.ilookup)
241 : ilookup(other.ilookup)
247 ilookup = other.ilookup;
253 ilookup = other.ilookup;
283 const_reference operator *()
const
293 const_pointer operator ->()
const
300 return lhs.ilookup == rhs.ilookup;
305 return !(lhs == rhs);
310 typename lookup_t::const_iterator ilookup;
319 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
320 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
321 typedef typename etl::iterator_traits<iterator>::difference_type difference_type;
383 return reverse_iterator(lookup.
rbegin());
392 return const_reverse_iterator(lookup.
rbegin());
401 return reverse_iterator(lookup.
rend());
408 const_reverse_iterator
rend()
const
410 return const_reverse_iterator(lookup.
rend());
419 return const_reverse_iterator(lookup.
crbegin());
426 const_reverse_iterator
crend()
const
428 return const_reverse_iterator(lookup.
crend());
438 template <
typename TIterator>
439 void assign(TIterator first, TIterator last)
441 #if defined(ETL_DEBUG)
442 difference_type d = etl::distance(first, last);
448 while (first != last)
459 ETL_OR_STD::pair<iterator, bool>
insert(value_type& value)
461 ETL_OR_STD::pair<iterator, bool> result(
end(),
false);
467 if (i_element ==
end())
471 result.first = --
end();
472 result.second =
true;
477 lookup.
insert(i_element.ilookup, &value);
478 result.first = i_element;
479 result.second =
true;
493 return insert(value).first;
503 template <
class TIterator>
504 void insert(TIterator first, TIterator last)
506 while (first != last)
519 ETL_OR_STD::pair<iterator, iterator> range =
equal_range(key);
521 if (range.first ==
end())
527 size_t d = etl::distance(range.first, range.second);
528 erase(range.first, range.second);
539 lookup.
erase(i_element.ilookup);
551 lookup.
erase(first.ilookup, last.ilookup);
573 if (!key_compare()(*itr, key) && !key_compare()(key, *itr))
597 if (!key_compare()(*itr, key) && !key_compare()(key, *itr))
617 ETL_OR_STD::pair<const_iterator, const_iterator> range =
equal_range(key);
619 return etl::distance(range.first, range.second);
677 ETL_OR_STD::pair<const_iterator, const_iterator>
equal_range(parameter_t key)
const
688 return lookup.
size();
697 return lookup.
empty();
706 return lookup.
full();
753 ETL_OR_STD::pair<iterator, bool> result(
end(),
false);
755 if (i_element ==
end())
761 result.first = --
end();
762 result.second =
true;
767 result.first = i_element;
771 lookup.
insert(i_element.ilookup, &value);
772 result.second =
true;
791 #if defined(ETL_POLYMORPHIC_REFERENCE_FLAT_MULTISET) || defined(ETL_POLYMORPHIC_CONTAINERS)
808 template <
typename TKey, const
size_t MAX_SIZE_,
typename TKeyCompare = etl::less<TKey> >
813 static const size_t MAX_SIZE = MAX_SIZE_;
838 template <
typename TIterator>
855 typedef TKey value_type;
868 template <
typename T,
typename TKeyCompare>
881 template <
typename T,
typename TKeyCompare>
884 return !(lhs == rhs);
Definition: reference_flat_multiset.h:59
Definition: reference_flat_multiset.h:73
Definition: reference_flat_multiset.h:87
Definition: reference_flat_multiset.h:221
Definition: reference_flat_multiset.h:123
Definition: reference_flat_multiset.h:103
iterator upper_bound(parameter_t key)
Definition: reference_flat_multiset.h:647
size_t count(parameter_t key) const
Definition: reference_flat_multiset.h:615
const_iterator begin() const
Definition: reference_flat_multiset.h:336
iterator begin()
Definition: reference_flat_multiset.h:327
const_iterator find(parameter_t key) const
Definition: reference_flat_multiset.h:591
~ireference_flat_multiset()
Destructor.
Definition: reference_flat_multiset.h:798
const_iterator upper_bound(parameter_t key) const
Definition: reference_flat_multiset.h:657
ireference_flat_multiset(lookup_t &lookup_)
Constructor.
Definition: reference_flat_multiset.h:741
reverse_iterator rbegin()
Definition: reference_flat_multiset.h:381
void erase(iterator first, iterator last)
Definition: reference_flat_multiset.h:549
ETL_OR_STD::pair< const_iterator, const_iterator > equal_range(parameter_t key) const
Definition: reference_flat_multiset.h:677
size_t erase(parameter_t key)
Definition: reference_flat_multiset.h:517
bool empty() const
Definition: reference_flat_multiset.h:695
ETL_OR_STD::pair< iterator, bool > insert_at(iterator i_element, reference value)
Definition: reference_flat_multiset.h:751
const_iterator end() const
Definition: reference_flat_multiset.h:354
reverse_iterator rend()
Definition: reference_flat_multiset.h:399
size_t available() const
Definition: reference_flat_multiset.h:731
void insert(TIterator first, TIterator last)
Definition: reference_flat_multiset.h:504
iterator find(parameter_t key)
Definition: reference_flat_multiset.h:567
size_type size() const
Definition: reference_flat_multiset.h:686
const_iterator lower_bound(parameter_t key) const
Definition: reference_flat_multiset.h:637
ETL_OR_STD::pair< iterator, iterator > equal_range(parameter_t key)
Definition: reference_flat_multiset.h:667
bool full() const
Definition: reference_flat_multiset.h:704
void clear()
Clears the reference_flat_multiset.
Definition: reference_flat_multiset.h:557
iterator end()
Definition: reference_flat_multiset.h:345
const_reverse_iterator rbegin() const
Definition: reference_flat_multiset.h:390
void erase(iterator i_element)
Definition: reference_flat_multiset.h:537
iterator lower_bound(parameter_t key)
Definition: reference_flat_multiset.h:627
iterator insert(iterator position, value_type &value)
Definition: reference_flat_multiset.h:491
ETL_OR_STD::pair< iterator, bool > insert(value_type &value)
Definition: reference_flat_multiset.h:459
size_type capacity() const
Definition: reference_flat_multiset.h:713
const_reverse_iterator crbegin() const
Definition: reference_flat_multiset.h:417
const_reverse_iterator crend() const
Definition: reference_flat_multiset.h:426
const_iterator cend() const
Definition: reference_flat_multiset.h:372
const_reverse_iterator rend() const
Definition: reference_flat_multiset.h:408
size_type max_size() const
Definition: reference_flat_multiset.h:722
void assign(TIterator first, TIterator last)
Definition: reference_flat_multiset.h:439
const_iterator cbegin() const
Definition: reference_flat_multiset.h:363
Definition: reference_flat_multiset.h:810
reference_flat_multiset(const reference_flat_multiset &other)
Copy constructor.
Definition: reference_flat_multiset.h:826
~reference_flat_multiset()
Destructor.
Definition: reference_flat_multiset.h:848
reference_flat_multiset()
Constructor.
Definition: reference_flat_multiset.h:818
reference_flat_multiset(TIterator first, TIterator last)
Definition: reference_flat_multiset.h:839
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::ireference_flat_multiset< T, TKeyCompare > &lhs, const etl::ireference_flat_multiset< T, TKeyCompare > &rhs)
Definition: reference_flat_multiset.h:882
bool operator==(const etl::ireference_flat_multiset< T, TKeyCompare > &lhs, const etl::ireference_flat_multiset< T, TKeyCompare > &rhs)
Definition: reference_flat_multiset.h:869
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