11#ifndef INCLUDED_BDLC_FLATHASHSET_CPP03
12#define INCLUDED_BDLC_FLATHASHSET_CPP03
63#ifdef COMPILING_BDLC_FLATHASHSET_H
74template <
class KEY,
class HASH,
class EQUAL>
75bool operator==(
const FlatHashSet<KEY, HASH, EQUAL> &a,
76 const FlatHashSet<KEY, HASH, EQUAL> &b);
78template <
class KEY,
class HASH,
class EQUAL>
79bool operator!=(
const FlatHashSet<KEY, HASH, EQUAL> &a,
80 const FlatHashSet<KEY, HASH, EQUAL> &b);
82template <
class KEY,
class HASH,
class EQUAL>
83void swap(FlatHashSet<KEY, HASH, EQUAL>& a, FlatHashSet<KEY, HASH, EQUAL>& b);
93struct FlatHashSet_EntryUtil
96#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
99#ifndef BDLC_FLATHASHSET_VARIADIC_LIMIT
100#define BDLC_FLATHASHSET_VARIADIC_LIMIT 10
102#ifndef BDLC_FLATHASHSET_VARIADIC_LIMIT_A
103#define BDLC_FLATHASHSET_VARIADIC_LIMIT_A BDLC_FLATHASHSET_VARIADIC_LIMIT
105#if BDLC_FLATHASHSET_VARIADIC_LIMIT_A >= 0
111#if BDLC_FLATHASHSET_VARIADIC_LIMIT_A >= 1
112 template <
class ARGS_01>
119#if BDLC_FLATHASHSET_VARIADIC_LIMIT_A >= 2
120 template <
class ARGS_01,
129#if BDLC_FLATHASHSET_VARIADIC_LIMIT_A >= 3
130 template <
class ARGS_01,
141#if BDLC_FLATHASHSET_VARIADIC_LIMIT_A >= 4
142 template <
class ARGS_01,
155#if BDLC_FLATHASHSET_VARIADIC_LIMIT_A >= 5
156 template <
class ARGS_01,
171#if BDLC_FLATHASHSET_VARIADIC_LIMIT_A >= 6
172 template <
class ARGS_01,
189#if BDLC_FLATHASHSET_VARIADIC_LIMIT_A >= 7
190 template <
class ARGS_01,
209#if BDLC_FLATHASHSET_VARIADIC_LIMIT_A >= 8
210 template <
class ARGS_01,
231#if BDLC_FLATHASHSET_VARIADIC_LIMIT_A >= 9
232 template <
class ARGS_01,
255#if BDLC_FLATHASHSET_VARIADIC_LIMIT_A >= 10
256 template <
class ARGS_01,
284 template <
class... ARGS>
296 template <
class KEY_TYPE>
303 static const ENTRY&
key(
const ENTRY& entry);
318template <
class KEY,
class HASH,
class EQUAL>
325 typedef FlatHashTable<KEY,
327 FlatHashSet_EntryUtil<KEY>,
336 template <
class K,
class H,
class E>
337 friend void swap(FlatHashSet<K, H, E>&, FlatHashSet<K, H, E>&);
408 template <
class INPUT_ITERATOR>
412 template <
class INPUT_ITERATOR>
417 template <
class INPUT_ITERATOR>
423 template <
class INPUT_ITERATOR>
431#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
510#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
527#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
530#ifndef BDLC_FLATHASHSET_VARIADIC_LIMIT
531#define BDLC_FLATHASHSET_VARIADIC_LIMIT 10
533#ifndef BDLC_FLATHASHSET_VARIADIC_LIMIT_B
534#define BDLC_FLATHASHSET_VARIADIC_LIMIT_B BDLC_FLATHASHSET_VARIADIC_LIMIT
536#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 0
541#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 1
542 template <
class ARGS_01>
547#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 2
548 template <
class ARGS_01,
555#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 3
556 template <
class ARGS_01,
565#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 4
566 template <
class ARGS_01,
577#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 5
578 template <
class ARGS_01,
591#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 6
592 template <
class ARGS_01,
607#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 7
608 template <
class ARGS_01,
625#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 8
626 template <
class ARGS_01,
645#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 9
646 template <
class ARGS_01,
667#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 10
668 template <
class ARGS_01,
692#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 0
696#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 1
697 template <
class ARGS_01>
702#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 2
703 template <
class ARGS_01,
710#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 3
711 template <
class ARGS_01,
720#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 4
721 template <
class ARGS_01,
732#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 5
733 template <
class ARGS_01,
746#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 6
747 template <
class ARGS_01,
762#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 7
763 template <
class ARGS_01,
780#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 8
781 template <
class ARGS_01,
800#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 9
801 template <
class ARGS_01,
822#if BDLC_FLATHASHSET_VARIADIC_LIMIT_B >= 10
823 template <
class ARGS_01,
849 template <
class... ARGS>
853 template <
class... ARGS>
864 bsl::size_t
erase(
const KEY& key);
869 template <
class LOOKUP_KEY>
871 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
872 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
876 return d_impl.erase(key);
912 return d_impl.insert(value);
933 template <
class LOOKUP_KEY>
935 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
936 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
940 return d_impl.insertTransparent(
955 return d_impl.insert(value).first;
975 template <
class LOOKUP_KEY>
977 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
978 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1000 template <
class INPUT_ITERATOR>
1001 void insert(INPUT_ITERATOR first, INPUT_ITERATOR last);
1003#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1009 void insert(bsl::initializer_list<KEY> values);
1019 void rehash(bsl::size_t minimumCapacity);
1034 void reserve(bsl::size_t numEntries);
1057 bool contains(
const KEY& key)
const;
1061 template <
class LOOKUP_KEY>
1063 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1064 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1066 contains(
const LOOKUP_KEY& key)
const
1077 bsl::size_t
count(
const KEY& key)
const;
1086 template <
class LOOKUP_KEY>
1088 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1089 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1090 , bsl::size_t >::type
1091 count(
const LOOKUP_KEY& key)
const
1095 return find(key) !=
end() ? 1 : 0;
1111 const KEY& key)
const;
1123 template <
class LOOKUP_KEY>
1125 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1126 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1132 return d_impl.equal_range(key);
1143 template <
class LOOKUP_KEY>
1145 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1146 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1148 find(
const LOOKUP_KEY& key)
const
1180 bsl::size_t
size()
const;
1217 bsl::ostream&
print(bsl::ostream& stream,
1219 int spacesPerLevel = 4)
const;
1229template <
class KEY,
class HASH,
class EQUAL>
1230bool operator==(
const FlatHashSet<KEY, HASH, EQUAL> &lhs,
1231 const FlatHashSet<KEY, HASH, EQUAL> &rhs);
1238template <
class KEY,
class HASH,
class EQUAL>
1239bool operator!=(
const FlatHashSet<KEY, HASH, EQUAL> &lhs,
1240 const FlatHashSet<KEY, HASH, EQUAL> &rhs);
1248template <
class KEY,
class HASH,
class EQUAL>
1249bsl::ostream&
operator<<(bsl::ostream& stream,
1250 const FlatHashSet<KEY, HASH, EQUAL>& set);
1258template <
class KEY,
class HASH,
class EQUAL>
1259void swap(FlatHashSet<KEY, HASH, EQUAL>& a, FlatHashSet<KEY, HASH, EQUAL>& b);
1270#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
1273#ifndef BDLC_FLATHASHSET_VARIADIC_LIMIT
1274#define BDLC_FLATHASHSET_VARIADIC_LIMIT 10
1276#ifndef BDLC_FLATHASHSET_VARIADIC_LIMIT_F
1277#define BDLC_FLATHASHSET_VARIADIC_LIMIT_F BDLC_FLATHASHSET_VARIADIC_LIMIT
1279#if BDLC_FLATHASHSET_VARIADIC_LIMIT_F >= 0
1280template <
class ENTRY>
1293#if BDLC_FLATHASHSET_VARIADIC_LIMIT_F >= 1
1294template <
class ENTRY>
1295template <
class ARGS_01>
1310#if BDLC_FLATHASHSET_VARIADIC_LIMIT_F >= 2
1311template <
class ENTRY>
1312template <
class ARGS_01,
1330#if BDLC_FLATHASHSET_VARIADIC_LIMIT_F >= 3
1331template <
class ENTRY>
1332template <
class ARGS_01,
1353#if BDLC_FLATHASHSET_VARIADIC_LIMIT_F >= 4
1354template <
class ENTRY>
1355template <
class ARGS_01,
1379#if BDLC_FLATHASHSET_VARIADIC_LIMIT_F >= 5
1380template <
class ENTRY>
1381template <
class ARGS_01,
1408#if BDLC_FLATHASHSET_VARIADIC_LIMIT_F >= 6
1409template <
class ENTRY>
1410template <
class ARGS_01,
1440#if BDLC_FLATHASHSET_VARIADIC_LIMIT_F >= 7
1441template <
class ENTRY>
1442template <
class ARGS_01,
1475#if BDLC_FLATHASHSET_VARIADIC_LIMIT_F >= 8
1476template <
class ENTRY>
1477template <
class ARGS_01,
1513#if BDLC_FLATHASHSET_VARIADIC_LIMIT_F >= 9
1514template <
class ENTRY>
1515template <
class ARGS_01,
1554#if BDLC_FLATHASHSET_VARIADIC_LIMIT_F >= 10
1555template <
class ENTRY>
1556template <
class ARGS_01,
1601template <
class ENTRY>
1602template <
class... ARGS>
1618template <
class ENTRY>
1634template <
class ENTRY>
1646template <
class KEY,
class HASH,
class EQUAL>
1649: d_impl(0, HASH(), EQUAL())
1653template <
class KEY,
class HASH,
class EQUAL>
1655FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(
bslma::Allocator *basicAllocator)
1656: d_impl(0, HASH(), EQUAL(), basicAllocator)
1660template <
class KEY,
class HASH,
class EQUAL>
1662FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(bsl::size_t capacity)
1663: d_impl(capacity, HASH(), EQUAL())
1667template <
class KEY,
class HASH,
class EQUAL>
1669FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(bsl::size_t capacity,
1671: d_impl(capacity, HASH(), EQUAL(), basicAllocator)
1675template <
class KEY,
class HASH,
class EQUAL>
1677FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(bsl::size_t capacity,
1680: d_impl(capacity, hash, EQUAL(), basicAllocator)
1684template <
class KEY,
class HASH,
class EQUAL>
1686FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(bsl::size_t capacity,
1690: d_impl(capacity, hash, equal, basicAllocator)
1694template <
class KEY,
class HASH,
class EQUAL>
1695template <
class INPUT_ITERATOR>
1697FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(INPUT_ITERATOR first,
1698 INPUT_ITERATOR last,
1700: d_impl(0, HASH(), EQUAL(), basicAllocator)
1702 insert(first, last);
1705template <
class KEY,
class HASH,
class EQUAL>
1706template <
class INPUT_ITERATOR>
1708FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(INPUT_ITERATOR first,
1709 INPUT_ITERATOR last,
1710 bsl::size_t capacity,
1712: d_impl(capacity, HASH(), EQUAL(), basicAllocator)
1714 insert(first, last);
1717template <
class KEY,
class HASH,
class EQUAL>
1718template <
class INPUT_ITERATOR>
1720FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(INPUT_ITERATOR first,
1721 INPUT_ITERATOR last,
1722 bsl::size_t capacity,
1725: d_impl(capacity, hash, EQUAL(), basicAllocator)
1727 insert(first, last);
1730template <
class KEY,
class HASH,
class EQUAL>
1731template <
class INPUT_ITERATOR>
1733FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(INPUT_ITERATOR first,
1734 INPUT_ITERATOR last,
1735 bsl::size_t capacity,
1739: d_impl(capacity, hash, equal, basicAllocator)
1741 insert(first, last);
1744#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1745template <
class KEY,
class HASH,
class EQUAL>
1747FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(
1748 bsl::initializer_list<KEY> values,
1750: FlatHashSet(values.
begin(),
1759template <
class KEY,
class HASH,
class EQUAL>
1761FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(
1762 bsl::initializer_list<KEY> values,
1763 bsl::size_t capacity,
1765: FlatHashSet(values.
begin(),
1774template <
class KEY,
class HASH,
class EQUAL>
1776FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(
1777 bsl::initializer_list<KEY> values,
1778 bsl::size_t capacity,
1781: FlatHashSet(values.
begin(),
1790template <
class KEY,
class HASH,
class EQUAL>
1792FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(
1793 bsl::initializer_list<KEY> values,
1794 bsl::size_t capacity,
1798: FlatHashSet(values.
begin(),
1808template <
class KEY,
class HASH,
class EQUAL>
1810FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(
const FlatHashSet& original,
1812: d_impl(original.d_impl, basicAllocator)
1816template <
class KEY,
class HASH,
class EQUAL>
1818FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(
1820: d_impl(
bslmf::MovableRefUtil::move(
1821 bslmf::MovableRefUtil::access(original).d_impl))
1825template <
class KEY,
class HASH,
class EQUAL>
1827FlatHashSet<KEY, HASH, EQUAL>::FlatHashSet(
1830: d_impl(
bslmf::MovableRefUtil::move(
1831 bslmf::MovableRefUtil::access(original).d_impl),
1836template <
class KEY,
class HASH,
class EQUAL>
1838FlatHashSet<KEY, HASH, EQUAL>::~FlatHashSet()
1843template <
class KEY,
class HASH,
class EQUAL>
1845FlatHashSet<KEY, HASH, EQUAL>& FlatHashSet<KEY, HASH, EQUAL>::operator=(
1846 const FlatHashSet& rhs)
1848 d_impl =
rhs.d_impl;
1853template <
class KEY,
class HASH,
class EQUAL>
1855FlatHashSet<KEY, HASH, EQUAL>& FlatHashSet<KEY, HASH, EQUAL>::operator=(
1858 FlatHashSet& lvalue =
rhs;
1865#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1866template <
class KEY,
class HASH,
class EQUAL>
1868FlatHashSet<KEY, HASH, EQUAL>& FlatHashSet<KEY, HASH, EQUAL>::operator=(
1869 bsl::initializer_list<KEY> values)
1871 FlatHashSet tmp(values.begin(),
1874 d_impl.hash_function(),
1876 d_impl.allocator());
1884template <
class KEY,
class HASH,
class EQUAL>
1886void FlatHashSet<KEY, HASH, EQUAL>::clear()
1891#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
1894#ifndef BDLC_FLATHASHSET_VARIADIC_LIMIT
1895#define BDLC_FLATHASHSET_VARIADIC_LIMIT 10
1897#ifndef BDLC_FLATHASHSET_VARIADIC_LIMIT_G
1898#define BDLC_FLATHASHSET_VARIADIC_LIMIT_G BDLC_FLATHASHSET_VARIADIC_LIMIT
1900#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 0
1901template <
class KEY,
class HASH,
class EQUAL>
1903FlatHashSet<KEY, HASH, EQUAL>::emplace(
1906 return d_impl.emplace();
1910#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 1
1911template <
class KEY,
class HASH,
class EQUAL>
1912template <
class ARGS_01>
1914FlatHashSet<KEY, HASH, EQUAL>::emplace(
1921#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 2
1922template <
class KEY,
class HASH,
class EQUAL>
1923template <
class ARGS_01,
1926FlatHashSet<KEY, HASH, EQUAL>::emplace(
1935#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 3
1936template <
class KEY,
class HASH,
class EQUAL>
1937template <
class ARGS_01,
1941FlatHashSet<KEY, HASH, EQUAL>::emplace(
1952#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 4
1953template <
class KEY,
class HASH,
class EQUAL>
1954template <
class ARGS_01,
1959FlatHashSet<KEY, HASH, EQUAL>::emplace(
1972#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 5
1973template <
class KEY,
class HASH,
class EQUAL>
1974template <
class ARGS_01,
1980FlatHashSet<KEY, HASH, EQUAL>::emplace(
1995#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 6
1996template <
class KEY,
class HASH,
class EQUAL>
1997template <
class ARGS_01,
2004FlatHashSet<KEY, HASH, EQUAL>::emplace(
2021#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 7
2022template <
class KEY,
class HASH,
class EQUAL>
2023template <
class ARGS_01,
2031FlatHashSet<KEY, HASH, EQUAL>::emplace(
2050#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 8
2051template <
class KEY,
class HASH,
class EQUAL>
2052template <
class ARGS_01,
2061FlatHashSet<KEY, HASH, EQUAL>::emplace(
2082#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 9
2083template <
class KEY,
class HASH,
class EQUAL>
2084template <
class ARGS_01,
2094FlatHashSet<KEY, HASH, EQUAL>::emplace(
2117#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 10
2118template <
class KEY,
class HASH,
class EQUAL>
2119template <
class ARGS_01,
2130FlatHashSet<KEY, HASH, EQUAL>::emplace(
2156#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 0
2157template <
class KEY,
class HASH,
class EQUAL>
2158inline typename FlatHashSet<KEY, HASH, EQUAL>::iterator
2159FlatHashSet<KEY, HASH, EQUAL>::emplace_hint(
2160 typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator)
2162 return this->emplace().
first;
2166#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 1
2167template <
class KEY,
class HASH,
class EQUAL>
2168template <
class ARGS_01>
2169inline typename FlatHashSet<KEY, HASH, EQUAL>::iterator
2170FlatHashSet<KEY, HASH, EQUAL>::emplace_hint(
2171 typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator,
2179#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 2
2180template <
class KEY,
class HASH,
class EQUAL>
2181template <
class ARGS_01,
2183inline typename FlatHashSet<KEY, HASH, EQUAL>::iterator
2184FlatHashSet<KEY, HASH, EQUAL>::emplace_hint(
2185 typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator,
2195#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 3
2196template <
class KEY,
class HASH,
class EQUAL>
2197template <
class ARGS_01,
2200inline typename FlatHashSet<KEY, HASH, EQUAL>::iterator
2201FlatHashSet<KEY, HASH, EQUAL>::emplace_hint(
2202 typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator,
2214#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 4
2215template <
class KEY,
class HASH,
class EQUAL>
2216template <
class ARGS_01,
2220inline typename FlatHashSet<KEY, HASH, EQUAL>::iterator
2221FlatHashSet<KEY, HASH, EQUAL>::emplace_hint(
2222 typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator,
2236#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 5
2237template <
class KEY,
class HASH,
class EQUAL>
2238template <
class ARGS_01,
2243inline typename FlatHashSet<KEY, HASH, EQUAL>::iterator
2244FlatHashSet<KEY, HASH, EQUAL>::emplace_hint(
2245 typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator,
2261#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 6
2262template <
class KEY,
class HASH,
class EQUAL>
2263template <
class ARGS_01,
2269inline typename FlatHashSet<KEY, HASH, EQUAL>::iterator
2270FlatHashSet<KEY, HASH, EQUAL>::emplace_hint(
2271 typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator,
2289#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 7
2290template <
class KEY,
class HASH,
class EQUAL>
2291template <
class ARGS_01,
2298inline typename FlatHashSet<KEY, HASH, EQUAL>::iterator
2299FlatHashSet<KEY, HASH, EQUAL>::emplace_hint(
2300 typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator,
2320#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 8
2321template <
class KEY,
class HASH,
class EQUAL>
2322template <
class ARGS_01,
2330inline typename FlatHashSet<KEY, HASH, EQUAL>::iterator
2331FlatHashSet<KEY, HASH, EQUAL>::emplace_hint(
2332 typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator,
2354#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 9
2355template <
class KEY,
class HASH,
class EQUAL>
2356template <
class ARGS_01,
2365inline typename FlatHashSet<KEY, HASH, EQUAL>::iterator
2366FlatHashSet<KEY, HASH, EQUAL>::emplace_hint(
2367 typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator,
2391#if BDLC_FLATHASHSET_VARIADIC_LIMIT_G >= 10
2392template <
class KEY,
class HASH,
class EQUAL>
2393template <
class ARGS_01,
2403inline typename FlatHashSet<KEY, HASH, EQUAL>::iterator
2404FlatHashSet<KEY, HASH, EQUAL>::emplace_hint(
2405 typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator,
2434template <
class KEY,
class HASH,
class EQUAL>
2435template <
class... ARGS>
2437FlatHashSet<KEY, HASH, EQUAL>::emplace(
2443template <
class KEY,
class HASH,
class EQUAL>
2444template <
class... ARGS>
2445inline typename FlatHashSet<KEY, HASH, EQUAL>::iterator
2446FlatHashSet<KEY, HASH, EQUAL>::emplace_hint(
2447 typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator,
2457template <
class KEY,
class HASH,
class EQUAL>
2459bsl::size_t FlatHashSet<KEY, HASH, EQUAL>::erase(
const KEY& key)
2461 return d_impl.erase(key);
2464template <
class KEY,
class HASH,
class EQUAL>
2466typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator
2467 FlatHashSet<KEY, HASH, EQUAL>::erase(const_iterator position)
2471 return d_impl.erase(position);
2474template <
class KEY,
class HASH,
class EQUAL>
2476typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator
2477FlatHashSet<KEY, HASH, EQUAL>::erase(const_iterator first, const_iterator last)
2479 return d_impl.erase(first, last);
2482template <
class KEY,
class HASH,
class EQUAL>
2483template <
class INPUT_ITERATOR>
2485void FlatHashSet<KEY, HASH, EQUAL>::insert(INPUT_ITERATOR first,
2486 INPUT_ITERATOR last)
2488 d_impl.insert(first, last);
2491#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
2492template <
class KEY,
class HASH,
class EQUAL>
2494void FlatHashSet<KEY, HASH, EQUAL>::insert(bsl::initializer_list<KEY> values)
2496 insert(values.begin(), values.end());
2500template <
class KEY,
class HASH,
class EQUAL>
2502void FlatHashSet<KEY, HASH, EQUAL>::rehash(bsl::size_t minimumCapacity)
2504 d_impl.rehash(minimumCapacity);
2507template <
class KEY,
class HASH,
class EQUAL>
2509void FlatHashSet<KEY, HASH, EQUAL>::reserve(bsl::size_t numEntries)
2511 d_impl.reserve(numEntries);
2514template <
class KEY,
class HASH,
class EQUAL>
2516void FlatHashSet<KEY, HASH, EQUAL>::reset()
2523template <
class KEY,
class HASH,
class EQUAL>
2525void FlatHashSet<KEY, HASH, EQUAL>::swap(FlatHashSet& other)
2529 d_impl.swap(other.d_impl);
2533template <
class KEY,
class HASH,
class EQUAL>
2535bsl::size_t FlatHashSet<KEY, HASH, EQUAL>::capacity()
const
2537 return d_impl.capacity();
2540template <
class KEY,
class HASH,
class EQUAL>
2542bool FlatHashSet<KEY, HASH, EQUAL>::contains(
const KEY& key)
const
2544 return d_impl.contains(key);
2547template <
class KEY,
class HASH,
class EQUAL>
2549bsl::size_t FlatHashSet<KEY, HASH, EQUAL>::count(
const KEY& key)
const
2551 return d_impl.count(key);
2554template <
class KEY,
class HASH,
class EQUAL>
2556bool FlatHashSet<KEY, HASH, EQUAL>::empty()
const
2558 return d_impl.empty();
2561template <
class KEY,
class HASH,
class EQUAL>
2564 typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator>
2565 FlatHashSet<KEY, HASH, EQUAL>::equal_range(
const KEY& key)
const
2567 return d_impl.equal_range(key);
2570template <
class KEY,
class HASH,
class EQUAL>
2572typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator
2573 FlatHashSet<KEY, HASH, EQUAL>::find(
const KEY& key)
const
2575 return d_impl.find(key);
2578template <
class KEY,
class HASH,
class EQUAL>
2580HASH FlatHashSet<KEY, HASH, EQUAL>::hash_function()
const
2582 return d_impl.hash_function();
2585template <
class KEY,
class HASH,
class EQUAL>
2587EQUAL FlatHashSet<KEY, HASH, EQUAL>::key_eq()
const
2589 return d_impl.key_eq();
2592template <
class KEY,
class HASH,
class EQUAL>
2594float FlatHashSet<KEY, HASH, EQUAL>::load_factor()
const
2596 return d_impl.load_factor();
2599template <
class KEY,
class HASH,
class EQUAL>
2601float FlatHashSet<KEY, HASH, EQUAL>::max_load_factor()
const
2603 return d_impl.max_load_factor();
2606template <
class KEY,
class HASH,
class EQUAL>
2608bsl::size_t FlatHashSet<KEY, HASH, EQUAL>::size()
const
2610 return d_impl.size();
2615template <
class KEY,
class HASH,
class EQUAL>
2617typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator
2618 FlatHashSet<KEY, HASH, EQUAL>::begin()
const
2620 return d_impl.begin();
2623template <
class KEY,
class HASH,
class EQUAL>
2625typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator
2626 FlatHashSet<KEY, HASH, EQUAL>::cbegin()
const
2628 return d_impl.cbegin();
2631template <
class KEY,
class HASH,
class EQUAL>
2633typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator
2634 FlatHashSet<KEY, HASH, EQUAL>::cend()
const
2636 return d_impl.cend();
2639template <
class KEY,
class HASH,
class EQUAL>
2641typename FlatHashSet<KEY, HASH, EQUAL>::const_iterator
2642 FlatHashSet<KEY, HASH, EQUAL>::end()
const
2644 return d_impl.end();
2649template <
class KEY,
class HASH,
class EQUAL>
2653 return d_impl.allocator();
2656template <
class KEY,
class HASH,
class EQUAL>
2657bsl::ostream& FlatHashSet<KEY, HASH, EQUAL>::print(
2658 bsl::ostream& stream,
2660 int spacesPerLevel)
const
2670 const_iterator iter =
begin();
2671 while (iter !=
end()) {
2672 printer.printValue(*iter);
2684template <
class KEY,
class HASH,
class EQUAL>
2687 const FlatHashSet<KEY, HASH, EQUAL>& rhs)
2689 return lhs.d_impl ==
rhs.d_impl;
2692template <
class KEY,
class HASH,
class EQUAL>
2695 const FlatHashSet<KEY, HASH, EQUAL>& rhs)
2697 return lhs.d_impl !=
rhs.d_impl;
2700template <
class KEY,
class HASH,
class EQUAL>
2703 const FlatHashSet<KEY, HASH, EQUAL>& set)
2705 return set.print(stream, 0, -1);
2709template <
class KEY,
class HASH,
class EQUAL>
2711void bdlc::swap(FlatHashSet<KEY, HASH, EQUAL>& a,
2712 FlatHashSet<KEY, HASH, EQUAL>& b)
2723template <
class KEY,
class HASH,
class EQUAL>
2724struct HasStlIterators<
bdlc::FlatHashSet<KEY, HASH, EQUAL> >
2732template <
class KEY,
class HASH,
class EQUAL>
2733struct UsesBslmaAllocator<
bdlc::FlatHashSet<KEY, HASH, EQUAL> >
2741# error Not valid except when included from bdlc_flathashset.h
iterator emplace_hint(const_iterator hint, ARGS &&... args)
EQUAL key_eq() const
Definition bdlc_flathashset.h:1675
bsl::size_t count(const KEY &key) const
Definition bdlc_flathashset.h:1637
bsl::pair< iterator, bool > emplace(ARGS &&... args)
EQUAL value_compare
Definition bdlc_flathashset.h:601
const_iterator begin() const
Definition bdlc_flathashset.h:1706
HASH hash_function() const
Definition bdlc_flathashset.h:1668
void reserve(bsl::size_t numEntries)
Definition bdlc_flathashset.h:1597
HASH hasher
Definition bdlc_flathashset.h:602
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition bdlc_flathashset.h:1745
const value_type * const_pointer
Definition bdlc_flathashset.h:606
bslma::Allocator * allocator() const
Return the allocator used by this flat hash set to supply memory.
Definition bdlc_flathashset.h:1739
EQUAL key_compare
Definition bdlc_flathashset.h:600
friend void swap(FlatHashSet< K, H, E > &, FlatHashSet< K, H, E > &)
value_type * pointer
Definition bdlc_flathashset.h:605
value_type & reference
Definition bdlc_flathashset.h:603
float load_factor() const
Definition bdlc_flathashset.h:1682
const_iterator find(const KEY &key) const
Definition bdlc_flathashset.h:1661
FlatHashSet()
Definition bdlc_flathashset.h:1280
~FlatHashSet()
Destroy this object and each of its elements.
Definition bdlc_flathashset.h:1470
void clear()
Definition bdlc_flathashset.h:1518
bsl::pair< const_iterator, bool > insert(const KEY &value)
Definition bdlc_flathashset.h:865
const value_type & const_reference
Definition bdlc_flathashset.h:604
void rehash(bsl::size_t minimumCapacity)
Definition bdlc_flathashset.h:1590
ImplType::const_iterator iterator
Definition bdlc_flathashset.h:607
bsl::size_t size() const
Return the number of elements in this set.
Definition bdlc_flathashset.h:1696
const_iterator cbegin() const
Definition bdlc_flathashset.h:1714
KEY value_type
Definition bdlc_flathashset.h:597
const_iterator cend() const
Definition bdlc_flathashset.h:1722
FlatHashSet & operator=(const FlatHashSet &rhs)
Definition bdlc_flathashset.h:1477
bsl::ptrdiff_t difference_type
Definition bdlc_flathashset.h:599
bsl::size_t capacity() const
Definition bdlc_flathashset.h:1623
bsl::size_t erase(const KEY &key)
Definition bdlc_flathashset.h:1547
void reset()
Definition bdlc_flathashset.h:1604
bsl::size_t size_type
Definition bdlc_flathashset.h:598
ImplType::const_iterator const_iterator
Definition bdlc_flathashset.h:608
bool empty() const
Definition bdlc_flathashset.h:1644
float max_load_factor() const
Definition bdlc_flathashset.h:1689
bool contains(const KEY &key) const
Definition bdlc_flathashset.h:1630
bsl::pair< const_iterator, const_iterator > equal_range(const KEY &key) const
Definition bdlc_flathashset.h:1653
const_iterator end() const
Definition bdlc_flathashset.h:1730
KEY key_type
Definition bdlc_flathashset.h:596
bslstl::ForwardIterator< const KEY, IteratorImp > const_iterator
Definition bdlc_flathashtable.h:343
Definition bslstl_pair.h:1280
static void swap(T *a, T *b)
Definition bslalg_swaputil.h:182
Definition bslh_fibonaccibadhashwrapper.h:165
Definition bslim_printer.h:604
Definition bslma_allocator.h:545
Definition bslmf_movableref.h:752
#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
bool operator!=(const FileCleanerConfiguration &lhs, const FileCleanerConfiguration &rhs)
bool operator==(const FileCleanerConfiguration &lhs, const FileCleanerConfiguration &rhs)
void swap(OptionValue &a, OptionValue &b)
Definition bdlc_bitarray.h:506
void swap(BitArray &a, BitArray &b)
bool operator==(const BitArray &lhs, const BitArray &rhs)
bool operator!=(const BitArray &lhs, const BitArray &rhs)
BitArray operator<<(const BitArray &array, bsl::size_t numBits)
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
T::iterator begin(T &container)
Definition bslstl_iterator.h:1593
ALLOCATOR & lhs
Definition bslstl_string.h:3917
T::iterator end(T &container)
Definition bslstl_iterator.h:1621
Definition bdlc_flathashmap.h:2218
Definition baljsn_encoder_testtypes.h:76
Definition bdlbb_blob.h:579
static void constructFromKey(ENTRY *entry, bslma::Allocator *allocator, BSLS_COMPILERFEATURES_FORWARD_REF(KEY_TYPE) key)
static const ENTRY & key(const ENTRY &entry)
Return the specified entry.
Definition bdlc_flathashset.h:1268
static void construct(ENTRY *entry, bslma::Allocator *allocator, ARGS &&... args)
Definition bdlc_flathashset.h:1237
TYPE first
Definition bslstl_pair.h:587
Definition bslmf_enableif.h:530
Definition bslstl_equalto.h:316
Definition bslmf_isconvertible.h:875
static void construct(TARGET_TYPE *address, const ALLOCATOR &allocator)
Definition bslma_constructionutil.h:1244
static MovableRef< t_TYPE > move(t_TYPE &reference) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1067