20 #ifndef __TBB_concurrent_unordered_set_H    21 #define __TBB_concurrent_unordered_set_H    23 #define __TBB_concurrent_unordered_set_H_include_area    31 namespace interface5 {
    34 template<
typename Key, 
typename Hash_compare, 
typename Allocator, 
bool Allow_multimapping>
    42 #if __TBB_UNORDERED_NODE_HANDLE_PRESENT    46 #endif // __TBB_UNORDERED_NODE_HANDLE_PRESENT    60 template<
typename Key, 
typename Hasher, 
typename Key_equality, 
typename Allocator>
    63 template <
typename Key, 
typename Hasher = tbb::tbb_hash<Key>, 
typename Key_equality = std::equal_to<Key>, 
typename Allocator = tbb::tbb_allocator<Key> >
    98 #if __TBB_UNORDERED_NODE_HANDLE_PRESENT   119     template <
typename Iterator>
   127     template <
typename Iterator>
   134     template <
typename Iterator>
   141 #if __TBB_INITIALIZER_LISTS_PRESENT   147         insert(il.begin(),il.end());
   153         insert(il.begin(), il.end());
   159         insert(il.begin(), il.end());
   162 #endif //# __TBB_INITIALIZER_LISTS_PRESENT   164 #if __TBB_CPP11_RVALUE_REF_PRESENT && !__TBB_IMPLICIT_MOVE_PRESENT   171         return static_cast<concurrent_unordered_set&>(base_type::operator=(table));
   180         return static_cast<concurrent_unordered_set&>(base_type::operator=(
std::move(table)));
   182 #endif //__TBB_CPP11_RVALUE_REF_PRESENT && !__TBB_IMPLICIT_MOVE_PRESENT   184 #if __TBB_CPP11_RVALUE_REF_PRESENT   190 #if __TBB_UNORDERED_NODE_HANDLE_PRESENT   191     template<
typename Hash, 
typename Equality>
   195     template<
typename Hash, 
typename Equality>
   199     template<
typename Hash, 
typename Equality>
   203     template<
typename Hash, 
typename Equality>
   207 #endif //__TBB_UNORDERED_NODE_HANDLE_PRESENT   215 #if __TBB_CPP17_DEDUCTION_GUIDES_PRESENT   220 template <
template<
typename...> 
typename Set, 
typename T, 
typename... Args>
   221 using cu_set_t = Set <
   223     std::conditional_t< (
sizeof...(Args)>0) && !is_allocator_v< pack_element_t<0, Args...> >,
   224                         pack_element_t<0, Args...>, tbb_hash<T> >,
   225     std::conditional_t< (
sizeof...(Args)>1) && !is_allocator_v< pack_element_t<1, Args...> >,
   226                         pack_element_t<1, Args...>, std::equal_to<T> >,
   227     std::conditional_t< (
sizeof...(Args)>0) && is_allocator_v< pack_element_t<
sizeof...(Args)-1, Args...> >,
   234 concurrent_unordered_set(I, I)
   235 -> internal::cu_set_t<concurrent_unordered_set, internal::iterator_value_t<I>>;
   238 template<
typename I, 
typename... Args>
   239 concurrent_unordered_set(I, I, 
size_t, Args...)
   240 -> internal::cu_set_t<concurrent_unordered_set, internal::iterator_value_t<I>, Args...>;
   244 concurrent_unordered_set(std::initializer_list<T>)
   245 -> internal::cu_set_t<concurrent_unordered_set, T>;
   248 template<
typename T, 
typename... Args>
   249 concurrent_unordered_set(std::initializer_list<T>, 
size_t, Args...)
   250 -> internal::cu_set_t<concurrent_unordered_set, T, Args...>;
   254 template <
typename Key, 
typename Hasher = tbb::tbb_hash<Key>, 
typename Key_equality = std::equal_to<Key>,
   255          typename Allocator = tbb::tbb_allocator<Key> >
   256 class concurrent_unordered_multiset :
   257     public internal::concurrent_unordered_base< concurrent_unordered_set_traits<Key,
   258     internal::hash_compare<Key, Hasher, Key_equality>, Allocator, true> >
   264 #if __TBB_EXTRA_DEBUG   267     using traits_type::allow_multimapping;
   269     using base_type::insert;
   292 #if __TBB_UNORDERED_NODE_HANDLE_PRESENT   294 #endif // __TBB_UNORDERED_NODE_HANDLE_PRESENT   315     template <
typename Iterator>
   324     template <
typename Iterator>
   331     template <
typename Iterator>
   339 #if __TBB_INITIALIZER_LISTS_PRESENT   343         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
   345         insert(il.begin(),il.end());
   351         insert(il.begin(), il.end());
   358         insert(il.begin(), il.end());
   361 #endif //# __TBB_INITIALIZER_LISTS_PRESENT   364 #if __TBB_CPP11_RVALUE_REF_PRESENT && !__TBB_IMPLICIT_MOVE_PRESENT   371         return static_cast<concurrent_unordered_multiset&>(base_type::operator=(table));
   374     concurrent_unordered_multiset(concurrent_unordered_multiset&& table)
   375         : base_type(std::
move(table))
   378     concurrent_unordered_multiset& operator=(concurrent_unordered_multiset&& table)
   380         return static_cast<concurrent_unordered_multiset&>(base_type::operator=(
std::move(table)));
   382 #endif //__TBB_CPP11_RVALUE_REF_PRESENT && !__TBB_IMPLICIT_MOVE_PRESENT   384 #if __TBB_CPP11_RVALUE_REF_PRESENT   391 #if __TBB_UNORDERED_NODE_HANDLE_PRESENT   392     template<
typename Hash, 
typename Equality>
   394               { this->internal_merge(source); }
   396     template<
typename Hash, 
typename Equality>
   398               { this->internal_merge(source); }
   400     template<
typename Hash, 
typename Equality>
   402               { this->internal_merge(source); }
   404     template<
typename Hash, 
typename Equality>
   406               { this->internal_merge(source); }
   408 #endif //__TBB_UNORDERED_NODE_HANDLE_PRESENT   415 #if __TBB_CPP17_DEDUCTION_GUIDES_PRESENT   420 -> internal::cu_set_t<concurrent_unordered_multiset, internal::iterator_value_t<I>>;
   423 template<
typename I, 
typename... Args>
   425 -> internal::cu_set_t<concurrent_unordered_multiset, internal::iterator_value_t<I>, Args...>;
   430 -> internal::cu_set_t<concurrent_unordered_multiset, T>;
   433 template<
typename T, 
typename... Args>
   440 using interface5::concurrent_unordered_set;
   441 using interface5::concurrent_unordered_multiset;
   446 #undef __TBB_concurrent_unordered_set_H_include_area   448 #endif// __TBB_concurrent_unordered_set_H 
concurrent_unordered_set_traits< Key, hash_compare, Allocator, true > traits_type
 
base_type::size_type size_type
 
tbb::internal::allocator_traits< allocator_type >::pointer pointer
 
concurrent_unordered_multiset(size_type n_of_buckets, const hasher &a_hasher, const allocator_type &a)
 
concurrent_unordered_base & operator=(const concurrent_unordered_base &right)
 
Traits::allocator_type allocator_type
 
std::pair< iterator, bool > insert(const value_type &value)
 
base_type::value_type value_type
 
base_type::iterator local_iterator
 
const allocator_type::value_type & const_reference
 
allocator_type::value_type & reference
 
void merge(concurrent_unordered_set< Key, Hash, Equality, Allocator > &source)
 
void merge(concurrent_unordered_multiset< Key, Hash, Equality, Allocator > &&source)
 
internal::hash_compare< Key, Hasher, Key_equality > hash_compare
 
tbb::internal::allocator_traits< allocator_type >::difference_type difference_type
 
tbb::internal::allocator_traits< allocator_type >::const_pointer const_pointer
 
concurrent_unordered_multiset(size_type n_of_buckets, const allocator_type &a)
 
base_type::difference_type difference_type
 
base_type::iterator iterator
 
auto last(Container &c) -> decltype(begin(c))
 
concurrent_unordered_set_traits(const hash_compare &hc)
 
hash_compare my_hash_compare
 
concurrent_unordered_multiset(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())
 
void internal_merge(SourceType &source)
 
allocator_traits< Alloc >::template rebind_alloc< T >::other type
 
base_type::const_iterator const_iterator
 
internal::concurrent_unordered_base< traits_type > base_type
 
base_type::node_type node_type
 
void merge(concurrent_unordered_multiset< Key, Hash, Equality, Allocator > &&source)
 
concurrent_unordered_set(concurrent_unordered_set &&table, const Allocator &a)
 
base_type::iterator local_iterator
 
concurrent_unordered_set_traits< Key, hash_compare, Allocator, false > traits_type
 
base_type::pointer pointer
 
concurrent_unordered_set(Iterator first, Iterator last, size_type n_of_buckets, const hasher &a_hasher, const allocator_type &a)
 
concurrent_unordered_multiset(const concurrent_unordered_multiset &table, const Allocator &a)
 
base_type::const_iterator const_local_iterator
 
concurrent_unordered_set_traits()
 
concurrent_unordered_set(const Allocator &a)
 
base_type::const_reference const_reference
 
base_type::reference reference
 
concurrent_unordered_set(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())
 
static const size_type initial_bucket_number
 
Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
 
concurrent_unordered_set(size_type n_of_buckets, const allocator_type &a)
 
base_type::const_pointer const_pointer
 
tbb::internal::node_handle< key_type, key_type, typename internal::split_ordered_list< key_type, allocator_type >::node, allocator_type > node_type
 
concurrent_unordered_set(const concurrent_unordered_set &table, const Allocator &a)
 
internal::hash_compare< Key, Hasher, Key_equality > hash_compare
 
void merge(concurrent_unordered_multiset< Key, Hash, Equality, Allocator > &source)
 
concurrent_unordered_set(Iterator first, Iterator last, size_type n_of_buckets, const allocator_type &a)
 
static const Key & get_key(const value_type &value)
 
concurrent_unordered_multiset(Iterator first, Iterator last, size_type n_of_buckets, const hasher &a_hasher, const allocator_type &a)
 
concurrent_unordered_multiset(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())
 
concurrent_unordered_multiset(std::initializer_list< value_type > il, size_type n_of_buckets, const allocator_type &a)
 
auto first(Container &c) -> decltype(begin(c))
 
concurrent_unordered_multiset(const Allocator &a)
 
concurrent_unordered_set(std::initializer_list< value_type > il, size_type n_of_buckets, const hasher &a_hasher, const allocator_type &a)
 
tbb::internal::allocator_rebind< Allocator, value_type >::type allocator_type
 
Class for determining type of std::allocator<T>::value_type.
 
base_type::value_type value_type
 
concurrent_unordered_multiset(Iterator first, Iterator last, size_type n_of_buckets, const allocator_type &a)
 
concurrent_unordered_set(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())
 
void merge(concurrent_unordered_set< Key, Hash, Equality, Allocator > &&source)
 
base_type::size_type size_type
 
concurrent_unordered_multiset(std::initializer_list< value_type > il, size_type n_of_buckets, const hasher &a_hasher, const allocator_type &a)
 
base_type::reference reference
 
base_type::difference_type difference_type
 
base_type::const_pointer const_pointer
 
concurrent_unordered_set(std::initializer_list< value_type > il, size_type n_of_buckets, const allocator_type &a)
 
internal::concurrent_unordered_base< traits_type > base_type
 
concurrent_unordered_multiset(concurrent_unordered_multiset &&table, const Allocator &a)
 
concurrent_unordered_set(size_type n_of_buckets, const hasher &a_hasher, const allocator_type &a)
 
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value
 
void merge(concurrent_unordered_multiset< Key, Hash, Equality, Allocator > &source)
 
base_type::allocator_type allocator_type
 
Hash_compare hash_compare
 
base_type::const_reference const_reference
 
tbb::internal::allocator_traits< allocator_type >::size_type size_type
 
base_type::const_iterator const_iterator
 
void merge(concurrent_unordered_set< Key, Hash, Equality, Allocator > &&source)
 
base_type::pointer pointer
 
Traits::node_type node_type
 
Identifiers declared inside namespace internal should never be used directly by client code.
 
base_type::allocator_type allocator_type
 
base_type::iterator iterator
 
void merge(concurrent_unordered_set< Key, Hash, Equality, Allocator > &source)
 
Traits::value_type value_type
 
base_type::const_iterator const_local_iterator
 
base_type::node_type node_type
 
void move(tbb_thread &t1, tbb_thread &t2)