31 #ifndef ETL_REFERENCE_FLAT_SET_INCLUDED
32 #define ETL_REFERENCE_FLAT_SET_INCLUDED
63 flat_set_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
64 :
exception(reason_, file_name_, line_number_)
77 flat_set_full(string_type file_name_, numeric_type line_number_)
78 :
flat_set_exception(ETL_ERROR_TEXT(
"flat_set:full", ETL_FILE
"A"), file_name_, line_number_)
92 :
flat_set_exception(ETL_ERROR_TEXT(
"flat_set:iterator", ETL_FILE
"C"), file_name_, line_number_)
102 template <
typename T,
typename TKeyCompare = etl::less<T> >
108 typedef T value_type;
109 typedef TKeyCompare key_compare;
110 typedef value_type& reference;
111 typedef const value_type& const_reference;
112 typedef value_type* pointer;
113 typedef const value_type* const_pointer;
114 typedef size_t size_type;
134 iterator(
typename lookup_t::iterator ilookup_)
140 : ilookup(other.ilookup)
146 ilookup = other.ilookup;
176 reference operator *()
181 const_reference operator *()
const
193 return &(*(*ilookup));
196 pointer operator ->()
201 const_pointer operator ->()
const
208 return lhs.ilookup == rhs.ilookup;
213 return !(lhs == rhs);
218 typename lookup_t::iterator ilookup;
238 : ilookup(other.ilookup)
243 : ilookup(other.ilookup)
249 ilookup = other.ilookup;
255 ilookup = other.ilookup;
285 const_reference operator *()
const
295 const_pointer operator ->()
const
302 return lhs.ilookup == rhs.ilookup;
307 return !(lhs == rhs);
312 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;
385 return reverse_iterator(lookup.
rbegin());
394 return const_reverse_iterator(lookup.
rbegin());
403 return reverse_iterator(lookup.
rend());
410 const_reverse_iterator
rend()
const
412 return const_reverse_iterator(lookup.
rend());
421 return const_reverse_iterator(lookup.
crbegin());
428 const_reverse_iterator
crend()
const
430 return const_reverse_iterator(lookup.
crend());
440 template <
typename TIterator>
441 void assign(TIterator first, TIterator last)
443 #if defined(ETL_DEBUG)
444 difference_type d = etl::distance(first, last);
450 while (first != last)
461 ETL_OR_STD::pair<iterator, bool>
insert(reference value)
476 return insert(value).first;
486 template <
class TIterator>
487 void insert(TIterator first, TIterator last)
489 while (first != last)
504 if (i_element ==
end())
510 lookup.
erase(i_element.ilookup);
521 lookup.
erase(i_element.ilookup);
533 lookup.
erase(first.ilookup, last.ilookup);
555 if (!key_compare()(*itr, key) && !key_compare()(key, *itr))
579 if (!key_compare()(*itr, key) && !key_compare()(key, *itr))
599 return (
find(key) ==
end()) ? 0 : 1;
657 ETL_OR_STD::pair<const_iterator, const_iterator>
equal_range(parameter_t key)
const
668 return lookup.
size();
677 return lookup.
empty();
686 return lookup.
full();
733 ETL_OR_STD::pair<iterator, bool> result(
end(),
false);
735 if (i_element ==
end())
741 result.first = --
end();
742 result.second =
true;
747 result.first = i_element;
754 lookup.
insert(i_element.ilookup, &value);
755 result.second =
true;
775 #if defined(ETL_POLYMORPHIC_REFERENCE_FLAT_SET) || defined(ETL_POLYMORPHIC_CONTAINERS)
792 template <
typename TKey, const
size_t MAX_SIZE_,
typename TKeyCompare = etl::less<TKey> >
797 static const size_t MAX_SIZE = MAX_SIZE_;
822 template <
typename TIterator>
839 typedef TKey value_type;
852 template <
typename T,
typename TKeyCompare>
865 template <
typename T,
typename TKeyCompare>
868 return !(lhs == rhs);
Definition: reference_flat_set.h:60
Definition: reference_flat_set.h:74
Definition: reference_flat_set.h:88
Definition: reference_flat_set.h:223
Definition: reference_flat_set.h:124
Definition: reference_flat_set.h:104
const_iterator lower_bound(parameter_t key) const
Definition: reference_flat_set.h:617
~ireference_flat_set()
Destructor.
Definition: reference_flat_set.h:782
size_type capacity() const
Definition: reference_flat_set.h:693
ETL_OR_STD::pair< iterator, bool > insert(reference value)
Definition: reference_flat_set.h:461
size_t available() const
Definition: reference_flat_set.h:711
const_iterator begin() const
Definition: reference_flat_set.h:338
iterator upper_bound(parameter_t key)
Definition: reference_flat_set.h:627
const_iterator find(parameter_t key) const
Definition: reference_flat_set.h:573
iterator insert(iterator position, reference value)
Definition: reference_flat_set.h:474
void assign(TIterator first, TIterator last)
Definition: reference_flat_set.h:441
ETL_OR_STD::pair< iterator, bool > insert_at(iterator i_element, reference value)
Definition: reference_flat_set.h:731
const_reverse_iterator rend() const
Definition: reference_flat_set.h:410
void erase(iterator i_element)
Definition: reference_flat_set.h:519
const_reverse_iterator crbegin() const
Definition: reference_flat_set.h:419
ETL_OR_STD::pair< const_iterator, const_iterator > equal_range(parameter_t key) const
Definition: reference_flat_set.h:657
const_iterator end() const
Definition: reference_flat_set.h:356
iterator begin()
Definition: reference_flat_set.h:329
size_t erase(parameter_t key)
Definition: reference_flat_set.h:500
iterator end()
Definition: reference_flat_set.h:347
const_iterator upper_bound(parameter_t key) const
Definition: reference_flat_set.h:637
const_iterator cend() const
Definition: reference_flat_set.h:374
const_iterator cbegin() const
Definition: reference_flat_set.h:365
iterator find(parameter_t key)
Definition: reference_flat_set.h:549
const_reverse_iterator rbegin() const
Definition: reference_flat_set.h:392
size_type max_size() const
Definition: reference_flat_set.h:702
const_reverse_iterator crend() const
Definition: reference_flat_set.h:428
bool empty() const
Definition: reference_flat_set.h:675
size_type size() const
Definition: reference_flat_set.h:666
reverse_iterator rbegin()
Definition: reference_flat_set.h:383
ETL_OR_STD::pair< iterator, iterator > equal_range(parameter_t key)
Definition: reference_flat_set.h:647
ireference_flat_set(lookup_t &lookup_)
Constructor.
Definition: reference_flat_set.h:721
size_t count(parameter_t key) const
Definition: reference_flat_set.h:597
void insert(TIterator first, TIterator last)
Definition: reference_flat_set.h:487
bool full() const
Definition: reference_flat_set.h:684
void clear()
Clears the reference_flat_set.
Definition: reference_flat_set.h:539
void erase(iterator first, iterator last)
Definition: reference_flat_set.h:531
iterator lower_bound(parameter_t key)
Definition: reference_flat_set.h:607
reverse_iterator rend()
Definition: reference_flat_set.h:401
Definition: reference_flat_set.h:794
reference_flat_set(TIterator first, TIterator last)
Definition: reference_flat_set.h:823
reference_flat_set(const reference_flat_set &other)
Copy constructor.
Definition: reference_flat_set.h:810
reference_flat_set()
Constructor.
Definition: reference_flat_set.h:802
~reference_flat_set()
Destructor.
Definition: reference_flat_set.h:832
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_set< T, TKeyCompare > &lhs, const etl::ireference_flat_set< T, TKeyCompare > &rhs)
Definition: reference_flat_set.h:853
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_set< T, TKeyCompare > &lhs, const etl::ireference_flat_set< T, TKeyCompare > &rhs)
Definition: reference_flat_set.h:866
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