31#ifndef ETL_UNORDERED_SET_INCLUDED
32#define ETL_UNORDERED_SET_INCLUDED
73 unordered_set_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
87 unordered_set_full(string_type file_name_, numeric_type line_number_)
101 unordered_set_out_of_range(string_type file_name_, numeric_type line_number_)
115 unordered_set_iterator(string_type file_name_, numeric_type line_number_)
127 template <
typename TKey,
typename THash = etl::hash<TKey>,
typename TKeyEqual = etl::equal_to<TKey> >
132 typedef TKey value_type;
133 typedef TKey key_type;
134 typedef THash hasher;
135 typedef TKeyEqual key_equal;
136 typedef value_type& reference;
137 typedef const value_type& const_reference;
139 typedef value_type&& rvalue_reference;
141 typedef value_type* pointer;
142 typedef const value_type* const_pointer;
143 typedef size_t size_type;
145 typedef const TKey& key_parameter_t;
151 struct node_t :
public link_t
153 node_t(const_reference key_)
161 friend bool operator==(
const node_t& lhs,
const node_t& rhs)
163 return (lhs.key == rhs.key);
166 friend bool operator!=(
const node_t& lhs,
const node_t& rhs)
168 return !(lhs == rhs);
179 typedef typename bucket_t::iterator local_iterator;
180 typedef typename bucket_t::const_iterator const_local_iterator;
183 class iterator :
public etl::iterator<ETL_OR_STD::forward_iterator_tag, TKey>
187 typedef typename etl::iterator<ETL_OR_STD::forward_iterator_tag, TKey>::value_type value_type;
188 typedef typename iunordered_set::key_type key_type;
189 typedef typename iunordered_set::hasher hasher;
190 typedef typename iunordered_set::key_equal key_equal;
191 typedef typename iunordered_set::reference reference;
192 typedef typename iunordered_set::const_reference const_reference;
193 typedef typename iunordered_set::pointer pointer;
194 typedef typename iunordered_set::const_pointer const_pointer;
195 typedef typename iunordered_set::size_type size_type;
197 friend class iunordered_set;
198 friend class const_iterator;
204 iterator(
const iterator& other)
205 : pbuckets_end(other.pbuckets_end)
206 , pbucket(other.pbucket)
212 iterator& operator++()
217 if (inode == pbucket->end())
221 while ((pbucket != pbuckets_end) && (pbucket->empty()))
227 if (pbucket != pbuckets_end)
229 inode = pbucket->begin();
237 iterator operator++(
int)
239 iterator temp(*
this);
245 iterator& operator=(
const iterator& other)
247 pbuckets_end = other.pbuckets_end;
248 pbucket = other.pbucket;
254 reference operator*()
const
260 pointer operator&()
const
262 return &(inode->key);
266 pointer operator->()
const
268 return &(inode->key);
272 friend bool operator==(
const iterator& lhs,
const iterator& rhs)
274 return lhs.compare(rhs);
278 friend bool operator!=(
const iterator& lhs,
const iterator& rhs)
280 return !(lhs == rhs);
286 iterator(bucket_t* pbuckets_end_, bucket_t* pbucket_, local_iterator inode_)
287 : pbuckets_end(pbuckets_end_)
294 bool compare(
const iterator& rhs)
const
296 return rhs.inode == inode;
300 bucket_t& get_bucket()
306 bucket_t*& get_bucket_list_iterator()
312 local_iterator get_local_iterator()
317 bucket_t* pbuckets_end;
319 local_iterator inode;
323 class const_iterator :
public etl::iterator<ETL_OR_STD::forward_iterator_tag, const TKey>
327 typedef typename etl::iterator<ETL_OR_STD::forward_iterator_tag, const TKey>::value_type value_type;
328 typedef typename iunordered_set::key_type key_type;
329 typedef typename iunordered_set::hasher hasher;
330 typedef typename iunordered_set::key_equal key_equal;
331 typedef typename iunordered_set::reference reference;
332 typedef typename iunordered_set::const_reference const_reference;
333 typedef typename iunordered_set::pointer pointer;
334 typedef typename iunordered_set::const_pointer const_pointer;
335 typedef typename iunordered_set::size_type size_type;
337 friend class iunordered_set;
338 friend class iterator;
345 : pbuckets_end(other.pbuckets_end)
346 , pbucket(other.pbucket)
352 const_iterator(
const const_iterator& other)
353 : pbuckets_end(other.pbuckets_end)
354 , pbucket(other.pbucket)
360 const_iterator& operator++()
365 if (inode == pbucket->end())
370 while ((pbucket != pbuckets_end) && (pbucket->empty()))
376 if (pbucket != pbuckets_end)
378 inode = pbucket->begin();
386 const_iterator operator++(
int)
388 const_iterator temp(*
this);
394 const_iterator& operator=(
const const_iterator& other)
396 pbuckets_end = other.pbuckets_end;
397 pbucket = other.pbucket;
403 const_reference operator*()
const
409 const_pointer operator&()
const
411 return &(inode->key);
415 const_pointer operator->()
const
417 return &(inode->key);
421 friend bool operator==(
const const_iterator& lhs,
const const_iterator& rhs)
423 return lhs.compare(rhs);
427 friend bool operator!=(
const const_iterator& lhs,
const const_iterator& rhs)
429 return !(lhs == rhs);
435 const_iterator(bucket_t* pbuckets_end_, bucket_t* pbucket_, local_iterator inode_)
436 : pbuckets_end(pbuckets_end_)
443 bool compare(
const const_iterator& rhs)
const
445 return rhs.inode == inode;
449 bucket_t& get_bucket()
455 bucket_t*& get_bucket_list_iterator()
461 local_iterator get_local_iterator()
466 bucket_t* pbuckets_end;
468 local_iterator inode;
471 typedef typename etl::iterator_traits<iterator>::difference_type difference_type;
479 return iterator(pbuckets + number_of_buckets, first, first->begin());
488 return const_iterator(pbuckets + number_of_buckets, first, first->begin());
497 return const_iterator(pbuckets + number_of_buckets, first, first->begin());
506 return pbuckets[i].begin();
513 const_local_iterator
begin(
size_t i)
const
515 return pbuckets[i].cbegin();
522 const_local_iterator
cbegin(
size_t i)
const
524 return pbuckets[i].cbegin();
533 return iterator(pbuckets + number_of_buckets, last, last->end());
540 const_iterator
end()
const
542 return const_iterator(pbuckets + number_of_buckets, last, last->end());
551 return const_iterator(pbuckets + number_of_buckets, last, last->end());
558 local_iterator
end(
size_t i)
560 return pbuckets[i].end();
567 const_local_iterator
end(
size_t i)
const
569 return pbuckets[i].cend();
576 const_local_iterator
cend(
size_t i)
const
578 return pbuckets[i].cend();
587 return key_hash_function(key) % number_of_buckets;
595 template <typename K, typename KE = TKeyEqual, etl::enable_if_t<comparator_is_transparent<KE>::value,
int> = 0>
598 return key_hash_function(key) % number_of_buckets;
608 size_t index = bucket(key);
610 return etl::distance(pbuckets[index].
begin(), pbuckets[index].
end());
618 template <typename K, typename KE = TKeyEqual, etl::enable_if_t<comparator_is_transparent<KE>::value,
int> = 0>
621 size_t index = bucket(key);
623 return etl::distance(pbuckets[index].
begin(), pbuckets[index].
end());
633 return number_of_buckets;
642 return number_of_buckets;
653 template <
typename TIterator>
654 void assign(TIterator first_, TIterator last_)
656#if ETL_IS_DEBUG_BUILD
657 difference_type d = etl::distance(first_, last_);
664 while (first_ != last_)
677 ETL_OR_STD::pair<iterator, bool>
insert(const_reference key)
679 ETL_OR_STD::pair<iterator, bool> result(
end(),
false);
683 iterator iter =
find(key);
691 result.second =
false;
700 bucket_t* pbucket = pbuckets + index;
701 bucket_t& bucket = *pbucket;
707 node_t* node = allocate_data_node();
709 ::new (&node->key) value_type(key);
710 ETL_INCREMENT_DEBUG_COUNT;
714 adjust_first_last_markers_after_insert(&bucket);
716 result.first = iterator(pbuckets + number_of_buckets, pbucket, pbucket->
begin());
717 result.second =
true;
723 local_iterator inode = bucket.
begin();
725 while (inode != bucket.
end())
728 if (key_equal_function(inode->key, key))
738 if (inode == bucket.
end())
741 node_t* node = allocate_data_node();
743 ::new (&node->key) value_type(key);
744 ETL_INCREMENT_DEBUG_COUNT;
748 adjust_first_last_markers_after_insert(&bucket);
751 result.first = iterator(pbuckets + number_of_buckets, pbucket, inode_previous);
752 result.second =
true;
766 template <typename K, typename KE = TKeyEqual, etl::enable_if_t<comparator_is_transparent<KE>::value,
int> = 0>
767 ETL_OR_STD::pair<iterator, bool>
insert(
const K& key)
769 ETL_OR_STD::pair<iterator, bool> result(
end(),
false);
781 result.second =
false;
790 bucket_t* pbucket = pbuckets + index;
791 bucket_t& bucket = *pbucket;
797 node_t* node = allocate_data_node();
799 ::new (&node->key) value_type(key);
800 ETL_INCREMENT_DEBUG_COUNT;
803 bucket.insert_after(bucket.before_begin(), *node);
804 adjust_first_last_markers_after_insert(&bucket);
806 result.first =
iterator(pbuckets + number_of_buckets, pbucket, pbucket->
begin());
807 result.second = true;
812 local_iterator inode_previous = bucket.before_begin();
813 local_iterator inode = bucket.begin();
815 while (inode != bucket.end())
818 if (key_equal_function(inode->key, key))
828 if (inode == bucket.end())
831 node_t* node = allocate_data_node();
833 ::new (&node->key) value_type(key);
834 ETL_INCREMENT_DEBUG_COUNT;
837 bucket.insert_after(inode_previous, *node);
838 adjust_first_last_markers_after_insert(&bucket);
841 result.first =
iterator(pbuckets + number_of_buckets, pbucket, inode_previous);
842 result.second = true;
857 ETL_OR_STD::pair<iterator, bool>
insert(rvalue_reference key)
859 ETL_OR_STD::pair<iterator, bool> result(
end(),
false);
866 ETL_ASSERT_FAIL(ETL_ERROR(unordered_set_full));
871 result.second =
false;
880 bucket_t* pbucket = pbuckets + index;
881 bucket_t& bucket = *pbucket;
887 node_t* node = allocate_data_node();
889 ::new (&node->key) value_type(etl::move(key));
890 ETL_INCREMENT_DEBUG_COUNT;
893 bucket.insert_after(bucket.before_begin(), *node);
894 adjust_first_last_markers_after_insert(&bucket);
896 result.first =
iterator(pbuckets + number_of_buckets, pbucket, pbucket->
begin());
897 result.second = true;
902 local_iterator inode_previous = bucket.before_begin();
903 local_iterator inode = bucket.begin();
905 while (inode != bucket.end())
908 if (key_equal_function(inode->key, key))
918 if (inode == bucket.end())
921 node_t* node = allocate_data_node();
923 ::new (&node->key) value_type(etl::move(key));
924 ETL_INCREMENT_DEBUG_COUNT;
927 bucket.insert_after(inode_previous, *node);
928 adjust_first_last_markers_after_insert(&bucket);
931 result.first =
iterator(pbuckets + number_of_buckets, pbucket, inode_previous);
932 result.second = true;
947 iterator
insert(const_iterator, const_reference key)
962 return insert(etl::move(key)).first;
974 template <
class TIterator>
975 void insert(TIterator first_, TIterator last_)
977 while (first_ != last_)
994 bucket_t& bucket = pbuckets[index];
997 local_iterator icurrent = bucket.
begin();
1000 while ((icurrent != bucket.
end()) && (!key_equal_function(icurrent->key, key)))
1007 if (icurrent != bucket.
end())
1009 delete_data_node(iprevious, icurrent, bucket);
1022 template <typename K, typename KE = TKeyEqual, etl::enable_if_t<comparator_is_transparent<KE>::value,
int> = 0>
1023 size_t erase(
const K& key)
1028 bucket_t& bucket = pbuckets[index];
1031 local_iterator icurrent = bucket.begin();
1034 while ((icurrent != bucket.end()) && (!key_equal_function(icurrent->key, key)))
1041 if (icurrent != bucket.end())
1043 delete_data_node(iprevious, icurrent, bucket);
1058 iterator inext((pbuckets + number_of_buckets), ielement.get_bucket_list_iterator(), ielement.get_local_iterator());
1061 bucket_t& bucket = ielement.get_bucket();
1063 local_iterator icurrent = ielement.get_local_iterator();
1066 while (iprevious->etl_next != &*icurrent)
1071 delete_data_node(iprevious, icurrent, bucket);
1083 iterator
erase(const_iterator first_, const_iterator last_)
1086 if ((first_ ==
begin()) && (last_ ==
end()))
1093 bucket_t* pbucket = first_.get_bucket_list_iterator();
1094 bucket_t* pend_bucket = last_.get_bucket_list_iterator();
1096 local_iterator icurrent = first_.get_local_iterator();
1097 local_iterator iend = last_.get_local_iterator();
1101 while (iprevious->etl_next != &*icurrent)
1107 iterator ibefore_erased = iterator((pbuckets + number_of_buckets), pbucket, iprevious);
1110 while ((icurrent != iend) || (pbucket != pend_bucket))
1112 icurrent = delete_data_node(iprevious, icurrent, *pbucket);
1115 if ((icurrent != iend) || (pbucket != pend_bucket))
1118 if ((icurrent == pbucket->
end()))
1123 }
while (pbucket->
empty());
1126 icurrent = pbucket->
begin();
1131 return ++ibefore_erased;
1149 return (
find(key) ==
end()) ? 0 : 1;
1158 template <typename K, typename KE = TKeyEqual, etl::enable_if_t<comparator_is_transparent<KE>::value,
int> = 0>
1159 size_t count(
const K& key)
const
1161 return (
find(key) ==
end()) ? 0 : 1;
1174 bucket_t* pbucket = pbuckets + index;
1175 bucket_t& bucket = *pbucket;
1178 if (!bucket.
empty())
1181 local_iterator inode = bucket.
begin();
1182 local_iterator iend = bucket.
end();
1184 while (inode != iend)
1187 if (key_equal_function(key, inode->key))
1189 return iterator(pbuckets + number_of_buckets, pbucket, inode);
1204 const_iterator
find(key_parameter_t key)
const
1208 bucket_t* pbucket = pbuckets + index;
1209 bucket_t& bucket = *pbucket;
1212 if (!bucket.
empty())
1215 local_iterator inode = bucket.
begin();
1216 local_iterator iend = bucket.
end();
1218 while (inode != iend)
1221 if (key_equal_function(key, inode->key))
1223 return iterator(pbuckets + number_of_buckets, pbucket, inode);
1239 template <typename K, typename KE = TKeyEqual, etl::enable_if_t<comparator_is_transparent<KE>::value,
int> = 0>
1244 bucket_t* pbucket = pbuckets + index;
1245 bucket_t& bucket = *pbucket;
1248 if (!bucket.empty())
1251 local_iterator inode = bucket.begin();
1252 local_iterator iend = bucket.end();
1254 while (inode != iend)
1257 if (key_equal_function(key, inode->key))
1259 return iterator(pbuckets + number_of_buckets, pbucket, inode);
1276 template <typename K, typename KE = TKeyEqual, etl::enable_if_t<comparator_is_transparent<KE>::value,
int> = 0>
1281 bucket_t* pbucket = pbuckets + index;
1282 bucket_t& bucket = *pbucket;
1285 if (!bucket.empty())
1288 local_iterator inode = bucket.begin();
1289 local_iterator iend = bucket.end();
1291 while (inode != iend)
1294 if (key_equal_function(key, inode->key))
1296 return iterator(pbuckets + number_of_buckets, pbucket, inode);
1318 iterator f =
find(key);
1326 return ETL_OR_STD::pair<iterator, iterator>(f, l);
1338 ETL_OR_STD::pair<const_iterator, const_iterator>
equal_range(key_parameter_t key)
const
1340 const_iterator f =
find(key);
1341 const_iterator l = f;
1348 return ETL_OR_STD::pair<const_iterator, const_iterator>(f, l);
1361 template <typename K, typename KE = TKeyEqual, etl::enable_if_t<comparator_is_transparent<KE>::value,
int> = 0>
1362 ETL_OR_STD::pair<iterator, iterator>
equal_range(
const K& key)
1372 return ETL_OR_STD::pair<iterator, iterator>(f, l);
1386 template <typename K, typename KE = TKeyEqual, etl::enable_if_t<comparator_is_transparent<KE>::value,
int> = 0>
1387 ETL_OR_STD::pair<const_iterator, const_iterator>
equal_range(
const K& key)
const
1397 return ETL_OR_STD::pair<const_iterator, const_iterator>(f, l);
1406 return pnodepool->size();
1414 return pnodepool->max_size();
1422 return pnodepool->max_size();
1430 return pnodepool->empty();
1438 return pnodepool->full();
1447 return pnodepool->available();
1465 return key_hash_function;
1474 return key_equal_function;
1486 key_equal_function = rhs.
key_eq();
1503 key_hash_function = rhs.hash_function();
1504 key_equal_function = rhs.key_eq();
1505 move(rhs.begin(), rhs.end());
1524 template <typename K, typename KE = TKeyEqual, etl::enable_if_t<comparator_is_transparent<KE>::value,
int> = 0>
1536 iunordered_set(pool_t& node_pool_, bucket_t* pbuckets_,
size_t number_of_buckets_, hasher key_hash_function_, key_equal key_equal_function_)
1537 : pnodepool(&node_pool_)
1538 , pbuckets(pbuckets_)
1539 , number_of_buckets(number_of_buckets_)
1542 , key_hash_function(key_hash_function_)
1543 , key_equal_function(key_equal_function_)
1555 for (
size_t i = 0UL; i < number_of_buckets; ++i)
1557 bucket_t& bucket = pbuckets[i];
1559 if (!bucket.
empty())
1562 local_iterator it = bucket.
begin();
1564 while (it != bucket.
end())
1567 it->key.~value_type();
1569 ETL_DECREMENT_DEBUG_COUNT;
1578 pnodepool->release_all();
1591 #if ETL_IS_DEBUG_BUILD
1612 node_t* allocate_data_node()
1615 return (pnodepool->*func)();
1621 void adjust_first_last_markers_after_insert(bucket_t* pbucket)
1630 if (pbucket < first)
1634 else if (pbucket > last)
1644 void adjust_first_last_markers_after_erase(bucket_t* pbucket)
1653 if (pbucket == first)
1657 while (first->empty())
1662 else if (pbucket == last)
1667 bucket_t* pend = last;
1671 while (pbucket != pend)
1673 if (!pbucket->empty())
1687 local_iterator delete_data_node(local_iterator iprevious, local_iterator icurrent, bucket_t& bucket)
1689 local_iterator inext = bucket.erase_after(iprevious);
1690 icurrent->key.~value_type();
1691 pnodepool->release(&*icurrent);
1692 adjust_first_last_markers_after_erase(&bucket);
1693 ETL_DECREMENT_DEBUG_COUNT;
1708 const size_t number_of_buckets;
1715 hasher key_hash_function;
1718 key_equal key_equal_function;
1721 ETL_DECLARE_DEBUG_COUNT;
1726#if defined(ETL_POLYMORPHIC_UNORDERED_SET) || defined(ETL_POLYMORPHIC_CONTAINERS)
1746 template <
typename TKey,
typename THash,
typename TKeyEqual>
1749 const bool sizes_match = (lhs.
size() == rhs.
size());
1750 bool elements_match =
true;
1756 itr_t l_begin = lhs.
begin();
1757 itr_t l_end = lhs.
end();
1759 while ((l_begin != l_end) && elements_match)
1761 const TKey l_value = *l_begin;
1764 ETL_OR_STD::pair<itr_t, itr_t> range = rhs.
equal_range(l_value);
1766 if (range.first != rhs.
end())
1769 const TKey r_value = *(range.first);
1771 elements_match = (r_value == l_value);
1775 elements_match =
false;
1782 return (sizes_match && elements_match);
1792 template <
typename TKey,
typename THash,
typename TKeyEqual>
1795 return !(lhs == rhs);
1801 template <
typename TKey, const
size_t MAX_SIZE_,
size_t MAX_BUCKETS_ = MAX_SIZE_,
typename THash = etl::hash<TKey>,
1802 typename TKeyEqual = etl::equal_to<TKey> >
1811 static ETL_CONSTANT
size_t MAX_SIZE = MAX_SIZE_;
1812 static ETL_CONSTANT
size_t MAX_BUCKETS = MAX_BUCKETS_;
1817 unordered_set(
const THash& hash = THash(),
const TKeyEqual& equal = TKeyEqual())
1818 : base(node_pool, buckets, MAX_BUCKETS, hash, equal)
1840 : base(node_pool, buckets, MAX_BUCKETS, other.hash_function(), other.key_eq())
1845 base::move(other.begin(), other.end());
1856 template <
typename TIterator>
1857 unordered_set(TIterator first_, TIterator last_,
const THash& hash = THash(),
const TKeyEqual& equal = TKeyEqual())
1858 : base(node_pool, buckets, MAX_BUCKETS, hash, equal)
1863#if ETL_HAS_INITIALIZER_LIST
1867 unordered_set(std::initializer_list<TKey> init,
const THash& hash = THash(),
const TKeyEqual& equal = TKeyEqual())
1868 : base(node_pool, buckets, MAX_BUCKETS, hash, equal)
1870 base::assign(init.begin(), init.end());
1898 base::operator=(etl::move(rhs));
1910 typename base::bucket_t buckets[MAX_BUCKETS_];
1916#if ETL_USING_CPP17 && ETL_HAS_INITIALIZER_LIST
1917 template <
typename... T>
1918 unordered_set(T...) -> unordered_set<etl::nth_type_t<0, T...>,
sizeof...(T)>;
1924#if ETL_USING_CPP11 && ETL_HAS_INITIALIZER_LIST
1925 template <
typename TKey,
typename THash = etl::hash<TKey>,
typename TKeyEqual = etl::equal_to<TKey>,
typename... T>
1926 constexpr auto make_unordered_set(T&&... keys) -> etl::unordered_set<TKey,
sizeof...(T),
sizeof...(T), THash, TKeyEqual>
1928 return {etl::forward<T>(keys)...};
bool empty() const
Returns true if the list has no elements.
Definition intrusive_forward_list.h:250
void clear()
Clears the intrusive_forward_list.
Definition intrusive_forward_list.h:154
Definition intrusive_forward_list.h:457
iterator insert_after(iterator position, value_type &value)
Definition intrusive_forward_list.h:760
iterator end()
Gets the end of the intrusive_forward_list.
Definition intrusive_forward_list.h:713
iterator before_begin()
Gets before the beginning of the intrusive_forward_list.
Definition intrusive_forward_list.h:689
iterator begin()
Gets the beginning of the intrusive_forward_list.
Definition intrusive_forward_list.h:673
Definition unordered_set.h:324
Definition unordered_set.h:184
A templated unordered_set implementation that uses a fixed size buffer.
Definition unordered_set.h:1804
unordered_set(TIterator first_, TIterator last_, const THash &hash=THash(), const TKeyEqual &equal=TKeyEqual())
Definition unordered_set.h:1857
~unordered_set()
Destructor.
Definition unordered_set.h:1877
unordered_set(const THash &hash=THash(), const TKeyEqual &equal=TKeyEqual())
Default constructor.
Definition unordered_set.h:1817
unordered_set(const unordered_set &other)
Copy constructor.
Definition unordered_set.h:1825
unordered_set & operator=(const unordered_set &rhs)
Assignment operator.
Definition unordered_set.h:1885
ETL_CONSTEXPR14 bool operator!=(const etl::bitset< Active_Bits, TElement > &lhs, const etl::bitset< Active_Bits, TElement > &rhs) ETL_NOEXCEPT
Definition bitset_new.h:2529
#define ETL_ASSERT(b, e)
Definition error_handler.h:511
Definition exception.h:59
T * allocate()
Definition ipool.h:333
size_t count(key_parameter_t key) const
Definition unordered_set.h:1147
const_local_iterator begin(size_t i) const
Definition unordered_set.h:513
key_equal key_eq() const
Definition unordered_set.h:1472
iterator erase(const_iterator first_, const_iterator last_)
Definition unordered_set.h:1083
local_iterator end(size_t i)
Definition unordered_set.h:558
size_type bucket_count() const
Definition unordered_set.h:640
size_type max_size() const
Gets the maximum possible size of the unordered_set.
Definition unordered_set.h:1412
size_type size() const
Gets the size of the unordered_set.
Definition unordered_set.h:1404
iunordered_set(pool_t &node_pool_, bucket_t *pbuckets_, size_t number_of_buckets_, hasher key_hash_function_, key_equal key_equal_function_)
Constructor.
Definition unordered_set.h:1536
iunordered_set & operator=(const iunordered_set &rhs)
Assignment operator.
Definition unordered_set.h:1480
local_iterator begin(size_t i)
Definition unordered_set.h:504
void insert(TIterator first_, TIterator last_)
Definition unordered_set.h:975
float load_factor() const
Definition unordered_set.h:1454
const_iterator begin() const
Definition unordered_set.h:486
bool contains(key_parameter_t key) const
Check if the unordered_set contains the key.
Definition unordered_set.h:1515
const_local_iterator cbegin(size_t i) const
Definition unordered_set.h:522
bool full() const
Checks to see if the unordered_set is full.
Definition unordered_set.h:1436
size_type bucket_size(key_parameter_t key) const
Definition unordered_set.h:606
~iunordered_set()
Destructor.
Definition unordered_set.h:1735
size_type get_bucket_index(key_parameter_t key) const
Definition unordered_set.h:585
const_iterator end() const
Definition unordered_set.h:540
void clear()
Clears the unordered_set.
Definition unordered_set.h:1137
size_t available() const
Definition unordered_set.h:1445
ETL_OR_STD::pair< iterator, bool > insert(const_reference key)
Definition unordered_set.h:677
iterator insert(const_iterator, const_reference key)
Definition unordered_set.h:947
void assign(TIterator first_, TIterator last_)
Definition unordered_set.h:654
ETL_OR_STD::pair< const_iterator, const_iterator > equal_range(key_parameter_t key) const
Definition unordered_set.h:1338
iterator find(key_parameter_t key)
Definition unordered_set.h:1170
ETL_OR_STD::pair< iterator, iterator > equal_range(key_parameter_t key)
Definition unordered_set.h:1316
iterator end()
Definition unordered_set.h:531
size_t erase(key_parameter_t key)
Definition unordered_set.h:989
const_iterator find(key_parameter_t key) const
Definition unordered_set.h:1204
hasher hash_function() const
Definition unordered_set.h:1463
bool empty() const
Checks to see if the unordered_set is empty.
Definition unordered_set.h:1428
size_type max_bucket_count() const
Definition unordered_set.h:631
iterator begin()
Definition unordered_set.h:477
const_local_iterator cend(size_t i) const
Definition unordered_set.h:576
const_iterator cend() const
Definition unordered_set.h:549
const_local_iterator end(size_t i) const
Definition unordered_set.h:567
void initialise()
Initialise the unordered_set.
Definition unordered_set.h:1550
size_type capacity() const
Gets the maximum possible size of the unordered_set.
Definition unordered_set.h:1420
const_iterator cbegin() const
Definition unordered_set.h:495
iterator erase(const_iterator ielement)
Definition unordered_set.h:1055
Definition unordered_set.h:129
Definition unordered_set.h:70
Definition unordered_set.h:84
Definition unordered_set.h:112
bitset_ext
Definition absolute.h:40
ETL_CONSTEXPR14 bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1081
ETL_CONSTEXPR14 bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1093
A forward link.
Definition intrusive_links.h:87
iterator
Definition iterator.h:424
Definition unordered_set.h:152