8#ifndef INCLUDED_BSLSTL_UNORDEREDSET
9#define INCLUDED_BSLSTL_UNORDEREDSET
645#include <bslscm_version.h>
682#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
683#include <initializer_list>
686#ifdef BSLS_COMPILERFEATURES_SUPPORT_TRAITS_HEADER
687#include <type_traits>
690#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
691 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
692# define BSLSTL_UNORDEREDSET_REQUIRES_CONTAINER_COMPATIBLE_RANGE(R, T) \
693 requires ::BloombergLP::bslmf::ContainerCompatibleRange<R, T>
695# define BSLSTL_UNORDEREDSET_REQUIRES_CONTAINER_COMPATIBLE_RANGE(R, T)
698#if BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
704# define COMPILING_BSLSTL_UNORDEREDSET_H
706# undef COMPILING_BSLSTL_UNORDEREDSET_H
745 typedef KEY ValueType;
750 typedef ::BloombergLP::bslstl::UnorderedSetKeyConfiguration<ValueType>
755 typedef ::BloombergLP::bslstl::HashTable<ListConfiguration,
758 ALLOCATOR> HashTable;
762 typedef ::BloombergLP::bslalg::BidirectionalLink HashTableLink;
766 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
769 template <
class KEY2,
791 typedef ::BloombergLP::bslstl::HashTableIterator<
793 typedef ::BloombergLP::bslstl::HashTableBucketIterator<
803 ::BloombergLP::bslmf::IsBitwiseMoveable,
804 ::BloombergLP::bslmf::IsBitwiseMoveable<HashTable>::value);
834 const HASH& hashFunction = HASH(),
835 const EQUAL& keyEqual = EQUAL(),
836 const ALLOCATOR& basicAllocator = ALLOCATOR());
838 const HASH& hashFunction,
839 const ALLOCATOR& basicAllocator);
841 const ALLOCATOR& basicAllocator);
878 const typename type_identity<ALLOCATOR>::type& basicAllocator);
895 BloombergLP::bslmf::MovableRef<unordered_set> original,
896 const typename type_identity<ALLOCATOR>::type& basicAllocator);
929 template <
class INPUT_ITERATOR>
933 const HASH& hashFunction = HASH(),
934 const EQUAL& keyEqual = EQUAL(),
935 const ALLOCATOR& basicAllocator = ALLOCATOR());
936 template <
class INPUT_ITERATOR>
940 const HASH& hashFunction,
941 const ALLOCATOR& basicAllocator);
942 template <
class INPUT_ITERATOR>
946 const ALLOCATOR& basicAllocator);
947 template <
class INPUT_ITERATOR>
950 const ALLOCATOR& basicAllocator);
952#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
953# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
955 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY &>>,
956 class = bsl::enable_if_t<
957 std::is_invocable_v<EQUAL, const KEY &, const KEY &>>,
958 class = bsl::enable_if_t< bsl::IsStdAllocator_v<ALLOCATOR>>
962 size_type initialNumBuckets = 0,
963 const HASH& hashFunction = HASH(),
964 const EQUAL& keyEqual = EQUAL(),
965 const ALLOCATOR& basicAllocator = ALLOCATOR());
966# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
968 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY &>>,
969 class = bsl::enable_if_t<bsl::IsStdAllocator<ALLOCATOR>::value>
973 size_type initialNumBuckets,
974 const HASH& hashFunction,
975 const ALLOCATOR& basicAllocator);
976# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
977 template <class = bsl::enable_if_t<bsl::IsStdAllocator<ALLOCATOR>::value>>
980 size_type initialNumBuckets,
981 const ALLOCATOR& basicAllocator);
982# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
1006 template <class = bsl::enable_if_t<bsl::IsStdAllocator<ALLOCATOR>::value>>
1009 const ALLOCATOR& basicAllocator);
1037 template <class RANGE>
1041 BSLS_COMPILERFEATURES_FORWARD_REF(RANGE) range,
1042 size_type initialNumBuckets = 0,
1043 const HASH& hashFunction = HASH(),
1044 const EQUAL& keyEqual = EQUAL(),
1045 const ALLOCATOR& basicAllocator = ALLOCATOR())
1046 : d_impl(hashFunction,
1054#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
1055 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
1056 if constexpr (ranges::sized_range<RANGE>) {
1057 constructFromRange(bsl::ranges::begin(range),
1058 bsl::ranges::end (range),
1059 bsl::ranges::size (range));
1063 constructFromRange(bsl::ranges::begin(range),
1064 bsl::ranges::end (range));
1068 template <
class RANGE>
1073 const HASH& hashFunction,
1074 const ALLOCATOR& basicAllocator)
1075 : d_impl(hashFunction, EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
1088 template <
class RANGE>
1093 const ALLOCATOR& basicAllocator)
1094 : d_impl(HASH(), EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
1107 template <
class RANGE>
1111 const ALLOCATOR& basicAllocator)
1112 : d_impl(HASH(), EQUAL(), 0, 1.0f, basicAllocator)
1156 operator=(BloombergLP::bslmf::MovableRef<unordered_set>
rhs)
1158 AllocatorTraits::is_always_equal::value
1159 && std::is_nothrow_move_assignable<HASH>::value
1160 && std::is_nothrow_move_assignable<EQUAL>::value);
1162#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1219#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1230 template <
class LOOKUP_KEY>
1232 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1233 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
1238 bool isInsertedFlag =
false;
1239 HashTableLink *result =
1240 d_impl.insertIfMissingTransparent(
1243 return ResultType(
iterator(result), isInsertedFlag);
1279 BloombergLP::bslmf::MovableRef<value_type> value);
1281#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1299 template <
class LOOKUP_KEY>
1301 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1302 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1326 template <
class INPUT_ITERATOR>
1327 void insert(INPUT_ITERATOR first, INPUT_ITERATOR last);
1329#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1335 void insert(std::initializer_list<KEY> values);
1348 template <
class RANGE>
1354#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
1355&& defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
1356 if constexpr (ranges::sized_range<RANGE>) {
1357 insertFromRange(bsl::ranges::begin(range),
1358 bsl::ranges::end (range),
1359 bsl::ranges::size (range));
1363 insertFromRange(bsl::ranges::begin(range),
1364 bsl::ranges::end (range));
1368#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1383 template <
class... Args>
1405 template <
class... Args>
1431 template <
class t_KEY>
1433 BloombergLP::bslmf::IsTransparentPredicate<HASH, t_KEY>::value &&
1434 BloombergLP::bslmf::IsTransparentPredicate<EQUAL,t_KEY>::value &&
1477 AllocatorTraits::is_always_equal::value
1478 && bsl::is_nothrow_swappable<HASH>::value
1479 && bsl::is_nothrow_swappable<EQUAL>::value);
1495 template <class LOOKUP_KEY>
1497 BloombergLP::
bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1498 && BloombergLP::
bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
1500 find(const LOOKUP_KEY& key)
1525 template <
class LOOKUP_KEY>
1527 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1528 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
1534 HashTableLink *first = d_impl.find(key);
1581 template <
class INPUT_ITERATOR,
class SENTINEL>
1582 void constructFromRange(INPUT_ITERATOR first, SENTINEL last);
1584#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
1585 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
1593 template <
class INPUT_ITERATOR,
class SENTINEL>
1594 void constructFromRange(INPUT_ITERATOR first,
1596 size_t numElements);
1601 template <
class INPUT_ITERATOR,
class SENTINEL>
1602 void insertFromRange(INPUT_ITERATOR first, SENTINEL last);
1604#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
1605 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
1612 template <
class INPUT_ITERATOR,
class SENTINEL>
1613 void insertFromRange(INPUT_ITERATOR first,
1615 size_t numElements);
1653 template <class LOOKUP_KEY>
1655 BloombergLP::
bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value &&
1656 BloombergLP::
bslmf::IsTransparentPredicate<EQUAL,
1695 template <class LOOKUP_KEY>
1697 BloombergLP::
bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1698 && BloombergLP::
bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
1700 find(const LOOKUP_KEY& key)
const
1720 template <
class LOOKUP_KEY>
1722 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1723 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
1727 return d_impl.find(key) != 0;
1751 template <
class LOOKUP_KEY>
1753 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1754 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
1760 HashTableLink *first = d_impl.find(key);
1805 template <class LOOKUP_KEY>
1807 BloombergLP::
bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1808 && BloombergLP::
bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
1812 return d_impl.bucketIndexForKey(key);
1853#ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
1864 class INPUT_ITERATOR,
1865 class KEY = BloombergLP::bslstl::IteratorUtil::IterVal_t<INPUT_ITERATOR>,
1869 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY&>>,
1870 class = bsl::enable_if_t<
1871 std::is_invocable_v<EQUAL, const KEY&, const KEY&>>,
1872 class = bsl::enable_if_t< bsl::IsStdAllocator_v<ALLOCATOR>>
1876 typename bsl::allocator_traits<ALLOCATOR>::size_type = 0,
1879 ALLOCATOR = ALLOCATOR())
1888 class INPUT_ITERATOR,
1889 class KEY = BloombergLP::bslstl::IteratorUtil::IterVal_t<INPUT_ITERATOR>,
1893 class DEFAULT_ALLOCATOR = bsl::allocator<KEY>,
1894 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
1898 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
1911 class INPUT_ITERATOR,
1912 class KEY = BloombergLP::bslstl::IteratorUtil::IterVal_t<INPUT_ITERATOR>,
1915 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY &>>,
1916 class = bsl::enable_if_t< bsl::IsStdAllocator_v<ALLOCATOR>>
1920 typename bsl::allocator_traits<ALLOCATOR>::size_type,
1931 class INPUT_ITERATOR,
1932 class KEY = BloombergLP::bslstl::IteratorUtil::IterVal_t<INPUT_ITERATOR>,
1935 class DEFAULT_ALLOCATOR = bsl::allocator<KEY>,
1936 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
1940 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
1950 class INPUT_ITERATOR,
1952 class KEY = BloombergLP::bslstl::IteratorUtil::IterVal_t<INPUT_ITERATOR>,
1953 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
1957 typename bsl::allocator_traits<ALLOCATOR>::size_type,
1959->
unordered_set<KEY, bsl::hash<KEY>, bsl::equal_to<KEY>, ALLOCATOR>;
1966 class INPUT_ITERATOR,
1967 class KEY = BloombergLP::bslstl::IteratorUtil::IterVal_t<INPUT_ITERATOR>,
1969 class DEFAULT_ALLOCATOR = bsl::allocator<KEY>,
1970 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
1974 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
1983 class INPUT_ITERATOR,
1985 class KEY = BloombergLP::bslstl::IteratorUtil::IterVal_t<INPUT_ITERATOR>,
1986 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
1989->
unordered_set<KEY, bsl::hash<KEY>, bsl::equal_to<KEY>, ALLOCATOR>;
1996 class INPUT_ITERATOR,
1997 class KEY = BloombergLP::bslstl::IteratorUtil::IterVal_t<INPUT_ITERATOR>,
1999 class DEFAULT_ALLOCATOR = bsl::allocator<KEY>,
2000 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
2014 class HASH = bsl::hash<KEY>,
2015 class EQUAL = bsl::equal_to<KEY>,
2016 class ALLOCATOR = bsl::allocator<KEY>,
2017 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY&>>,
2018 class = bsl::enable_if_t<
2019 std::is_invocable_v<EQUAL, const KEY&, const KEY&>>,
2020 class = bsl::enable_if_t< bsl::IsStdAllocator_v<ALLOCATOR>>
2023 typename bsl::allocator_traits<ALLOCATOR>::size_type = 0,
2026 ALLOCATOR = ALLOCATOR())
2039 class DEFAULT_ALLOCATOR = bsl::allocator<KEY>,
2040 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
2043 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
2059 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY &>>,
2060 class = bsl::enable_if_t< bsl::IsStdAllocator_v<ALLOCATOR>>
2063 typename bsl::allocator_traits<ALLOCATOR>::size_type,
2077 class DEFAULT_ALLOCATOR = bsl::allocator<KEY>,
2078 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
2081 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
2093 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
2096 typename bsl::allocator_traits<ALLOCATOR>::size_type,
2098->
unordered_set<KEY, bsl::hash<KEY>, bsl::equal_to<KEY>, ALLOCATOR>;
2107 class DEFAULT_ALLOCATOR = bsl::allocator<KEY>,
2108 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
2111 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
2122 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
2125->
unordered_set<KEY, bsl::hash<KEY>, bsl::equal_to<KEY>, ALLOCATOR>;
2134 class DEFAULT_ALLOCATOR = bsl::allocator<KEY>,
2135 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
2151template <class KEY, class HASH, class EQUAL, class ALLOCATOR>
2152bool operator==(const unordered_set<KEY, HASH, EQUAL, ALLOCATOR>& lhs,
2153 const unordered_set<KEY, HASH, EQUAL, ALLOCATOR>& rhs);
2155#ifndef BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON
2156template <class KEY, class HASH, class EQUAL, class ALLOCATOR>
2157bool operator!=(const unordered_set<KEY, HASH, EQUAL, ALLOCATOR>& lhs,
2158 const unordered_set<KEY, HASH, EQUAL, ALLOCATOR>& rhs);
2173template <class KEY, class HASH, class EQUAL, class ALLOCATOR, class PREDICATE>
2175erase_if(unordered_set<KEY, HASH, EQUAL, ALLOCATOR>& s, PREDICATE predicate);
2177template <class KEY, class HASH, class EQUAL, class ALLOCATOR>
2178void swap(unordered_set<KEY, HASH, EQUAL, ALLOCATOR>& a,
2179 unordered_set<KEY, HASH, EQUAL, ALLOCATOR>& b)
2181 BSLS_KEYWORD_NOEXCEPT_OPERATOR(a.swap(b)));
2204template <class KEY, class HASH, class EQUAL, class ALLOCATOR>
2205template <class INPUT_ITERATOR, class SENTINEL>
2207void
unordered_set<KEY, HASH, EQUAL, ALLOCATOR>::constructFromRange(
2208 INPUT_ITERATOR first,
2218 if (first == last) {
2223 BloombergLP::bslstl::IteratorUtil::
2224 canCalculateInsertDistance<INPUT_ITERATOR,SENTINEL>()) {
2226 BloombergLP::bslstl::IteratorUtil::insertDistance(first, last));
2229 bool isInsertedFlag;
2231 while (first != last) {
2232 d_impl.insertIfMissing(&isInsertedFlag, *first);
2237#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
2238 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
2240template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2241template <
class INPUT_ITERATOR,
class SENTINEL>
2243void unordered_set<KEY, HASH, EQUAL, ALLOCATOR>::constructFromRange(
2244 INPUT_ITERATOR first,
2249 !BloombergLP::bslstl::IteratorUtil
2250 ::canCalculateInsertDistance<INPUT_ITERATOR, SENTINEL>()
2251 || numElements ==
static_cast<size_t>(
2252 BloombergLP::bslstl::IteratorUtil::insertDistance(first, last))));
2255 if (0 < numElements) {
2259 bool isInsertedFlag;
2261 while (first != last) {
2262 d_impl.insertIfMissing(&isInsertedFlag, *first);
2269template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2270template <
class INPUT_ITERATOR,
class SENTINEL>
2272void unordered_set<KEY, HASH, EQUAL, ALLOCATOR>::insertFromRange(
2273 INPUT_ITERATOR first,
2284 ::canCalculateInsertDistance<INPUT_ITERATOR, SENTINEL>()) {
2286 + BloombergLP::bslstl::IteratorUtil::insertDistance(first, last));
2289 bool isInsertedFlag;
2291 while (first != last) {
2292 d_impl.insertIfMissing(&isInsertedFlag, *first);
2297#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
2298 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
2300template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2301template <
class INPUT_ITERATOR,
class SENTINEL>
2303void unordered_set<KEY, HASH, EQUAL, ALLOCATOR>::insertFromRange(
2304 INPUT_ITERATOR first,
2309 !BloombergLP::bslstl::IteratorUtil
2310 ::canCalculateInsertDistance<INPUT_ITERATOR, SENTINEL>()
2311 || numElements ==
static_cast<size_t>(
2312 BloombergLP::bslstl::IteratorUtil::insertDistance(first, last))));
2316 bool isInsertedFlag;
2318 while (first != last) {
2319 d_impl.insertIfMissing(&isInsertedFlag, *first);
2327template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2330: d_impl(HASH(), EQUAL(), 0, 1.0f, ALLOCATOR())
2334template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2338 const HASH& hashFunction,
2339 const EQUAL& keyEqual,
2340 const ALLOCATOR& basicAllocator)
2341: d_impl(hashFunction, keyEqual, initialNumBuckets, 1.0f, basicAllocator)
2345template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2349 const HASH& hashFunction,
2350 const ALLOCATOR& basicAllocator)
2351: d_impl(hashFunction, EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
2355template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2359 const ALLOCATOR& basicAllocator)
2360: d_impl(HASH(), EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
2364template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2367 const ALLOCATOR& basicAllocator)
2368: d_impl(basicAllocator)
2372template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2376: d_impl(original.d_impl,
2378 original.get_allocator()))
2382template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2385 BloombergLP::bslmf::MovableRef<unordered_set> original)
2386: d_impl(MoveUtil::move(MoveUtil::access(original).d_impl))
2390template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2394 const typename type_identity<ALLOCATOR>::type& basicAllocator)
2395: d_impl(original.d_impl, basicAllocator)
2399template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2402 BloombergLP::bslmf::MovableRef<unordered_set> original,
2403 const typename type_identity<ALLOCATOR>::type& basicAllocator)
2404: d_impl(MoveUtil::move(MoveUtil::access(original).d_impl), basicAllocator)
2408template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2409template <
class INPUT_ITERATOR>
2412 INPUT_ITERATOR first,
2413 INPUT_ITERATOR last,
2415 const HASH& hashFunction,
2416 const EQUAL& keyEqual,
2417 const ALLOCATOR& basicAllocator)
2418: d_impl(hashFunction, keyEqual, initialNumBuckets, 1.0f, basicAllocator)
2420 constructFromRange(first, last);
2423template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2424template <
class INPUT_ITERATOR>
2427 INPUT_ITERATOR first,
2428 INPUT_ITERATOR last,
2430 const HASH& hashFunction,
2431 const ALLOCATOR& basicAllocator)
2432: d_impl(hashFunction, EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
2434 constructFromRange(first, last);
2437template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2438template <
class INPUT_ITERATOR>
2441 INPUT_ITERATOR first,
2442 INPUT_ITERATOR last,
2444 const ALLOCATOR& basicAllocator)
2445: d_impl(HASH(), EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
2447 constructFromRange(first, last);
2450template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2451template <
class INPUT_ITERATOR>
2454 INPUT_ITERATOR first,
2455 INPUT_ITERATOR last,
2456 const ALLOCATOR& basicAllocator)
2457: d_impl(HASH(), EQUAL(), 0, 1.0f, basicAllocator)
2459 constructFromRange(first, last);
2462#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
2463template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2464#ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
2465template <
class,
class,
class>
2469 std::initializer_list<KEY> values,
2470 size_type initialNumBuckets,
2471 const hasher& hashFunction,
2472 const key_equal& keyEqual,
2473 const ALLOCATOR& basicAllocator)
2475 hashFunction, keyEqual, basicAllocator)
2479template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2480#ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
2481template <
class,
class>
2485 std::initializer_list<KEY> values,
2486 size_type initialNumBuckets,
2487 const HASH& hashFunction,
2488 const ALLOCATOR& basicAllocator)
2489: unordered_set(values.begin(),
2498template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2499#ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
2504 std::initializer_list<KEY> values,
2505 size_type initialNumBuckets,
2506 const ALLOCATOR& basicAllocator)
2507: unordered_set(values.
begin(),
2516template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2517#ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
2522 std::initializer_list<KEY> values,
2523 const ALLOCATOR& basicAllocator)
2524: unordered_set(values.
begin(),
2535template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2543template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2551 d_impl =
rhs.d_impl;
2556template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2560 BloombergLP::bslmf::MovableRef<unordered_set>
rhs)
2562 AllocatorTraits::is_always_equal::value
2563 && std::is_nothrow_move_assignable<HASH>::value
2564 && std::is_nothrow_move_assignable<EQUAL>::value)
2571 d_impl = MoveUtil::move(lvalue.d_impl);
2576#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
2577template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2579unordered_set<KEY, HASH, EQUAL, ALLOCATOR>&
2581 std::initializer_list<KEY> values)
2583 unordered_set tmp(values, d_impl.allocator());
2585 d_impl.swap(tmp.d_impl);
2591template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2596 return iterator(d_impl.elementListRoot());
2599template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2607template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2617template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2627template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2634#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
2635template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2636template <
class... Args>
2638pair<typename unordered_set<KEY, HASH, EQUAL, ALLOCATOR>::iterator,
bool>
2643 bool isInsertedFlag =
false;
2645 HashTableLink *result = d_impl.emplaceIfMissing(
2648 return ResultType(
iterator(result), isInsertedFlag);
2651template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2652template <
class... Args>
2656 Args&&... arguments)
2671template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2680 if (first == this->
end()) {
2681 return ResultType(first, first);
2685 return ResultType(first, ++next);
2689template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2696 return iterator(d_impl.remove(position.node()));
2699template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2704 if (HashTableLink *target = d_impl.find(key)) {
2705 d_impl.remove(target);
2713template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2719#if defined BDE_BUILD_TARGET_SAFE_2
2720 if (first != last) {
2723 for (; it != first; ++it) {
2727 for (; it != last; ++it) {
2733 while (first != last) {
2734 first = this->
erase(first);
2740template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2748template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2755 bool isInsertedFlag =
false;
2757 HashTableLink *result = d_impl.insertIfMissing(&isInsertedFlag, value);
2759 return ResultType(
iterator(result), isInsertedFlag);
2762template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2766 BloombergLP::bslmf::MovableRef<value_type> value)
2770 bool isInsertedFlag =
false;
2772 HashTableLink *result = d_impl.insertIfMissing(&isInsertedFlag,
2773 MoveUtil::move(value));
2775 return ResultType(
iterator(result), isInsertedFlag);
2778template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2792 return this->insert(value).first;
2795template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2800 BloombergLP::bslmf::MovableRef<value_type> value)
2810 return this->insert(MoveUtil::move(value)).first;
2813template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2814template <
class INPUT_ITERATOR>
2817 INPUT_ITERATOR last)
2819 insertFromRange(first, last);
2822#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
2823template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2826 std::initializer_list<KEY> values)
2828 insert(values.begin(), values.end());
2832template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2835 float newLoadFactor)
2837 d_impl.setMaxLoadFactor(newLoadFactor);
2840template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2844 d_impl.rehashForNumBuckets(numBuckets);
2847template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2852 d_impl.reserveForNumElements(numElements);
2855template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2859 AllocatorTraits::is_always_equal::value
2860 && bsl::is_nothrow_swappable<HASH>::value
2861 && bsl::is_nothrow_swappable<EQUAL>::value)
2863 d_impl.swap(other.d_impl);
2867template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2872 return d_impl.allocator();
2875template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2883template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2891template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2900template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2908template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2913 return find(key) !=
end();
2916template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2921 return 0 == d_impl.size();
2924template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2929 return d_impl.size();
2932template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2938 return AllocatorTraits::max_size(get_allocator());
2941template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2946 return d_impl.hasher();
2949template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2954 return d_impl.comparator();
2957template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2965template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2970 return 0 != d_impl.find(key);
2973template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2983 if (first == this->
end()) {
2984 return ResultType(first, first);
2988 return ResultType(first, ++next);
2992template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
2998 return d_impl.numBuckets();
3001template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
3007 return d_impl.maxNumBuckets();
3010template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
3017 return d_impl.countElementsInBucket(index);
3020template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
3027 return d_impl.bucketIndexForKey(key);
3030template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
3040template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
3050template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
3060template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
3070template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
3075 return d_impl.loadFactor();
3078template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
3083 return d_impl.maxLoadFactor();
3089template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
3091bool bsl::operator==(
3095 return lhs.d_impl == rhs.d_impl;
3098#ifndef BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON
3099template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
3110template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR,
class PREDICATE>
3114 PREDICATE predicate)
3116 return BloombergLP::bslstl::AlgorithmUtil::containerEraseIf(s, predicate);
3119template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
3145template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
3154template <
class KEY,
class HASH,
class EQUAL,
class ALLOCATOR>
Definition bslma_bslallocator.h:588
Definition bslstl_string.h:1252
Definition bslstl_pair.h:1280
Definition bslstl_unorderedset.h:733
void swap(unordered_set &other) BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(AllocatorTraits void clear() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedset.h:1485
unordered_set & operator=(const unordered_set &rhs)
Definition bslstl_unorderedset.h:2546
EQUAL key_equal
Definition bslstl_unorderedset.h:782
AllocatorTraits::const_pointer const_pointer
Definition bslstl_unorderedset.h:790
enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, pair< const_iterator, const_iterator > >::type equal_range(const LOOKUP_KEY &key) const
Definition bslstl_unorderedset.h:1756
void rehash(size_type numBuckets)
Definition bslstl_unorderedset.h:2842
pair< iterator, iterator > equal_range(const key_type &key)
Definition bslstl_unorderedset.h:2675
unordered_set(INPUT_ITERATOR first, INPUT_ITERATOR last, size_type initialNumBuckets, const ALLOCATOR &basicAllocator)
Definition bslstl_unorderedset.h:2440
pair< iterator, bool > insert(const value_type &value)
Definition bslstl_unorderedset.h:2751
iterator insert(const_iterator hint, const value_type &value)
Definition bslstl_unorderedset.h:2781
EQUAL key_eq() const
Definition bslstl_unorderedset.h:2952
unordered_set &operator=(BloombergLP::bslmf::MovableRef< unordered_set > rhs) BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(AllocatorTraits iterator begin() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedset.h:2594
iterator insert(const_iterator hint, BloombergLP::bslmf::MovableRef< value_type > value)
Definition bslstl_unorderedset.h:2798
enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, t_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, t_KEY >::value &&!is_convertible< BSLS_COMPILERFEATURES_FORWARD_REF(t_KEY), iterator >::value &&!is_convertible< BSLS_COMPILERFEATURES_FORWARD_REF(t_KEY), const_iterator >::value, size_type >::type erase(BSLS_COMPILERFEATURES_FORWARD_REF(t_KEY) key)
Definition bslstl_unorderedset.h:1439
HASH hasher
Definition bslstl_unorderedset.h:781
HASH hash_function() const
Definition bslstl_unorderedset.h:2944
pair< const_iterator, const_iterator > equal_range(const key_type &key) const
Definition bslstl_unorderedset.h:2977
unordered_set(BloombergLP::bslmf::MovableRef< unordered_set > original)
Definition bslstl_unorderedset.h:2384
size_type bucket_size(size_type index) const
Definition bslstl_unorderedset.h:3013
size_type max_bucket_count() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedset.h:3004
AllocatorTraits::size_type size_type
Definition bslstl_unorderedset.h:787
ALLOCATOR allocator_type
Definition bslstl_unorderedset.h:783
enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, pair< iterator, iterator > >::type equal_range(const LOOKUP_KEY &key)
Definition bslstl_unorderedset.h:1530
const_local_iterator cbegin(size_type index) const
Definition bslstl_unorderedset.h:3053
unordered_set(const ALLOCATOR &basicAllocator)
Definition bslstl_unorderedset.h:2366
enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, size_type >::type count(const LOOKUP_KEY &key) const
Definition bslstl_unorderedset.h:1725
const_iterator cbegin() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedset.h:2894
friend bool operator==(const unordered_set< KEY2, HASH2, EQUAL2, ALLOCATOR2 > &, const unordered_set< KEY2, HASH2, EQUAL2, ALLOCATOR2 > &)
void max_load_factor(float newLoadFactor)
Definition bslstl_unorderedset.h:2834
ALLOCATOR get_allocator() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedset.h:2869
KEY value_type
Definition bslstl_unorderedset.h:780
bool empty() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedset.h:2919
bool contains(const key_type &key) const
Definition bslstl_unorderedset.h:2910
~unordered_set()
Destroy this object.
Definition bslstl_unorderedset.h:2537
iterator find(const key_type &key)
Definition bslstl_unorderedset.h:2743
void insert(INPUT_ITERATOR first, INPUT_ITERATOR last)
Definition bslstl_unorderedset.h:2816
unordered_set(const unordered_set &original, const typename type_identity< ALLOCATOR >::type &basicAllocator)
Definition bslstl_unorderedset.h:2392
iterator emplace_hint(const_iterator hint, Args &&... arguments)
Definition bslstl_unorderedset.h:2655
enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value &&!bsl::is_convertible< LOOKUP_KEY &&, iterator >::value &&!bsl::is_convertible< LOOKUP_KEY &&, const_iterator >::value, iterator >::type insert(const_iterator, LOOKUP_KEY &&value)
Definition bslstl_unorderedset.h:1306
size_type bucket(const key_type &key) const
Definition bslstl_unorderedset.h:3023
float load_factor() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedset.h:3072
local_iterator const_local_iterator
Definition bslstl_unorderedset.h:797
::BloombergLP::bslstl::HashTableIterator< const value_type, difference_type > iterator
Definition bslstl_unorderedset.h:792
unordered_set(BloombergLP::bslmf::MovableRef< unordered_set > original, const typename type_identity< ALLOCATOR >::type &basicAllocator)
Definition bslstl_unorderedset.h:2401
unordered_set(size_type initialNumBuckets, const ALLOCATOR &basicAllocator)
Definition bslstl_unorderedset.h:2357
const_local_iterator end(size_type index) const
Definition bslstl_unorderedset.h:3043
AllocatorTraits::difference_type difference_type
Definition bslstl_unorderedset.h:788
pair< iterator, bool > emplace(Args &&... arguments)
const_local_iterator cend(size_type index) const
Definition bslstl_unorderedset.h:3063
size_type count(const key_type &key) const
Definition bslstl_unorderedset.h:2968
unordered_set(const unordered_set &original)
Definition bslstl_unorderedset.h:2374
const_local_iterator begin(size_type index) const
Definition bslstl_unorderedset.h:3033
enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, iterator >::type find(const LOOKUP_KEY &key)
Definition bslstl_unorderedset.h:1500
void reserve(size_type numElements)
Definition bslstl_unorderedset.h:2850
void insert_range(BSLS_COMPILERFEATURES_FORWARD_REF(RANGE) range)
Definition bslstl_unorderedset.h:1350
size_type max_size() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedset.h:2935
const_iterator find(const key_type &key) const
Definition bslstl_unorderedset.h:2960
const_iterator cend() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedset.h:2903
iterator end() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedset.h:2602
unordered_set(INPUT_ITERATOR first, INPUT_ITERATOR last, const ALLOCATOR &basicAllocator)
Definition bslstl_unorderedset.h:2453
iterator erase(const_iterator position)
Definition bslstl_unorderedset.h:2692
unordered_set(size_type initialNumBuckets, const HASH &hashFunction, const ALLOCATOR &basicAllocator)
Definition bslstl_unorderedset.h:2347
iterator erase(const_iterator first, const_iterator last)
Definition bslstl_unorderedset.h:2716
size_type bucket_count() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedset.h:2995
AllocatorTraits::pointer pointer
Definition bslstl_unorderedset.h:789
const value_type & const_reference
Definition bslstl_unorderedset.h:785
BSLMF_NESTED_TRAIT_DECLARATION_IF(unordered_set, ::BloombergLP::bslmf::IsBitwiseMoveable, ::BloombergLP::bslmf::IsBitwiseMoveable< HashTable >::value)
KEY key_type
Definition bslstl_unorderedset.h:779
float max_load_factor() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedset.h:3080
unordered_set(INPUT_ITERATOR first, INPUT_ITERATOR last, size_type initialNumBuckets, const HASH &hashFunction, const ALLOCATOR &basicAllocator)
Definition bslstl_unorderedset.h:2426
unordered_set()
Definition bslstl_unorderedset.h:2329
::BloombergLP::bslstl::HashTableBucketIterator< const value_type, difference_type > local_iterator
Definition bslstl_unorderedset.h:794
unordered_set(size_type initialNumBuckets, const HASH &hashFunction=HASH(), const EQUAL &keyEqual=EQUAL(), const ALLOCATOR &basicAllocator=ALLOCATOR())
Definition bslstl_unorderedset.h:2336
enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, pair< iterator, bool > >::type insert(LOOKUP_KEY &&value)
Definition bslstl_unorderedset.h:1235
size_type size() const BSLS_KEYWORD_NOEXCEPT
Return the number of elements in this set.
Definition bslstl_unorderedset.h:2927
iterator const_iterator
Definition bslstl_unorderedset.h:796
unordered_set(INPUT_ITERATOR first, INPUT_ITERATOR last, size_type initialNumBuckets=0, const HASH &hashFunction=HASH(), const EQUAL &keyEqual=EQUAL(), const ALLOCATOR &basicAllocator=ALLOCATOR())
Definition bslstl_unorderedset.h:2411
value_type & reference
Definition bslstl_unorderedset.h:784
size_type erase(const key_type &key)
Definition bslstl_unorderedset.h:2702
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_COMPILERFEATURES_FORWARD_REF(T)
Definition bsls_compilerfeatures.h:2343
#define BSLS_COMPILERFEATURES_FORWARD(T, V)
Definition bsls_compilerfeatures.h:2349
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_CONSTEXPR_CPP17
Definition bsls_keyword.h:639
#define BSLS_KEYWORD_NOEXCEPT_OPERATOR(...)
Definition bsls_keyword.h:677
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
#define BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(...)
Definition bsls_keyword.h:676
#define BSLSTL_UNORDEREDSET_REQUIRES_CONTAINER_COMPATIBLE_RANGE(R, T)
Definition bslstl_unorderedset.h:695
Definition bdlat_valuetypefunctions.h:939
void swap(array< VALUE_TYPE, SIZE > &lhs, array< VALUE_TYPE, SIZE > &rhs)
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
deque< VALUE_TYPE, ALLOCATOR >::size_type erase(deque< VALUE_TYPE, ALLOCATOR > &deq, const BDE_OTHER_TYPE &value)
Definition bslstl_deque.h:4424
T::iterator begin(T &container)
Definition bslstl_iterator.h:1593
const from_range_t from_range
ALLOCATOR & lhs
Definition bslstl_string.h:3917
T::iterator end(T &container)
Definition bslstl_iterator.h:1621
deque< VALUE_TYPE, ALLOCATOR >::size_type erase_if(deque< VALUE_TYPE, ALLOCATOR > &deq, PREDICATE predicate)
Definition bslstl_deque.h:4433
bool operator!=(const memory_resource &a, const memory_resource &b)
Definition bdlc_flathashmap.h:2218
Definition baljsn_encoder_testtypes.h:76
Definition bdlbb_blob.h:579
Definition bdldfp_decimal.h:5549
Definition bslma_allocatortraits.h:1089
BloombergLP::bslma::AllocatorTraits_ConstPointerType< ALLOCATOR >::type const_pointer
Definition bslma_allocatortraits.h:1183
BloombergLP::bslma::AllocatorTraits_SizeType< ALLOCATOR >::type size_type
Definition bslma_allocatortraits.h:1196
BloombergLP::bslma::AllocatorTraits_PointerType< ALLOCATOR >::type pointer
Definition bslma_allocatortraits.h:1180
BloombergLP::bslma::AllocatorTraits_DifferenceType< ALLOCATOR >::type difference_type
Definition bslma_allocatortraits.h:1193
Definition bslmf_enableif.h:530
Definition bslstl_equalto.h:316
Definition bslstl_ranges.h:301
Definition bslstl_hash.h:495
Definition bslmf_isconvertible.h:875
Definition bslalg_hasstliterators.h:99
Definition bslma_usesbslmaallocator.h:344