31#ifndef ETL_FLAT_SET_INCLUDED
32#define ETL_FLAT_SET_INCLUDED
59 template <
typename T,
typename TKeyCompare = etl::less<T> >
68 typedef const T& key_parameter_t;
76 typedef const value_type& const_reference;
87 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
88 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
89 typedef typename etl::iterator_traits<iterator>::difference_type difference_type;
178 const_reverse_iterator
rend()
const
196 const_reverse_iterator
crend()
const
208 template <
typename TIterator>
211#if ETL_IS_DEBUG_BUILD
212 difference_type
d = etl::distance(first, last);
218 while (first != last)
230 ETL_OR_STD::pair<iterator, bool>
insert(const_reference value)
234 ETL_OR_STD::pair<iterator, bool> result(
i_element,
false);
242 ::new (
pvalue) value_type(value);
243 ETL_INCREMENT_DEBUG_COUNT
260 ETL_OR_STD::pair<iterator, bool> result(
i_element,
false);
268 ::new (
pvalue) value_type(etl::move(value));
269 ETL_INCREMENT_DEBUG_COUNT
285 return insert(value).first;
297 return insert(etl::move(value)).first;
308 template <
class TIterator>
311 while (first != last)
321 ETL_OR_STD::pair<iterator, bool>
emplace(const_reference value)
329#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT
330 template <
typename ...
Args>
335 ETL_OR_STD::pair<iterator, bool> result;
346 ETL_INCREMENT_DEBUG_COUNT
352 pvalue->~value_type();
354 result = ETL_OR_STD::pair<iterator, bool>(
end(),
false);
363 template <
typename T1>
364 ETL_OR_STD::pair<iterator, bool>
emplace(
const T1& value1)
368 ETL_OR_STD::pair<iterator, bool> result;
372 ::new (
pvalue) value_type(value1);
379 ETL_INCREMENT_DEBUG_COUNT
387 result = ETL_OR_STD::pair<iterator, bool>(
end(),
false);
396 template <
typename T1,
typename T2>
397 ETL_OR_STD::pair<iterator, bool>
emplace(
const T1& value1,
const T2& value2)
401 ETL_OR_STD::pair<iterator, bool> result;
405 ::new (
pvalue) value_type(value1, value2);
412 ETL_INCREMENT_DEBUG_COUNT
420 result = ETL_OR_STD::pair<iterator, bool>(
end(),
false);
429 template <
typename T1,
typename T2,
typename T3>
430 ETL_OR_STD::pair<iterator, bool>
emplace(
const T1& value1,
const T2& value2,
const T3& value3)
434 ETL_OR_STD::pair<iterator, bool> result;
438 ::new (
pvalue) value_type(value1, value2, value3);
445 ETL_INCREMENT_DEBUG_COUNT
453 result = ETL_OR_STD::pair<iterator, bool>(
end(),
false);
462 template <
typename T1,
typename T2,
typename T3,
typename T4>
463 ETL_OR_STD::pair<iterator, bool>
emplace(
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
467 ETL_OR_STD::pair<iterator, bool> result;
471 ::new (
pvalue) value_type(value1, value2, value3, value4);
478 ETL_INCREMENT_DEBUG_COUNT
486 result = ETL_OR_STD::pair<iterator, bool>(
end(),
false);
511 ETL_DECREMENT_DEBUG_COUNT
532 ETL_DECREMENT_DEBUG_COUNT
546 ETL_DECREMENT_DEBUG_COUNT
558 ETL_DECREMENT_DEBUG_COUNT
578 ETL_DECREMENT_DEBUG_COUNT
602 ETL_DECREMENT_DEBUG_COUNT
606 ETL_RESET_DEBUG_COUNT
642 const_iterator
find(
const K& key)
const
653 size_t count(key_parameter_t key)
const
661 size_t count(
const K& key)
const
748 ETL_OR_STD::pair<iterator, iterator>
equal_range(key_parameter_t key)
756 ETL_OR_STD::pair<iterator, iterator>
equal_range(
const K& key)
767 ETL_OR_STD::pair<const_iterator, const_iterator>
equal_range(key_parameter_t key)
const
775 ETL_OR_STD::pair<const_iterator, const_iterator>
equal_range(
const K& key)
const
903 while (first != last)
908 this->
insert(etl::move(*first));
925 ETL_DECLARE_DEBUG_COUNT
930#if defined(ETL_POLYMORPHIC_FLAT_SET) || defined(ETL_POLYMORPHIC_CONTAINERS)
950 template <
typename T,
typename TKeyCompare>
953 return (
lhs.size() ==
rhs.size()) && etl::equal(
lhs.begin(),
lhs.end(),
rhs.begin());
963 template <
typename T,
typename TKeyCompare>
976 template <
typename T, const
size_t MAX_SIZE_,
typename TCompare = etl::less<T> >
981 static ETL_CONSTANT
size_t MAX_SIZE =
MAX_SIZE_;
1020 template <
typename TIterator>
1024 this->
assign(first, last);
1027#if ETL_HAS_INITIALIZER_LIST
1085 template <
typename T, const
size_t MAX_SIZE_,
typename TCompare>
1086 ETL_CONSTANT
size_t flat_set<T, MAX_SIZE_, TCompare>::MAX_SIZE;
1091#if ETL_USING_CPP17 && ETL_HAS_INITIALIZER_LIST
1092 template <
typename... T>
1099#if ETL_USING_CPP11 && ETL_HAS_INITIALIZER_LIST
1100 template <
typename TKey,
typename TKeyCompare = etl::less<TKey>,
typename... T>
1101 constexpr auto make_flat_set(T&&... keys) ->
etl::flat_set<TKey,
sizeof...(T), TKeyCompare>
Definition reference_flat_set.h:72
Definition reference_flat_set.h:206
Definition reference_flat_set.h:122
Definition reference_flat_set.h:102
size_type capacity() const
Definition reference_flat_set.h:832
ETL_OR_STD::pair< iterator, bool > insert_at(iterator i_element, reference value)
Definition reference_flat_set.h:870
size_t available() const
Definition reference_flat_set.h:850
iterator upper_bound(parameter_t key)
Definition reference_flat_set.h:713
const_reverse_iterator crbegin() const
Definition reference_flat_set.h:402
iterator begin()
Definition reference_flat_set.h:312
size_t erase(parameter_t key)
Definition reference_flat_set.h:485
iterator end()
Definition reference_flat_set.h:330
ETL_OR_STD::pair< iterator, iterator > equal_range(parameter_t key)
Definition reference_flat_set.h:751
const_iterator cend() const
Definition reference_flat_set.h:357
const_iterator cbegin() const
Definition reference_flat_set.h:348
iterator find(parameter_t key)
Definition reference_flat_set.h:562
size_type max_size() const
Definition reference_flat_set.h:841
const_reverse_iterator crend() const
Definition reference_flat_set.h:411
bool empty() const
Definition reference_flat_set.h:814
size_type size() const
Definition reference_flat_set.h:805
reverse_iterator rbegin()
Definition reference_flat_set.h:366
size_t count(parameter_t key) const
Definition reference_flat_set.h:656
bool full() const
Definition reference_flat_set.h:823
void clear()
Clears the reference_flat_set.
Definition reference_flat_set.h:552
iterator lower_bound(parameter_t key)
Definition reference_flat_set.h:675
reverse_iterator rend()
Definition reference_flat_set.h:384
#define ETL_ASSERT(b, e)
Definition error_handler.h:316
const_iterator cbegin() const
Definition flat_set.h:133
iterator insert(const_iterator, const_reference value)
Definition flat_set.h:283
~iflat_set()
Internal debugging.
Definition flat_set.h:937
iterator upper_bound(key_parameter_t key)
Definition flat_set.h:710
size_t available() const
Definition flat_set.h:872
flat_set()
Constructor.
Definition flat_set.h:986
size_t erase(key_parameter_t key)
Definition flat_set.h:498
iterator begin()
Definition flat_set.h:97
iflat_set(lookup_t &lookup_, storage_t &storage_)
Constructor.
Definition flat_set.h:882
const_iterator begin() const
Definition flat_set.h:106
const_reverse_iterator crbegin() const
Definition flat_set.h:187
iterator erase(iterator i_element)
Definition flat_set.h:542
ETL_OR_STD::pair< iterator, bool > emplace(const T1 &value1)
Emplaces a value to the set.
Definition flat_set.h:364
size_type max_size() const
Definition flat_set.h:863
iterator find(key_parameter_t key)
Definition flat_set.h:615
ETL_OR_STD::pair< iterator, iterator > equal_range(key_parameter_t key)
Definition flat_set.h:748
size_type capacity() const
Definition flat_set.h:854
ETL_OR_STD::pair< iterator, bool > emplace(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Emplaces a value to the set.
Definition flat_set.h:463
size_t count(key_parameter_t key) const
Definition flat_set.h:653
ETL_OR_STD::pair< iterator, bool > emplace(const_reference value)
Emplaces a value to the set.
Definition flat_set.h:321
iterator erase(const_iterator first, const_iterator last)
Definition flat_set.h:569
iterator lower_bound(key_parameter_t key)
Definition flat_set.h:672
bool empty() const
Definition flat_set.h:836
const_iterator find(key_parameter_t key) const
Definition flat_set.h:634
~flat_set()
Destructor.
Definition flat_set.h:1041
iflat_set & operator=(const iflat_set &rhs)
Assignment operator.
Definition flat_set.h:801
const_iterator end() const
Definition flat_set.h:124
bool full() const
Definition flat_set.h:845
iterator end()
Definition flat_set.h:115
bool contains(key_parameter_t key) const
Check if the map contains the key.
Definition flat_set.h:784
iterator erase(const_iterator i_element)
Definition flat_set.h:554
ETL_OR_STD::pair< iterator, bool > insert(const_reference value)
Definition flat_set.h:230
const_reverse_iterator rbegin() const
Definition flat_set.h:160
ETL_OR_STD::pair< iterator, bool > emplace(const T1 &value1, const T2 &value2)
Emplaces a value to the set.
Definition flat_set.h:397
void insert(TIterator first, TIterator last)
Definition flat_set.h:309
const_reverse_iterator crend() const
Definition flat_set.h:196
void assign(TIterator first, TIterator last)
Definition flat_set.h:209
reverse_iterator rend()
Definition flat_set.h:169
flat_set & operator=(const flat_set &rhs)
Assignment operator.
Definition flat_set.h:1049
flat_set(const flat_set &other)
Copy constructor.
Definition flat_set.h:994
size_type size() const
Definition flat_set.h:827
const_iterator lower_bound(key_parameter_t key) const
Definition flat_set.h:691
reverse_iterator rbegin()
Definition flat_set.h:151
const_iterator upper_bound(key_parameter_t key) const
Definition flat_set.h:729
const_reverse_iterator rend() const
Definition flat_set.h:178
const_iterator cend() const
Definition flat_set.h:142
ETL_OR_STD::pair< const_iterator, const_iterator > equal_range(key_parameter_t key) const
Definition flat_set.h:767
ETL_OR_STD::pair< iterator, bool > emplace(const T1 &value1, const T2 &value2, const T3 &value3)
Emplaces a value to the set.
Definition flat_set.h:430
flat_set(TIterator first, TIterator last)
Definition flat_set.h:1021
void clear()
Clears the flat_set.
Definition flat_set.h:587
Definition flat_set.h:978
etl::enable_if< etl::is_trivially_destructible< T >::value, void >::type destroy_at(T *)
Definition memory.h:1006
ETL_CONSTEXPR17 T * addressof(T &t)
Definition addressof.h:51
void release_all()
Release all objects in the pool.
Definition ipool.h:248
T * allocate()
Definition ipool.h:113
void release(const void *const p_object)
Definition ipool.h:239
bitset_ext
Definition absolute.h:38
bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:645
bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:633
Definition type_traits_generator.h:2055
iterator
Definition iterator.h:399
pair holds two objects of arbitrary type
Definition utility.h:164