8#ifndef INCLUDED_BDLC_FLATHASHSET
9#define INCLUDED_BDLC_FLATHASHSET
455#include <bdlscm_version.h>
484#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
485#include <bsl_initializer_list.h>
487#include <bsl_cstddef.h>
488#include <bsl_ostream.h>
489#include <bsl_utility.h>
491#if BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
497# define COMPILING_BDLC_FLATHASHSET_H
499# undef COMPILING_BDLC_FLATHASHSET_H
513template <
class KEY,
class HASH,
class EQUAL>
517template <
class KEY,
class HASH,
class EQUAL>
521template <
class KEY,
class HASH,
class EQUAL>
531template <
class ENTRY>
535#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
540 template <
class... ARGS>
551 template <
class KEY_TYPE>
558 static const ENTRY&
key(
const ENTRY& entry);
573template <
class KEY,
class HASH,
class EQUAL>
591 template <
class K,
class H,
class E>
663 template <
class INPUT_ITERATOR>
667 template <
class INPUT_ITERATOR>
672 template <
class INPUT_ITERATOR>
678 template <
class INPUT_ITERATOR>
686#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
765#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
782#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
794 template <
class... ARGS>
810 template <
class... ARGS>
819 bsl::size_t
erase(
const KEY& key);
821#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
827 template <
class LOOKUP_KEY>
829 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
830 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
834 return d_impl.
erase(key);
870 return d_impl.
insert(value);
888#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
895 template <
class LOOKUP_KEY>
897 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
898 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
917 return d_impl.
insert(value).first;
934#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
941 template <
class LOOKUP_KEY>
943 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
944 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
963 template <
class INPUT_ITERATOR>
964 void insert(INPUT_ITERATOR first, INPUT_ITERATOR last);
966#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
972 void insert(bsl::initializer_list<KEY> values);
982 void rehash(bsl::size_t minimumCapacity);
997 void reserve(bsl::size_t numEntries);
1020 bool contains(
const KEY& key)
const;
1024 template <
class LOOKUP_KEY>
1026 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1027 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1040 bsl::size_t count(
const KEY& key)
const;
1049 template <
class LOOKUP_KEY>
1051 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1052 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1053 , bsl::size_t >::type
1058 return find(key) !=
end() ? 1 : 0;
1074 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
1106 template <
class LOOKUP_KEY>
1108 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1109 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1143 bsl::size_t
size()
const;
1180 bsl::ostream& print(bsl::ostream& stream,
1182 int spacesPerLevel = 4)
const;
1192template <
class KEY,
class HASH,
class EQUAL>
1193bool operator==(
const FlatHashSet<KEY, HASH, EQUAL> &lhs,
1194 const FlatHashSet<KEY, HASH, EQUAL> &rhs);
1201template <
class KEY,
class HASH,
class EQUAL>
1202bool operator!=(
const FlatHashSet<KEY, HASH, EQUAL> &lhs,
1203 const FlatHashSet<KEY, HASH, EQUAL> &rhs);
1211template <
class KEY,
class HASH,
class EQUAL>
1221template <
class KEY,
class HASH,
class EQUAL>
1233#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1234template <
class ENTRY>
1235template <
class... ARGS>
1250template <
class ENTRY>
1266template <
class ENTRY>
1278template <
class KEY,
class HASH,
class EQUAL>
1281: d_impl(0, HASH(), EQUAL())
1285template <
class KEY,
class HASH,
class EQUAL>
1288: d_impl(0, HASH(), EQUAL(), basicAllocator)
1292template <
class KEY,
class HASH,
class EQUAL>
1295: d_impl(capacity, HASH(), EQUAL())
1299template <
class KEY,
class HASH,
class EQUAL>
1303: d_impl(capacity, HASH(), EQUAL(), basicAllocator)
1307template <
class KEY,
class HASH,
class EQUAL>
1312: d_impl(capacity, hash, EQUAL(), basicAllocator)
1316template <
class KEY,
class HASH,
class EQUAL>
1322: d_impl(capacity, hash, equal, basicAllocator)
1326template <
class KEY,
class HASH,
class EQUAL>
1327template <
class INPUT_ITERATOR>
1330 INPUT_ITERATOR last,
1332: d_impl(0, HASH(), EQUAL(), basicAllocator)
1337template <
class KEY,
class HASH,
class EQUAL>
1338template <
class INPUT_ITERATOR>
1341 INPUT_ITERATOR last,
1342 bsl::size_t capacity,
1344: d_impl(capacity, HASH(), EQUAL(), basicAllocator)
1349template <
class KEY,
class HASH,
class EQUAL>
1350template <
class INPUT_ITERATOR>
1353 INPUT_ITERATOR last,
1354 bsl::size_t capacity,
1357: d_impl(capacity, hash, EQUAL(), basicAllocator)
1362template <
class KEY,
class HASH,
class EQUAL>
1363template <
class INPUT_ITERATOR>
1366 INPUT_ITERATOR last,
1367 bsl::size_t capacity,
1371: d_impl(capacity, hash, equal, basicAllocator)
1376#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1377template <
class KEY,
class HASH,
class EQUAL>
1380 bsl::initializer_list<KEY> values,
1391template <
class KEY,
class HASH,
class EQUAL>
1394 bsl::initializer_list<KEY> values,
1395 bsl::size_t capacity,
1397: FlatHashSet(values.begin(),
1406template <
class KEY,
class HASH,
class EQUAL>
1409 bsl::initializer_list<KEY> values,
1410 bsl::size_t capacity,
1413: FlatHashSet(values.
begin(),
1422template <
class KEY,
class HASH,
class EQUAL>
1425 bsl::initializer_list<KEY> values,
1426 bsl::size_t capacity,
1430: FlatHashSet(values.
begin(),
1440template <
class KEY,
class HASH,
class EQUAL>
1444: d_impl(original.d_impl, basicAllocator)
1448template <
class KEY,
class HASH,
class EQUAL>
1452: d_impl(
bslmf::MovableRefUtil::move(
1453 bslmf::MovableRefUtil::access(original).d_impl))
1457template <
class KEY,
class HASH,
class EQUAL>
1462: d_impl(
bslmf::MovableRefUtil::move(
1463 bslmf::MovableRefUtil::access(original).d_impl),
1468template <
class KEY,
class HASH,
class EQUAL>
1475template <
class KEY,
class HASH,
class EQUAL>
1480 d_impl = rhs.d_impl;
1485template <
class KEY,
class HASH,
class EQUAL>
1497#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1498template <
class KEY,
class HASH,
class EQUAL>
1501 bsl::initializer_list<KEY> values)
1506 d_impl.hash_function(),
1508 d_impl.allocator());
1516template <
class KEY,
class HASH,
class EQUAL>
1523#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1524template <
class KEY,
class HASH,
class EQUAL>
1525template <
class... ARGS>
1532template <
class KEY,
class HASH,
class EQUAL>
1533template <
class... ARGS>
1545template <
class KEY,
class HASH,
class EQUAL>
1549 return d_impl.erase(key);
1552template <
class KEY,
class HASH,
class EQUAL>
1559 return d_impl.erase(position);
1562template <
class KEY,
class HASH,
class EQUAL>
1567 return d_impl.erase(first, last);
1570template <
class KEY,
class HASH,
class EQUAL>
1571template <
class INPUT_ITERATOR>
1574 INPUT_ITERATOR last)
1576 d_impl.insert(first, last);
1579#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1580template <
class KEY,
class HASH,
class EQUAL>
1584 insert(values.begin(), values.end());
1588template <
class KEY,
class HASH,
class EQUAL>
1592 d_impl.rehash(minimumCapacity);
1595template <
class KEY,
class HASH,
class EQUAL>
1599 d_impl.reserve(numEntries);
1602template <
class KEY,
class HASH,
class EQUAL>
1611template <
class KEY,
class HASH,
class EQUAL>
1617 d_impl.swap(other.d_impl);
1621template <
class KEY,
class HASH,
class EQUAL>
1625 return d_impl.capacity();
1628template <
class KEY,
class HASH,
class EQUAL>
1632 return d_impl.contains(key);
1635template <
class KEY,
class HASH,
class EQUAL>
1639 return d_impl.count(key);
1642template <
class KEY,
class HASH,
class EQUAL>
1646 return d_impl.empty();
1649template <
class KEY,
class HASH,
class EQUAL>
1655 return d_impl.equal_range(key);
1658template <
class KEY,
class HASH,
class EQUAL>
1663 return d_impl.find(key);
1666template <
class KEY,
class HASH,
class EQUAL>
1670 return d_impl.hash_function();
1673template <
class KEY,
class HASH,
class EQUAL>
1677 return d_impl.key_eq();
1680template <
class KEY,
class HASH,
class EQUAL>
1684 return d_impl.load_factor();
1687template <
class KEY,
class HASH,
class EQUAL>
1691 return d_impl.max_load_factor();
1694template <
class KEY,
class HASH,
class EQUAL>
1698 return d_impl.size();
1703template <
class KEY,
class HASH,
class EQUAL>
1708 return d_impl.begin();
1711template <
class KEY,
class HASH,
class EQUAL>
1716 return d_impl.cbegin();
1719template <
class KEY,
class HASH,
class EQUAL>
1724 return d_impl.cend();
1727template <
class KEY,
class HASH,
class EQUAL>
1732 return d_impl.end();
1737template <
class KEY,
class HASH,
class EQUAL>
1741 return d_impl.allocator();
1744template <
class KEY,
class HASH,
class EQUAL>
1746 bsl::ostream& stream,
1748 int spacesPerLevel)
const
1759 while (iter != end()) {
1772template <
class KEY,
class HASH,
class EQUAL>
1775 const FlatHashSet<KEY, HASH, EQUAL>& rhs)
1777 return lhs.d_impl == rhs.d_impl;
1780template <
class KEY,
class HASH,
class EQUAL>
1783 const FlatHashSet<KEY, HASH, EQUAL>& rhs)
1785 return lhs.d_impl !=
rhs.d_impl;
1788template <
class KEY,
class HASH,
class EQUAL>
1791 const FlatHashSet<KEY, HASH, EQUAL>& set)
1793 return set.
print(stream, 0, -1);
1797template <
class KEY,
class HASH,
class EQUAL>
1799void bdlc::swap(FlatHashSet<KEY, HASH, EQUAL>& a,
1800 FlatHashSet<KEY, HASH, EQUAL>& b)
1811template <
class KEY,
class HASH,
class EQUAL>
1820template <
class KEY,
class HASH,
class EQUAL>
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition bdlc_flathashset.h:574
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
bsl::enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, typenamebsl::pair< iterator, bool > >::type insert(LOOKUP_KEY &&key)
Definition bdlc_flathashset.h:900
const_iterator begin() const
Definition bdlc_flathashset.h:1706
bsl::enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, bsl::size_t >::type count(const LOOKUP_KEY &key) const
Definition bdlc_flathashset.h:1054
HASH hash_function() const
Definition bdlc_flathashset.h:1668
void reserve(bsl::size_t numEntries)
Definition bdlc_flathashset.h:1597
bsl::enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, bsl::pair< const_iterator, const_iterator > >::type equal_range(const LOOKUP_KEY &key) const
Definition bdlc_flathashset.h:1091
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
const_iterator insert(const_iterator, const KEY &value)
Definition bdlc_flathashset.h:912
EQUAL key_compare
Definition bdlc_flathashset.h:600
friend void swap(FlatHashSet< K, H, E > &, FlatHashSet< K, H, E > &)
bsl::enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, const_iterator >::type find(const LOOKUP_KEY &key) const
Definition bdlc_flathashset.h:1111
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
bsl::enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value &&bsl::is_convertible< LOOKUP_KEY &&, const_iterator >::value==false &&bsl::is_convertible< const_iterator, LOOKUP_KEY && >::value==false, iterator >::type insert(const_iterator, LOOKUP_KEY &&key)
Definition bdlc_flathashset.h:948
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
bsl::enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, bsl::size_t >::type erase(LOOKUP_KEY &&key)
Definition bdlc_flathashset.h:832
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
const_iterator insert(const_iterator, bslmf::MovableRef< KEY > value)
Definition bdlc_flathashset.h:926
bsl::size_t size_type
Definition bdlc_flathashset.h:598
bsl::pair< const_iterator, bool > insert(bslmf::MovableRef< KEY > value)
Definition bdlc_flathashset.h:880
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
bsl::enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, bool >::type contains(const LOOKUP_KEY &key) const
Definition bdlc_flathashset.h:1029
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
Definition bdlc_flathashtable.h:326
bsl::size_t erase(const KEY &key)
Definition bdlc_flathashtable.h:1927
bsl::pair< iterator, bool > insert(const ENTRY &entry)
Definition bdlc_flathashtable.h:2050
iterator find(const KEY &key)
Definition bdlc_flathashtable.h:2036
bslstl::ForwardIterator< const KEY, IteratorImp > const_iterator
Definition bdlc_flathashtable.h:343
bsl::enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, bsl::pair< iterator, bool > >::type insertTransparent(LOOKUP_KEY &&key)
Definition bdlc_flathashtable.h:754
bsl::pair< iterator, iterator > equal_range(const KEY &key)
Definition bdlc_flathashtable.h:1894
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
void printValue(const TYPE &data) const
Definition bslim_printer.h:1240
void end(bool suppressBracket=false) const
void start(bool suppressBracket=false) const
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
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
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
Definition bdlc_flathashset.h:533
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
Definition bslalg_hasstliterators.h:99
static void construct(TARGET_TYPE *address, const ALLOCATOR &allocator)
Definition bslma_constructionutil.h:1244
Definition bslma_usesbslmaallocator.h:344
static MovableRef< t_TYPE > move(t_TYPE &reference) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1067