11#ifndef INCLUDED_BDLC_FLATHASHMAP_CPP03
12#define INCLUDED_BDLC_FLATHASHMAP_CPP03
63#ifdef COMPILING_BDLC_FLATHASHMAP_H
65#if defined(BSLS_COMPILERFEATURES_SUPPORT_TRAITS_HEADER)
66#include <bsl_type_traits.h>
68 #ifndef BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES
69 #error Rvalue references curiously absent despite native 'type_traits'.
84template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
85bool operator==(
const FlatHashMap<KEY, VALUE, HASH, EQUAL> &lhs,
86 const FlatHashMap<KEY, VALUE, HASH, EQUAL> &rhs);
88template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
89bool operator!=(
const FlatHashMap<KEY, VALUE, HASH, EQUAL> &lhs,
90 const FlatHashMap<KEY, VALUE, HASH, EQUAL> &rhs);
92template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
93void swap(FlatHashMap<KEY, VALUE, HASH, EQUAL>& a,
94 FlatHashMap<KEY, VALUE, HASH, EQUAL>& b);
102template <
class KEY,
class VALUE,
class ENTRY>
103struct FlatHashMap_EntryUtil
106#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
109#ifndef BDLC_FLATHASHMAP_VARIADIC_LIMIT
110#define BDLC_FLATHASHMAP_VARIADIC_LIMIT 10
112#ifndef BDLC_FLATHASHMAP_VARIADIC_LIMIT_A
113#define BDLC_FLATHASHMAP_VARIADIC_LIMIT_A BDLC_FLATHASHMAP_VARIADIC_LIMIT
115#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_A >= 0
121#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_A >= 1
122 template <
class ARGS_01>
129#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_A >= 2
130 template <
class ARGS_01,
139#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_A >= 3
140 template <
class ARGS_01,
151#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_A >= 4
152 template <
class ARGS_01,
165#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_A >= 5
166 template <
class ARGS_01,
181#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_A >= 6
182 template <
class ARGS_01,
199#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_A >= 7
200 template <
class ARGS_01,
219#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_A >= 8
220 template <
class ARGS_01,
241#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_A >= 9
242 template <
class ARGS_01,
265#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_A >= 10
266 template <
class ARGS_01,
294 template <
class... ARGS>
306 template <
class KEY_TYPE>
313 static const KEY&
key(
const ENTRY& entry);
330template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
337 typedef FlatHashTable<KEY,
339 FlatHashMap_EntryUtil<KEY,
350 template <
class K,
class V,
class H,
class E>
351 friend void swap(FlatHashMap<K, V, H, E>&, FlatHashMap<K, V, H, E>&);
424 template <
class INPUT_ITERATOR>
428 template <
class INPUT_ITERATOR>
433 template <
class INPUT_ITERATOR>
439 template <
class INPUT_ITERATOR>
447#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
465 FlatHashMap(bsl::initializer_list<value_type> values,
467 FlatHashMap(bsl::initializer_list<value_type> values,
470 FlatHashMap(bsl::initializer_list<value_type> values,
474 FlatHashMap(bsl::initializer_list<value_type> values,
526#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
557#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR
558 template <
class LOOKUP_KEY>
560 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
561 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
576 VALUE&
at(
const KEY& key);
583 template <
class LOOKUP_KEY>
585 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
586 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
588 at(
const LOOKUP_KEY& key)
594 BloombergLP::bslstl::StdExceptUtil::throwOutOfRange(
595 "FlatHashMap::at(LOOKUP_KEY): invalid key_value");
626 template <
class LOOKUP_KEY>
628 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
629 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
635 return d_impl.equal_range(key);
638#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
641#ifndef BDLC_FLATHASHMAP_VARIADIC_LIMIT
642#define BDLC_FLATHASHMAP_VARIADIC_LIMIT 10
644#ifndef BDLC_FLATHASHMAP_VARIADIC_LIMIT_C
645#define BDLC_FLATHASHMAP_VARIADIC_LIMIT_C BDLC_FLATHASHMAP_VARIADIC_LIMIT
647#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 0
652#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 1
653 template <
class ARGS_01>
658#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 2
659 template <
class ARGS_01,
666#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 3
667 template <
class ARGS_01,
676#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 4
677 template <
class ARGS_01,
688#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 5
689 template <
class ARGS_01,
702#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 6
703 template <
class ARGS_01,
718#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 7
719 template <
class ARGS_01,
736#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 8
737 template <
class ARGS_01,
756#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 9
757 template <
class ARGS_01,
778#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 10
779 template <
class ARGS_01,
803#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 0
807#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 1
808 template <
class ARGS_01>
813#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 2
814 template <
class ARGS_01,
821#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 3
822 template <
class ARGS_01,
831#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 4
832 template <
class ARGS_01,
843#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 5
844 template <
class ARGS_01,
857#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 6
858 template <
class ARGS_01,
873#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 7
874 template <
class ARGS_01,
891#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 8
892 template <
class ARGS_01,
911#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 9
912 template <
class ARGS_01,
933#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_C >= 10
934 template <
class ARGS_01,
960 template <
class... ARGS>
964 template <
class... ARGS>
975 bsl::size_t
erase(
const KEY& key);
980 template <
class LOOKUP_KEY>
982 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
983 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
987 return d_impl.erase(key);
1021 template <
class LOOKUP_KEY>
1023 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1024 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1026 find(
const LOOKUP_KEY& key)
1033#if defined(BSLS_PLATFORM_CMP_SUN) && BSLS_PLATFORM_CMP_VERSION < 0x5130
1034 template <
class VALUE_TYPE>
1036#elif !defined(BSLS_COMPILERFEATURES_SUPPORT_TRAITS_HEADER)
1037 template <
class VALUE_TYPE>
1049 template <
class VALUE_TYPE>
1051 VALUE_TYPE&&>::value,
1062#if defined(BSLS_PLATFORM_CMP_SUN) && BSLS_PLATFORM_CMP_VERSION < 0x5130
1063 template <
class VALUE_TYPE>
1065#elif !defined(BSLS_COMPILERFEATURES_SUPPORT_TRAITS_HEADER)
1066 template <
class VALUE_TYPE>
1076 template <
class VALUE_TYPE>
1078 VALUE_TYPE&&>::value,
1100 template <
class INPUT_ITERATOR>
1101 void insert(INPUT_ITERATOR first, INPUT_ITERATOR last);
1103#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1109 void insert(bsl::initializer_list<value_type> values);
1122 BloombergLP::bslmf::MovableRef<KEY> key,
1125 template <
class LOOKUP_KEY,
class M>
1127 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1128 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1134 if (iter !=
end()) {
1136 return make_pair(iter,
false);
1142 template <
class MAPPED>
1146 template <
class MAPPED>
1148 BloombergLP::bslmf::MovableRef<KEY> key,
1151 template <
class LOOKUP_KEY,
class MAPPED>
1153 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1154 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1174 void rehash(bsl::size_t minimumCapacity);
1189 void reserve(bsl::size_t numEntries);
1195#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
1198#ifndef BDLC_FLATHASHMAP_VARIADIC_LIMIT
1199#define BDLC_FLATHASHMAP_VARIADIC_LIMIT 10
1201#ifndef BDLC_FLATHASHMAP_VARIADIC_LIMIT_F
1202#define BDLC_FLATHASHMAP_VARIADIC_LIMIT_F BDLC_FLATHASHMAP_VARIADIC_LIMIT
1204#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR
1205#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 0
1209#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 1
1210 template<
class ARGS_01>
1215#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 2
1216 template<
class ARGS_01,
1223#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 3
1224 template<
class ARGS_01,
1233#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 4
1234 template<
class ARGS_01,
1245#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 5
1246 template<
class ARGS_01,
1259#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 6
1260 template<
class ARGS_01,
1275#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 7
1276 template<
class ARGS_01,
1293#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 8
1294 template<
class ARGS_01,
1313#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 9
1314 template<
class ARGS_01,
1335#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 10
1336 template<
class ARGS_01,
1360#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 0
1362 BloombergLP::bslmf::MovableRef<KEY> key);
1365#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 1
1366 template <
class ARGS_01>
1368 BloombergLP::bslmf::MovableRef<KEY> key,
1372#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 2
1373 template <
class ARGS_01,
1376 BloombergLP::bslmf::MovableRef<KEY> key,
1381#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 3
1382 template <
class ARGS_01,
1386 BloombergLP::bslmf::MovableRef<KEY> key,
1392#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 4
1393 template <
class ARGS_01,
1398 BloombergLP::bslmf::MovableRef<KEY> key,
1405#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 5
1406 template <
class ARGS_01,
1412 BloombergLP::bslmf::MovableRef<KEY> key,
1420#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 6
1421 template <
class ARGS_01,
1428 BloombergLP::bslmf::MovableRef<KEY> key,
1437#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 7
1438 template <
class ARGS_01,
1446 BloombergLP::bslmf::MovableRef<KEY> key,
1456#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 8
1457 template <
class ARGS_01,
1466 BloombergLP::bslmf::MovableRef<KEY> key,
1477#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 9
1478 template <
class ARGS_01,
1488 BloombergLP::bslmf::MovableRef<KEY> key,
1500#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 10
1501 template <
class ARGS_01,
1512 BloombergLP::bslmf::MovableRef<KEY> key,
1526#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 0
1527 template <
class LOOKUP_KEY>
1529 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1530 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1535 return d_impl.try_emplace(
1537 std::piecewise_construct,
1539 std::forward_as_tuple());
1543#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 1
1544 template <
class LOOKUP_KEY,
class ARGS_01>
1546 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1547 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1553 return d_impl.try_emplace(
1555 std::piecewise_construct,
1557 std::forward_as_tuple(
1562#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 2
1563 template <
class LOOKUP_KEY,
class ARGS_01,
1566 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1567 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1574 return d_impl.try_emplace(
1576 std::piecewise_construct,
1578 std::forward_as_tuple(
1584#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 3
1585 template <
class LOOKUP_KEY,
class ARGS_01,
1589 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1590 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1598 return d_impl.try_emplace(
1600 std::piecewise_construct,
1602 std::forward_as_tuple(
1609#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 4
1610 template <
class LOOKUP_KEY,
class ARGS_01,
1615 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1616 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1625 return d_impl.try_emplace(
1627 std::piecewise_construct,
1629 std::forward_as_tuple(
1637#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 5
1638 template <
class LOOKUP_KEY,
class ARGS_01,
1644 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1645 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1655 return d_impl.try_emplace(
1657 std::piecewise_construct,
1659 std::forward_as_tuple(
1668#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 6
1669 template <
class LOOKUP_KEY,
class ARGS_01,
1676 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1677 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1688 return d_impl.try_emplace(
1690 std::piecewise_construct,
1692 std::forward_as_tuple(
1702#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 7
1703 template <
class LOOKUP_KEY,
class ARGS_01,
1711 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1712 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1724 return d_impl.try_emplace(
1726 std::piecewise_construct,
1728 std::forward_as_tuple(
1739#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 8
1740 template <
class LOOKUP_KEY,
class ARGS_01,
1749 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1750 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1763 return d_impl.try_emplace(
1765 std::piecewise_construct,
1767 std::forward_as_tuple(
1779#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 9
1780 template <
class LOOKUP_KEY,
class ARGS_01,
1790 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1791 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1805 return d_impl.try_emplace(
1807 std::piecewise_construct,
1809 std::forward_as_tuple(
1822#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 10
1823 template <
class LOOKUP_KEY,
class ARGS_01,
1834 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1835 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1850 return d_impl.try_emplace(
1852 std::piecewise_construct,
1854 std::forward_as_tuple(
1869#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 0
1874#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 1
1875 template<
class ARGS_01>
1881#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 2
1882 template<
class ARGS_01,
1890#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 3
1891 template<
class ARGS_01,
1901#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 4
1902 template<
class ARGS_01,
1914#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 5
1915 template<
class ARGS_01,
1929#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 6
1930 template<
class ARGS_01,
1946#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 7
1947 template<
class ARGS_01,
1965#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 8
1966 template<
class ARGS_01,
1986#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 9
1987 template<
class ARGS_01,
2009#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 10
2010 template<
class ARGS_01,
2035#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 0
2037 BloombergLP::bslmf::MovableRef<KEY> key);
2040#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 1
2041 template <
class ARGS_01>
2043 BloombergLP::bslmf::MovableRef<KEY> key,
2047#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 2
2048 template <
class ARGS_01,
2051 BloombergLP::bslmf::MovableRef<KEY> key,
2056#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 3
2057 template <
class ARGS_01,
2061 BloombergLP::bslmf::MovableRef<KEY> key,
2067#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 4
2068 template <
class ARGS_01,
2073 BloombergLP::bslmf::MovableRef<KEY> key,
2080#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 5
2081 template <
class ARGS_01,
2087 BloombergLP::bslmf::MovableRef<KEY> key,
2095#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 6
2096 template <
class ARGS_01,
2103 BloombergLP::bslmf::MovableRef<KEY> key,
2112#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 7
2113 template <
class ARGS_01,
2121 BloombergLP::bslmf::MovableRef<KEY> key,
2131#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 8
2132 template <
class ARGS_01,
2141 BloombergLP::bslmf::MovableRef<KEY> key,
2152#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 9
2153 template <
class ARGS_01,
2163 BloombergLP::bslmf::MovableRef<KEY> key,
2175#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 10
2176 template <
class ARGS_01,
2187 BloombergLP::bslmf::MovableRef<KEY> key,
2201#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 0
2202 template <
class LOOKUP_KEY>
2204 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2205 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2211 return d_impl.try_emplace(
2213 std::piecewise_construct,
2214 std::forward_as_tuple(
2216 std::forward_as_tuple(
2222#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 1
2223 template <
class LOOKUP_KEY,
class ARGS_01>
2225 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2226 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2233 return d_impl.try_emplace(
2235 std::piecewise_construct,
2236 std::forward_as_tuple(
2238 std::forward_as_tuple(
2244#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 2
2245 template <
class LOOKUP_KEY,
class ARGS_01,
2248 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2249 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2257 return d_impl.try_emplace(
2259 std::piecewise_construct,
2260 std::forward_as_tuple(
2262 std::forward_as_tuple(
2269#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 3
2270 template <
class LOOKUP_KEY,
class ARGS_01,
2274 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2275 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2284 return d_impl.try_emplace(
2286 std::piecewise_construct,
2287 std::forward_as_tuple(
2289 std::forward_as_tuple(
2297#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 4
2298 template <
class LOOKUP_KEY,
class ARGS_01,
2303 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2304 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2314 return d_impl.try_emplace(
2316 std::piecewise_construct,
2317 std::forward_as_tuple(
2319 std::forward_as_tuple(
2328#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 5
2329 template <
class LOOKUP_KEY,
class ARGS_01,
2335 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2336 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2347 return d_impl.try_emplace(
2349 std::piecewise_construct,
2350 std::forward_as_tuple(
2352 std::forward_as_tuple(
2362#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 6
2363 template <
class LOOKUP_KEY,
class ARGS_01,
2370 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2371 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2383 return d_impl.try_emplace(
2385 std::piecewise_construct,
2386 std::forward_as_tuple(
2388 std::forward_as_tuple(
2399#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 7
2400 template <
class LOOKUP_KEY,
class ARGS_01,
2408 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2409 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2422 return d_impl.try_emplace(
2424 std::piecewise_construct,
2425 std::forward_as_tuple(
2427 std::forward_as_tuple(
2439#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 8
2440 template <
class LOOKUP_KEY,
class ARGS_01,
2449 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2450 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2464 return d_impl.try_emplace(
2466 std::piecewise_construct,
2467 std::forward_as_tuple(
2469 std::forward_as_tuple(
2482#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 9
2483 template <
class LOOKUP_KEY,
class ARGS_01,
2493 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2494 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2509 return d_impl.try_emplace(
2511 std::piecewise_construct,
2512 std::forward_as_tuple(
2514 std::forward_as_tuple(
2528#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_F >= 10
2529 template <
class LOOKUP_KEY,
class ARGS_01,
2540 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2541 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2557 return d_impl.try_emplace(
2559 std::piecewise_construct,
2560 std::forward_as_tuple(
2562 std::forward_as_tuple(
2582#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR
2583 template<
class... ARGS>
2587 template <
class... ARGS>
2589 BloombergLP::bslmf::MovableRef<KEY> key,
2592 template <
class LOOKUP_KEY,
class... ARGS>
2594 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2595 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2601 return d_impl.try_emplace(
2603 std::piecewise_construct,
2608 template<
class... ARGS>
2613 template <
class... ARGS>
2615 BloombergLP::bslmf::MovableRef<KEY> key,
2618 template <
class LOOKUP_KEY,
class... ARGS>
2620 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2621 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2628 return d_impl.try_emplace(
2630 std::piecewise_construct,
2631 std::forward_as_tuple(
2633 std::forward_as_tuple(
2669 const VALUE&
at(
const KEY& key)
const;
2677 template <
class LOOKUP_KEY>
2679 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2680 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2681 ,
const VALUE&>::type
2682 at(
const LOOKUP_KEY& key)
const
2687 if (iter ==
end()) {
2688 BloombergLP::bslstl::StdExceptUtil::throwOutOfRange(
2689 "FlatHashMap::at(LOOKUP_KEY) const: invalid key_value");
2691 return iter->second;
2700 bool contains(
const KEY& key)
const;
2704 template <
class LOOKUP_KEY>
2706 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2707 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2709 contains(
const LOOKUP_KEY& key)
const
2720 bsl::size_t
count(
const KEY& key)
const;
2726 template <
class LOOKUP_KEY>
2728 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2729 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2730 , bsl::size_t >::type
2731 count(
const LOOKUP_KEY& key)
const
2735 return find(key) !=
end() ? 1 : 0;
2751 const KEY& key)
const;
2763 template <
class LOOKUP_KEY>
2765 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2766 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2772 return d_impl.equal_range(key);
2783 template <
class LOOKUP_KEY>
2785 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2786 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2788 find(
const LOOKUP_KEY& key)
const
2820 bsl::size_t
size()
const;
2857 bsl::ostream&
print(bsl::ostream& stream,
2859 int spacesPerLevel = 4)
const;
2869template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
2870bool operator==(
const FlatHashMap<KEY, VALUE, HASH, EQUAL> &lhs,
2871 const FlatHashMap<KEY, VALUE, HASH, EQUAL> &rhs);
2878template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
2879bool operator!=(
const FlatHashMap<KEY, VALUE, HASH, EQUAL> &lhs,
2880 const FlatHashMap<KEY, VALUE, HASH, EQUAL> &rhs);
2888template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
2889bsl::ostream&
operator<<(bsl::ostream& stream,
2890 const FlatHashMap<KEY, VALUE, HASH, EQUAL>& map);
2898template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
2899void swap(FlatHashMap<KEY, VALUE, HASH, EQUAL>& a,
2900 FlatHashMap<KEY, VALUE, HASH, EQUAL>& b);
2911#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
2914#ifndef BDLC_FLATHASHMAP_VARIADIC_LIMIT
2915#define BDLC_FLATHASHMAP_VARIADIC_LIMIT 10
2917#ifndef BDLC_FLATHASHMAP_VARIADIC_LIMIT_G
2918#define BDLC_FLATHASHMAP_VARIADIC_LIMIT_G BDLC_FLATHASHMAP_VARIADIC_LIMIT
2920#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_G >= 0
2921template <
class KEY,
class VALUE,
class ENTRY>
2934#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_G >= 1
2935template <
class KEY,
class VALUE,
class ENTRY>
2936template <
class ARGS_01>
2951#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_G >= 2
2952template <
class KEY,
class VALUE,
class ENTRY>
2953template <
class ARGS_01,
2971#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_G >= 3
2972template <
class KEY,
class VALUE,
class ENTRY>
2973template <
class ARGS_01,
2994#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_G >= 4
2995template <
class KEY,
class VALUE,
class ENTRY>
2996template <
class ARGS_01,
3020#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_G >= 5
3021template <
class KEY,
class VALUE,
class ENTRY>
3022template <
class ARGS_01,
3049#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_G >= 6
3050template <
class KEY,
class VALUE,
class ENTRY>
3051template <
class ARGS_01,
3081#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_G >= 7
3082template <
class KEY,
class VALUE,
class ENTRY>
3083template <
class ARGS_01,
3116#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_G >= 8
3117template <
class KEY,
class VALUE,
class ENTRY>
3118template <
class ARGS_01,
3154#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_G >= 9
3155template <
class KEY,
class VALUE,
class ENTRY>
3156template <
class ARGS_01,
3195#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_G >= 10
3196template <
class KEY,
class VALUE,
class ENTRY>
3197template <
class ARGS_01,
3242template <
class KEY,
class VALUE,
class ENTRY>
3243template <
class... ARGS>
3259template <
class KEY,
class VALUE,
class ENTRY>
3260template <
class KEY_TYPE>
3281template <
class KEY,
class VALUE,
class ENTRY>
3293template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3296: d_impl(0, HASH(), EQUAL())
3300template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3302FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3304: d_impl(0, HASH(), EQUAL(), basicAllocator)
3308template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3310FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(bsl::size_t capacity)
3311: d_impl(capacity, HASH(), EQUAL())
3315template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3317FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3318 bsl::size_t capacity,
3320: d_impl(capacity, HASH(), EQUAL(), basicAllocator)
3324template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3326FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3327 bsl::size_t capacity,
3330: d_impl(capacity, hash, EQUAL(), basicAllocator)
3334template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3336FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3337 bsl::size_t capacity,
3341: d_impl(capacity, hash, equal, basicAllocator)
3345template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3346template <
class INPUT_ITERATOR>
3348FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3349 INPUT_ITERATOR first,
3350 INPUT_ITERATOR last,
3352: d_impl(0, HASH(), EQUAL(), basicAllocator)
3354 insert(first, last);
3357template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3358template <
class INPUT_ITERATOR>
3360FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3361 INPUT_ITERATOR first,
3362 INPUT_ITERATOR last,
3363 bsl::size_t capacity,
3365: d_impl(capacity, HASH(), EQUAL(), basicAllocator)
3367 insert(first, last);
3370template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3371template <
class INPUT_ITERATOR>
3373FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3374 INPUT_ITERATOR first,
3375 INPUT_ITERATOR last,
3376 bsl::size_t capacity,
3379: d_impl(capacity, hash, EQUAL(), basicAllocator)
3381 insert(first, last);
3384template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3385template <
class INPUT_ITERATOR>
3387FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3388 INPUT_ITERATOR first,
3389 INPUT_ITERATOR last,
3390 bsl::size_t capacity,
3394: d_impl(capacity, hash, equal, basicAllocator)
3396 insert(first, last);
3399#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
3400template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3402FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3403 bsl::initializer_list<value_type> values,
3405: FlatHashMap(values.
begin(),
3414template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3416FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3417 bsl::initializer_list<value_type> values,
3418 bsl::size_t capacity,
3420: FlatHashMap(values.
begin(),
3429template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3431FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3432 bsl::initializer_list<value_type> values,
3433 bsl::size_t capacity,
3436: FlatHashMap(values.
begin(),
3445template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3447FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3448 bsl::initializer_list<value_type> values,
3449 bsl::size_t capacity,
3453: FlatHashMap(values.
begin(),
3463template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3465FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3466 const FlatHashMap& original,
3468: d_impl(original.d_impl, basicAllocator)
3472template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3474FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3476: d_impl(
bslmf::MovableRefUtil::move(
3477 bslmf::MovableRefUtil::access(original).d_impl))
3481template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3483FlatHashMap<KEY, VALUE, HASH, EQUAL>::FlatHashMap(
3486: d_impl(
bslmf::MovableRefUtil::move(
3487 bslmf::MovableRefUtil::access(original).d_impl),
3492template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3494FlatHashMap<KEY, VALUE, HASH, EQUAL>::~FlatHashMap()
3499template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3501FlatHashMap<KEY, VALUE, HASH, EQUAL>&
3502FlatHashMap<KEY, VALUE, HASH, EQUAL>::operator=(
const FlatHashMap& rhs)
3504 d_impl =
rhs.d_impl;
3509template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3511FlatHashMap<KEY, VALUE, HASH, EQUAL>&
3512FlatHashMap<KEY, VALUE, HASH, EQUAL>::operator=(
3515 FlatHashMap& lvalue =
rhs;
3522#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
3523template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3525FlatHashMap<KEY, VALUE, HASH, EQUAL>&
3526FlatHashMap<KEY, VALUE, HASH, EQUAL>::operator=(
3527 bsl::initializer_list<value_type> values)
3529 FlatHashMap tmp(values.begin(),
3532 d_impl.hash_function(),
3534 d_impl.allocator());
3542template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3544VALUE& FlatHashMap<KEY, VALUE, HASH, EQUAL>::operator[](
const KEY& key)
3546 return d_impl[key].second;
3549template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3556template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3558VALUE& FlatHashMap<KEY, VALUE, HASH, EQUAL>::at(
const KEY& key)
3560 iterator node = d_impl.find(key);
3562 if (node == d_impl.end()) {
3563 BloombergLP::bslstl::StdExceptUtil::throwOutOfRange(
3564 "FlatHashMap<...>::at(key_type): invalid key value");
3567 return node->second;
3570template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3573FlatHashMap<KEY, VALUE, HASH, EQUAL>::clear()
3578template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3580 typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator>
3581FlatHashMap<KEY, VALUE, HASH, EQUAL>::equal_range(
const KEY& key)
3583 return d_impl.equal_range(key);
3586#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
3589#ifndef BDLC_FLATHASHMAP_VARIADIC_LIMIT
3590#define BDLC_FLATHASHMAP_VARIADIC_LIMIT 10
3592#ifndef BDLC_FLATHASHMAP_VARIADIC_LIMIT_H
3593#define BDLC_FLATHASHMAP_VARIADIC_LIMIT_H BDLC_FLATHASHMAP_VARIADIC_LIMIT
3595#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 0
3596template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3599FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace(
3602 return d_impl.emplace();
3606#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 1
3607template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3608template <
class ARGS_01>
3611FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace(
3618#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 2
3619template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3620template <
class ARGS_01,
3624FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace(
3633#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 3
3634template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3635template <
class ARGS_01,
3640FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace(
3651#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 4
3652template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3653template <
class ARGS_01,
3659FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace(
3672#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 5
3673template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3674template <
class ARGS_01,
3681FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace(
3696#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 6
3697template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3698template <
class ARGS_01,
3706FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace(
3723#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 7
3724template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3725template <
class ARGS_01,
3734FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace(
3753#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 8
3754template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3755template <
class ARGS_01,
3765FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace(
3786#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 9
3787template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3788template <
class ARGS_01,
3799FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace(
3822#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 10
3823template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3824template <
class ARGS_01,
3836FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace(
3862#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 0
3863template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3865typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
3866FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace_hint(const_iterator)
3868 return emplace().
first;
3872#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 1
3873template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3874template <
class ARGS_01>
3876typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
3877FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace_hint(const_iterator,
3884#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 2
3885template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3886template <
class ARGS_01,
3889typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
3890FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace_hint(const_iterator,
3899#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 3
3900template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3901template <
class ARGS_01,
3905typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
3906FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace_hint(const_iterator,
3917#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 4
3918template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3919template <
class ARGS_01,
3924typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
3925FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace_hint(const_iterator,
3938#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 5
3939template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3940template <
class ARGS_01,
3946typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
3947FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace_hint(const_iterator,
3962#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 6
3963template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3964template <
class ARGS_01,
3971typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
3972FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace_hint(const_iterator,
3989#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 7
3990template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
3991template <
class ARGS_01,
3999typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
4000FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace_hint(const_iterator,
4019#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 8
4020template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4021template <
class ARGS_01,
4030typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
4031FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace_hint(const_iterator,
4052#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 9
4053template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4054template <
class ARGS_01,
4064typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
4065FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace_hint(const_iterator,
4088#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_H >= 10
4089template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4090template <
class ARGS_01,
4101typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
4102FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace_hint(const_iterator,
4130template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4131template <
class... ARGS>
4134FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace(
4140template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4141template <
class... ARGS>
4143typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
4144FlatHashMap<KEY, VALUE, HASH, EQUAL>::emplace_hint(const_iterator,
4153template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4154bsl::size_t FlatHashMap<KEY, VALUE, HASH, EQUAL>::erase(
const KEY& key)
4156 return d_impl.erase(key);
4159template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4161typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
4162FlatHashMap<KEY, VALUE, HASH, EQUAL>::erase(const_iterator position)
4166 return d_impl.erase(position);
4169template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4171typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
4172FlatHashMap<KEY, VALUE, HASH, EQUAL>::erase(iterator position)
4179 return d_impl.erase(position);
4182template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4183typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
4184FlatHashMap<KEY, VALUE, HASH, EQUAL>::erase(const_iterator first,
4185 const_iterator last)
4187 return d_impl.erase(first, last);
4190template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4192typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
4193FlatHashMap<KEY, VALUE, HASH, EQUAL>::find(
const KEY& key)
4195 return d_impl.find(key);
4198template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4199template <
class INPUT_ITERATOR>
4200void FlatHashMap<KEY, VALUE, HASH, EQUAL>::insert(INPUT_ITERATOR first,
4201 INPUT_ITERATOR last)
4203 d_impl.insert(first, last);
4209template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4210template <
class MAPPED>
4213FlatHashMap<KEY, VALUE, HASH, EQUAL>::insert_or_assign(
const KEY& key,
4216 iterator iter = find(key);
4217 if (iter !=
end()) {
4219 return make_pair(iter,
false);
4224template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4225template <
class MAPPED>
4228FlatHashMap<KEY, VALUE, HASH, EQUAL>::insert_or_assign(
4229 BloombergLP::bslmf::MovableRef<KEY> key,
4232 const KEY& lvalue = key;
4233 iterator iter = find(lvalue);
4234 if (iter !=
end()) {
4236 return make_pair(iter,
false);
4242template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4243template <
class MAPPED>
4245typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
4246FlatHashMap<KEY, VALUE, HASH, EQUAL>::insert_or_assign(const_iterator,
4250 return insert_or_assign(key,
4254template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4255template <
class MAPPED>
4257typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
4258FlatHashMap<KEY, VALUE, HASH, EQUAL>::insert_or_assign(
4260 BloombergLP::bslmf::MovableRef<KEY> key,
4263 const KEY& lvalue = key;
4269#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
4270template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4271void FlatHashMap<KEY, VALUE, HASH, EQUAL>::insert(
4272 bsl::initializer_list<value_type> values)
4274 insert(values.begin(), values.end());
4278template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4280void FlatHashMap<KEY, VALUE, HASH, EQUAL>::rehash(bsl::size_t minimumCapacity)
4282 d_impl.rehash(minimumCapacity);
4285template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4287void FlatHashMap<KEY, VALUE, HASH, EQUAL>::reserve(bsl::size_t numEntries)
4289 d_impl.reserve(numEntries);
4292template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4294void FlatHashMap<KEY, VALUE, HASH, EQUAL>::reset()
4299#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
4302#ifndef BDLC_FLATHASHMAP_VARIADIC_LIMIT
4303#define BDLC_FLATHASHMAP_VARIADIC_LIMIT 10
4305#ifndef BDLC_FLATHASHMAP_VARIADIC_LIMIT_J
4306#define BDLC_FLATHASHMAP_VARIADIC_LIMIT_J BDLC_FLATHASHMAP_VARIADIC_LIMIT
4308#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR
4309#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 0
4310template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4313FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
const KEY& key)
4315 return d_impl.try_emplace(
4317 std::piecewise_construct,
4318 std::forward_as_tuple(key),
4319 std::forward_as_tuple());
4323#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 1
4324template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4325template<
class ARGS_01>
4328FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
const KEY& key,
4331 return d_impl.try_emplace(
4333 std::piecewise_construct,
4334 std::forward_as_tuple(key),
4335 std::forward_as_tuple(
4340#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 2
4341template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4342template<
class ARGS_01,
4346FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
const KEY& key,
4350 return d_impl.try_emplace(
4352 std::piecewise_construct,
4353 std::forward_as_tuple(key),
4354 std::forward_as_tuple(
4360#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 3
4361template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4362template<
class ARGS_01,
4367FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
const KEY& key,
4372 return d_impl.try_emplace(
4374 std::piecewise_construct,
4375 std::forward_as_tuple(key),
4376 std::forward_as_tuple(
4383#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 4
4384template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4385template<
class ARGS_01,
4391FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
const KEY& key,
4397 return d_impl.try_emplace(
4399 std::piecewise_construct,
4400 std::forward_as_tuple(key),
4401 std::forward_as_tuple(
4409#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 5
4410template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4411template<
class ARGS_01,
4418FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
const KEY& key,
4425 return d_impl.try_emplace(
4427 std::piecewise_construct,
4428 std::forward_as_tuple(key),
4429 std::forward_as_tuple(
4438#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 6
4439template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4440template<
class ARGS_01,
4448FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
const KEY& key,
4456 return d_impl.try_emplace(
4458 std::piecewise_construct,
4459 std::forward_as_tuple(key),
4460 std::forward_as_tuple(
4470#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 7
4471template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4472template<
class ARGS_01,
4481FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
const KEY& key,
4490 return d_impl.try_emplace(
4492 std::piecewise_construct,
4493 std::forward_as_tuple(key),
4494 std::forward_as_tuple(
4505#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 8
4506template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4507template<
class ARGS_01,
4517FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
const KEY& key,
4527 return d_impl.try_emplace(
4529 std::piecewise_construct,
4530 std::forward_as_tuple(key),
4531 std::forward_as_tuple(
4543#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 9
4544template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4545template<
class ARGS_01,
4556FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
const KEY& key,
4567 return d_impl.try_emplace(
4569 std::piecewise_construct,
4570 std::forward_as_tuple(key),
4571 std::forward_as_tuple(
4584#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 10
4585template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4586template<
class ARGS_01,
4598FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
const KEY& key,
4610 return d_impl.try_emplace(
4612 std::piecewise_construct,
4613 std::forward_as_tuple(key),
4614 std::forward_as_tuple(
4629#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 0
4630template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4632FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
4633 BloombergLP::bslmf::MovableRef<KEY> key)
4635 return d_impl.try_emplace(
4637 std::piecewise_construct,
4639 std::forward_as_tuple());
4643#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 1
4644template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4645template <
class ARGS_01>
4647FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
4648 BloombergLP::bslmf::MovableRef<KEY> key,
4651 return d_impl.try_emplace(
4653 std::piecewise_construct,
4655 std::forward_as_tuple(
4660#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 2
4661template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4662template <
class ARGS_01,
4665FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
4666 BloombergLP::bslmf::MovableRef<KEY> key,
4670 return d_impl.try_emplace(
4672 std::piecewise_construct,
4674 std::forward_as_tuple(
4680#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 3
4681template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4682template <
class ARGS_01,
4686FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
4687 BloombergLP::bslmf::MovableRef<KEY> key,
4692 return d_impl.try_emplace(
4694 std::piecewise_construct,
4696 std::forward_as_tuple(
4703#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 4
4704template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4705template <
class ARGS_01,
4710FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
4711 BloombergLP::bslmf::MovableRef<KEY> key,
4717 return d_impl.try_emplace(
4719 std::piecewise_construct,
4721 std::forward_as_tuple(
4729#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 5
4730template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4731template <
class ARGS_01,
4737FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
4738 BloombergLP::bslmf::MovableRef<KEY> key,
4745 return d_impl.try_emplace(
4747 std::piecewise_construct,
4749 std::forward_as_tuple(
4758#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 6
4759template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4760template <
class ARGS_01,
4767FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
4768 BloombergLP::bslmf::MovableRef<KEY> key,
4776 return d_impl.try_emplace(
4778 std::piecewise_construct,
4780 std::forward_as_tuple(
4790#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 7
4791template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4792template <
class ARGS_01,
4800FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
4801 BloombergLP::bslmf::MovableRef<KEY> key,
4810 return d_impl.try_emplace(
4812 std::piecewise_construct,
4814 std::forward_as_tuple(
4825#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 8
4826template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4827template <
class ARGS_01,
4836FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
4837 BloombergLP::bslmf::MovableRef<KEY> key,
4847 return d_impl.try_emplace(
4849 std::piecewise_construct,
4851 std::forward_as_tuple(
4863#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 9
4864template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4865template <
class ARGS_01,
4875FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
4876 BloombergLP::bslmf::MovableRef<KEY> key,
4887 return d_impl.try_emplace(
4889 std::piecewise_construct,
4891 std::forward_as_tuple(
4904#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 10
4905template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4906template <
class ARGS_01,
4917FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
4918 BloombergLP::bslmf::MovableRef<KEY> key,
4930 return d_impl.try_emplace(
4932 std::piecewise_construct,
4934 std::forward_as_tuple(
4949#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 0
4950template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4951typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
4952FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
4955 return d_impl.try_emplace(
4957 std::piecewise_construct,
4958 std::forward_as_tuple(key),
4959 std::forward_as_tuple())
4964#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 1
4965template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4966template<
class ARGS_01>
4967typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
4968FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
4972 return d_impl.try_emplace(
4974 std::piecewise_construct,
4975 std::forward_as_tuple(key),
4976 std::forward_as_tuple(
4982#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 2
4983template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
4984template<
class ARGS_01,
4986typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
4987FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
4992 return d_impl.try_emplace(
4994 std::piecewise_construct,
4995 std::forward_as_tuple(key),
4996 std::forward_as_tuple(
5003#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 3
5004template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5005template<
class ARGS_01,
5008typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5009FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5015 return d_impl.try_emplace(
5017 std::piecewise_construct,
5018 std::forward_as_tuple(key),
5019 std::forward_as_tuple(
5027#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 4
5028template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5029template<
class ARGS_01,
5033typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5034FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5041 return d_impl.try_emplace(
5043 std::piecewise_construct,
5044 std::forward_as_tuple(key),
5045 std::forward_as_tuple(
5054#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 5
5055template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5056template<
class ARGS_01,
5061typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5062FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5070 return d_impl.try_emplace(
5072 std::piecewise_construct,
5073 std::forward_as_tuple(key),
5074 std::forward_as_tuple(
5084#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 6
5085template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5086template<
class ARGS_01,
5092typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5093FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5102 return d_impl.try_emplace(
5104 std::piecewise_construct,
5105 std::forward_as_tuple(key),
5106 std::forward_as_tuple(
5117#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 7
5118template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5119template<
class ARGS_01,
5126typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5127FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5137 return d_impl.try_emplace(
5139 std::piecewise_construct,
5140 std::forward_as_tuple(key),
5141 std::forward_as_tuple(
5153#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 8
5154template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5155template<
class ARGS_01,
5163typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5164FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5175 return d_impl.try_emplace(
5177 std::piecewise_construct,
5178 std::forward_as_tuple(key),
5179 std::forward_as_tuple(
5192#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 9
5193template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5194template<
class ARGS_01,
5203typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5204FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5216 return d_impl.try_emplace(
5218 std::piecewise_construct,
5219 std::forward_as_tuple(key),
5220 std::forward_as_tuple(
5234#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 10
5235template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5236template<
class ARGS_01,
5246typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5247FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5260 return d_impl.try_emplace(
5262 std::piecewise_construct,
5263 std::forward_as_tuple(key),
5264 std::forward_as_tuple(
5280#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 0
5281template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5282typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5283FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5284 BloombergLP::bslmf::MovableRef<KEY> key)
5286 return d_impl.try_emplace(
5288 std::piecewise_construct,
5290 std::forward_as_tuple())
5295#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 1
5296template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5297template <
class ARGS_01>
5298typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5299FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5300 BloombergLP::bslmf::MovableRef<KEY> key,
5303 return d_impl.try_emplace(
5305 std::piecewise_construct,
5307 std::forward_as_tuple(
5313#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 2
5314template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5315template <
class ARGS_01,
5317typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5318FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5319 BloombergLP::bslmf::MovableRef<KEY> key,
5323 return d_impl.try_emplace(
5325 std::piecewise_construct,
5327 std::forward_as_tuple(
5334#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 3
5335template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5336template <
class ARGS_01,
5339typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5340FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5341 BloombergLP::bslmf::MovableRef<KEY> key,
5346 return d_impl.try_emplace(
5348 std::piecewise_construct,
5350 std::forward_as_tuple(
5358#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 4
5359template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5360template <
class ARGS_01,
5364typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5365FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5366 BloombergLP::bslmf::MovableRef<KEY> key,
5372 return d_impl.try_emplace(
5374 std::piecewise_construct,
5376 std::forward_as_tuple(
5385#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 5
5386template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5387template <
class ARGS_01,
5392typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5393FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5394 BloombergLP::bslmf::MovableRef<KEY> key,
5401 return d_impl.try_emplace(
5403 std::piecewise_construct,
5405 std::forward_as_tuple(
5415#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 6
5416template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5417template <
class ARGS_01,
5423typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5424FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5425 BloombergLP::bslmf::MovableRef<KEY> key,
5433 return d_impl.try_emplace(
5435 std::piecewise_construct,
5437 std::forward_as_tuple(
5448#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 7
5449template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5450template <
class ARGS_01,
5457typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5458FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5459 BloombergLP::bslmf::MovableRef<KEY> key,
5468 return d_impl.try_emplace(
5470 std::piecewise_construct,
5472 std::forward_as_tuple(
5484#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 8
5485template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5486template <
class ARGS_01,
5494typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5495FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5496 BloombergLP::bslmf::MovableRef<KEY> key,
5506 return d_impl.try_emplace(
5508 std::piecewise_construct,
5510 std::forward_as_tuple(
5523#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 9
5524template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5525template <
class ARGS_01,
5534typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5535FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5536 BloombergLP::bslmf::MovableRef<KEY> key,
5547 return d_impl.try_emplace(
5549 std::piecewise_construct,
5551 std::forward_as_tuple(
5565#if BDLC_FLATHASHMAP_VARIADIC_LIMIT_J >= 10
5566template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5567template <
class ARGS_01,
5577typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5578FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5579 BloombergLP::bslmf::MovableRef<KEY> key,
5591 return d_impl.try_emplace(
5593 std::piecewise_construct,
5595 std::forward_as_tuple(
5614#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR
5615template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5616template<
class... ARGS>
5619FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
const KEY& key,
5622 return d_impl.try_emplace(
5624 std::piecewise_construct,
5625 std::forward_as_tuple(key),
5629template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5630template <
class... ARGS>
5632FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(
5633 BloombergLP::bslmf::MovableRef<KEY> key,
5636 return d_impl.try_emplace(
5638 std::piecewise_construct,
5643template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5644template<
class... ARGS>
5645typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5646FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5650 return d_impl.try_emplace(
5652 std::piecewise_construct,
5653 std::forward_as_tuple(key),
5658template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5659template <
class... ARGS>
5660typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5661FlatHashMap<KEY, VALUE, HASH, EQUAL>::try_emplace(const_iterator,
5662 BloombergLP::bslmf::MovableRef<KEY> key,
5665 return d_impl.try_emplace(
5667 std::piecewise_construct,
5678template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5680typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5681 FlatHashMap<KEY, VALUE, HASH, EQUAL>::begin()
5683 return d_impl.begin();
5686template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5688typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::iterator
5689 FlatHashMap<KEY, VALUE, HASH, EQUAL>::end()
5691 return d_impl.end();
5696template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5698void FlatHashMap<KEY, VALUE, HASH, EQUAL>::swap(FlatHashMap& other)
5702 d_impl.swap(other.d_impl);
5706template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5708const VALUE& FlatHashMap<KEY, VALUE, HASH, EQUAL>::at(
const KEY& key)
const
5710 const_iterator node = d_impl.find(key);
5712 if (node == d_impl.end()) {
5713 BloombergLP::bslstl::StdExceptUtil::throwOutOfRange(
5714 "FlatHashMap<...>::at(key_type) const: invalid key value");
5717 return node->second;
5720template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5722bsl::size_t FlatHashMap<KEY, VALUE, HASH, EQUAL>::capacity()
const
5724 return d_impl.capacity();
5727template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5729bool FlatHashMap<KEY, VALUE, HASH, EQUAL>::contains(
const KEY& key)
const
5731 return d_impl.contains(key);
5734template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5736bsl::size_t FlatHashMap<KEY, VALUE, HASH, EQUAL>::count(
const KEY& key)
const
5738 return d_impl.count(key);
5741template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5743bool FlatHashMap<KEY, VALUE, HASH, EQUAL>::empty()
const
5745 return d_impl.empty();
5748template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5750 typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::const_iterator>
5751FlatHashMap<KEY, VALUE, HASH, EQUAL>::equal_range(
const KEY& key)
const
5753 return d_impl.equal_range(key);
5756template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5758typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::const_iterator
5759FlatHashMap<KEY, VALUE, HASH, EQUAL>::find(
const KEY& key)
const
5761 return d_impl.find(key);
5764template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5766HASH FlatHashMap<KEY, VALUE, HASH, EQUAL>::hash_function()
const
5768 return d_impl.hash_function();
5771template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5773EQUAL FlatHashMap<KEY, VALUE, HASH, EQUAL>::key_eq()
const
5775 return d_impl.key_eq();
5778template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5780float FlatHashMap<KEY, VALUE, HASH, EQUAL>::load_factor()
const
5782 return d_impl.load_factor();
5785template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5787float FlatHashMap<KEY, VALUE, HASH, EQUAL>::max_load_factor()
const
5789 return d_impl.max_load_factor();
5792template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5794bsl::size_t FlatHashMap<KEY, VALUE, HASH, EQUAL>::size()
const
5796 return d_impl.size();
5801template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5803typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::const_iterator
5804 FlatHashMap<KEY, VALUE, HASH, EQUAL>::begin()
const
5806 return d_impl.begin();
5808template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5810typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::const_iterator
5811 FlatHashMap<KEY, VALUE, HASH, EQUAL>::cbegin()
const
5813 return d_impl.cbegin();
5816template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5818typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::const_iterator
5819 FlatHashMap<KEY, VALUE, HASH, EQUAL>::cend()
const
5821 return d_impl.cend();
5824template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5826typename FlatHashMap<KEY, VALUE, HASH, EQUAL>::const_iterator
5827 FlatHashMap<KEY, VALUE, HASH, EQUAL>::end()
const
5829 return d_impl.end();
5834template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5838 return d_impl.allocator();
5841template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5842bsl::ostream& FlatHashMap<KEY, VALUE, HASH, EQUAL>::print(
5843 bsl::ostream& stream,
5845 int spacesPerLevel)
const
5855 const_iterator iter =
begin();
5856 while (iter !=
end()) {
5857 printer.printValue(*iter);
5869template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5872 const FlatHashMap<KEY, VALUE, HASH, EQUAL>& rhs)
5874 return lhs.d_impl ==
rhs.d_impl;
5877template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5880 const FlatHashMap<KEY, VALUE, HASH, EQUAL>& rhs)
5882 return lhs.d_impl !=
rhs.d_impl;
5885template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5888 bsl::ostream& stream,
5889 const FlatHashMap<KEY, VALUE, HASH, EQUAL>& map)
5891 return map.print(stream, 0, -1);
5895template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5897void bdlc::swap(FlatHashMap<KEY, VALUE, HASH, EQUAL>& a,
5898 FlatHashMap<KEY, VALUE, HASH, EQUAL>& b)
5909template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5910struct HasStlIterators<
bdlc::FlatHashMap<KEY, VALUE, HASH, EQUAL> >
5918template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
5919struct UsesBslmaAllocator<
bdlc::FlatHashMap<KEY, VALUE, HASH, EQUAL> >
5927# error Not valid except when included from bdlc_flathashmap.h
HASH hasher
Definition bdlc_flathashmap.h:468
const value_type * const_pointer
Definition bdlc_flathashmap.h:472
value_type * pointer
Definition bdlc_flathashmap.h:471
bsl::ptrdiff_t difference_type
Definition bdlc_flathashmap.h:466
friend void swap(FlatHashMap< K, V, H, E > &, FlatHashMap< K, V, H, E > &)
const value_type & const_reference
Definition bdlc_flathashmap.h:470
void clear()
Definition bdlc_flathashmap.h:1746
VALUE & at(const KEY &key)
Definition bdlc_flathashmap.h:1731
EQUAL key_eq() const
Definition bdlc_flathashmap.h:2084
iterator find(const KEY &key)
Definition bdlc_flathashmap.h:1821
bool contains(const KEY &key) const
Definition bdlc_flathashmap.h:2040
ImplType::const_iterator const_iterator
Definition bdlc_flathashmap.h:474
bsl::pair< iterator, bool > insert_or_assign(const KEY &key, M &&obj)
bool empty() const
Definition bdlc_flathashmap.h:2054
const_iterator cbegin() const
Definition bdlc_flathashmap.h:2122
bsl::size_t size() const
Return the number of elements in this map.
Definition bdlc_flathashmap.h:2105
bsl::enable_if< bsl::is_convertible< VALUE_TYPE, value_type >::value, bsl::pair< iterator, bool > >::type insert(BSLS_COMPILERFEATURES_FORWARD_REF(VALUE_TYPE) value)
Definition bdlc_flathashmap.h:875
void rehash(bsl::size_t minimumCapacity)
Definition bdlc_flathashmap.h:1906
bslma::Allocator * allocator() const
Return the allocator used by this flat hash map to supply memory.
Definition bdlc_flathashmap.h:2147
bsl::pair< iterator, bool > emplace(ARGS &&... args)
bsl::pair< iterator, iterator > equal_range(const KEY &key)
Definition bdlc_flathashmap.h:1754
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition bdlc_flathashmap.h:2153
const_iterator cend() const
Definition bdlc_flathashmap.h:2130
void reserve(bsl::size_t numEntries)
Definition bdlc_flathashmap.h:1913
float load_factor() const
Definition bdlc_flathashmap.h:2091
HASH hash_function() const
Definition bdlc_flathashmap.h:2077
~FlatHashMap()
Destroy this object and each of its elements.
Definition bdlc_flathashmap.h:1667
bsl::size_t erase(const KEY &key)
Definition bdlc_flathashmap.h:1782
iterator begin()
Definition bdlc_flathashmap.h:1992
FlatHashMap & operator=(const FlatHashMap &rhs)
Definition bdlc_flathashmap.h:1675
EQUAL key_compare
Definition bdlc_flathashmap.h:467
KEY key_type
Definition bdlc_flathashmap.h:463
FlatHashMap()
Definition bdlc_flathashmap.h:1468
VALUE & operator[](const KEY &key)
Definition bdlc_flathashmap.h:1717
ImplType::iterator iterator
Definition bdlc_flathashmap.h:473
float max_load_factor() const
Definition bdlc_flathashmap.h:2098
value_type & reference
Definition bdlc_flathashmap.h:469
void reset()
Definition bdlc_flathashmap.h:1920
bsl::size_t capacity() const
Definition bdlc_flathashmap.h:2033
iterator emplace_hint(const_iterator hint, ARGS &&... args)
Definition bdlc_flathashmap.h:1773
bsl::size_t count(const KEY &key) const
Definition bdlc_flathashmap.h:2047
VALUE mapped_type
Definition bdlc_flathashmap.h:464
bsl::pair< typename bsl::add_const< KEY >::type, VALUE > value_type
Definition bdlc_flathashmap.h:461
iterator end()
Definition bdlc_flathashmap.h:2000
bsl::size_t size_type
Definition bdlc_flathashmap.h:465
bslstl::ForwardIterator< const bsl::pair< KEY, VALUE >, IteratorImp > const_iterator
Definition bdlc_flathashtable.h:343
bslstl::ForwardIterator< bsl::pair< KEY, VALUE >, IteratorImp > iterator
Definition bdlc_flathashtable.h:341
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 bslma_destructorguard.h:132
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)
Definition bdlc_flathashmap.h:1435
static const KEY & key(const ENTRY &entry)
Return the key of the specified entry.
Definition bdlc_flathashmap.h:1456
static void construct(ENTRY *entry, bslma::Allocator *allocator, ARGS &&... args)
Definition bdlc_flathashmap.h:1419
TYPE first
Definition bslstl_pair.h:587
Definition bslmf_enableif.h:530
Definition bslstl_equalto.h:316
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
Definition bsls_objectbuffer.h:277
TYPE * address()
Definition bsls_objectbuffer.h:335
TYPE & object()
Definition bsls_objectbuffer.h:352