8#ifndef INCLUDED_BDLCC_STRIPEDUNORDEREDMULTIMAP
9#define INCLUDED_BDLCC_STRIPEDUNORDEREDMULTIMAP
250#include <bdlscm_version.h>
259#include <bsl_functional.h>
401 bsl::size_t
eraseAll(
const KEY& key);
419 template <
class RANDOM_ITER>
420 bsl::size_t
eraseBulkAll(RANDOM_ITER first, RANDOM_ITER last);
439 void insert(
const KEY& key,
const VALUE& value);
457 template <
class RANDOM_ITER>
458 void insertBulk(RANDOM_ITER first, RANDOM_ITER last);
464 void rehash(bsl::size_t numBuckets);
523 bsl::size_t
setValueAll(
const KEY& key,
const VALUE& value);
533 bsl::size_t
setValueFirst(
const KEY& key,
const VALUE& value);
626 bsl::size_t
bucketSize(bsl::size_t index)
const;
638 const KEY& key)
const;
639 bsl::size_t
getValueAll(std::vector<VALUE> *valuesPtr,
640 const KEY& key)
const;
641#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR
647 bsl::size_t
getValueAll(std::pmr::vector<VALUE> *valuesPtr,
648 const KEY& key)
const;
656 bsl::size_t
getValueFirst(VALUE *value,
const KEY& key)
const;
721 bsl::size_t
size()
const;
741template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
744 bsl::size_t numInitialBuckets,
745 bsl::size_t numStripes,
747: d_imp(numInitialBuckets, numStripes, basicAllocator)
751template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
755: d_imp(k_DEFAULT_NUM_BUCKETS, k_DEFAULT_NUM_STRIPES, basicAllocator)
760template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
767template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
771 d_imp.disableRehash();
774template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
778 d_imp.enableRehash();
781template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
786 return d_imp.eraseAll(key);
789template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
795 return d_imp.eraseAllIf(key, predicate);
798template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
799template <
class RANDOM_ITER>
807 return d_imp.eraseBulkAll(first, last);
810template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
815 return d_imp.eraseFirst(key);
818template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
825 return d_imp.eraseFirstIf(key, predicate);
828template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
834 d_imp.insertAlways(key, value);
837template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
846template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
847template <
class RANDOM_ITER>
855 d_imp.insertBulkAlways(first, last);
858template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
861 bsl::size_t numBuckets)
863 d_imp.rehash(numBuckets);
866template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
873 return d_imp.setComputedValueAll(key, visitor);
876template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
883 return d_imp.setComputedValueFirst(key, visitor);
886template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
892 return d_imp.setValueAll(key, value);
895template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
901 return d_imp.setValueFirst(key, value);
904template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
913template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
919 return d_imp.update(key, visitor);
922template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
927 return d_imp.visit(visitor);
930template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
936 return d_imp.visit(key, visitor);
940template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
945 return d_imp.bucketCount();
948template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
951 const KEY& key)
const
953 return d_imp.bucketIndex(key);
956template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
959 bsl::size_t index)
const
963 return d_imp.bucketSize(index);
966template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
970 return d_imp.empty();
973template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
977 return d_imp.equalFunction();
980template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
984 const KEY& key)
const
986 return d_imp.getValue(valuesPtr, key);
989template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
992 std::vector<VALUE> *valuesPtr,
993 const KEY& key)
const
995 return d_imp.getValue(valuesPtr, key);
998#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR
999template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
1002 std::pmr::vector<VALUE> *valuesPtr,
1003 const KEY& key)
const
1005 return d_imp.getValue(valuesPtr, key);
1009template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
1013 const KEY& key)
const
1015 return d_imp.getValue(value, key);
1018template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
1022 return d_imp.hashFunction();
1025template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
1029 return d_imp.isRehashEnabled();
1032template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
1036 return d_imp.loadFactor();
1039template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
1044 return d_imp.maxLoadFactor();
1047template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
1052 return d_imp.numStripes();
1055template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
1060 return d_imp.visitReadOnly(visitor);
1063template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
1069 return d_imp.visitReadOnly(key, visitor);
1072template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
1076 return d_imp.size();
1081template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
1086 return d_imp.allocator();
1093template <
class KEY,
class VALUE,
class HASH,
class EQUAL>
Definition bdlcc_stripedunorderedcontainerimpl.h:542
Definition bdlcc_stripedunorderedmultimap.h:290
bsl::size_t setValueAll(const KEY &key, const VALUE &value)
Definition bdlcc_stripedunorderedmultimap.h:888
int setComputedValueFirst(const KEY &key, const VisitorFunction &visitor)
Definition bdlcc_stripedunorderedmultimap.h:879
void insertBulk(RANDOM_ITER first, RANDOM_ITER last)
Definition bdlcc_stripedunorderedmultimap.h:849
bsl::size_t setValueFirst(const KEY &key, const VALUE &value)
Definition bdlcc_stripedunorderedmultimap.h:897
bool isRehashEnabled() const
Return true if rehash is enabled, or false otherwise.
Definition bdlcc_stripedunorderedmultimap.h:1027
void rehash(bsl::size_t numBuckets)
Definition bdlcc_stripedunorderedmultimap.h:860
void insert(const KEY &key, const VALUE &value)
Definition bdlcc_stripedunorderedmultimap.h:830
~StripedUnorderedMultiMap()=default
bsl::size_t bucketCount() const
Definition bdlcc_stripedunorderedmultimap.h:943
bsl::size_t eraseAllIf(const KEY &key, const EraseIfValuePredicate &predicate)
Definition bdlcc_stripedunorderedmultimap.h:791
@ k_DEFAULT_NUM_STRIPES
Definition bdlcc_stripedunorderedmultimap.h:314
@ k_DEFAULT_NUM_BUCKETS
Definition bdlcc_stripedunorderedmultimap.h:313
int visit(const VisitorFunction &visitor)
Definition bdlcc_stripedunorderedmultimap.h:924
int visitReadOnly(const ReadOnlyVisitorFunction &visitor) const
Definition bdlcc_stripedunorderedmultimap.h:1057
HASH hashFunction() const
Definition bdlcc_stripedunorderedmultimap.h:1020
bsl::size_t bucketSize(bsl::size_t index) const
Definition bdlcc_stripedunorderedmultimap.h:958
bsl::size_t eraseFirst(const KEY &key)
Definition bdlcc_stripedunorderedmultimap.h:812
float loadFactor() const
Definition bdlcc_stripedunorderedmultimap.h:1034
bsl::size_t size() const
Return the current number of elements in this hash map.
Definition bdlcc_stripedunorderedmultimap.h:1074
bsl::function< bool(VALUE *, const KEY &)> VisitorFunction
Definition bdlcc_stripedunorderedmultimap.h:332
bsl::function< bool(const VALUE &, const KEY &)> ReadOnlyVisitorFunction
Definition bdlcc_stripedunorderedmultimap.h:346
int update(const KEY &key, const VisitorFunction &visitor)
Definition bdlcc_stripedunorderedmultimap.h:915
bsl::size_t eraseFirstIf(const KEY &key, const EraseIfValuePredicate &predicate)
Definition bdlcc_stripedunorderedmultimap.h:821
float maxLoadFactor() const
Definition bdlcc_stripedunorderedmultimap.h:1042
bsl::size_t numStripes() const
Return the number of stripes in the hash.
Definition bdlcc_stripedunorderedmultimap.h:1049
EQUAL equalFunction() const
Definition bdlcc_stripedunorderedmultimap.h:975
bool empty() const
Definition bdlcc_stripedunorderedmultimap.h:968
void clear()
Definition bdlcc_stripedunorderedmultimap.h:762
bsl::size_t eraseAll(const KEY &key)
Definition bdlcc_stripedunorderedmultimap.h:783
bsl::size_t getValueFirst(VALUE *value, const KEY &key) const
Definition bdlcc_stripedunorderedmultimap.h:1011
bsl::size_t eraseBulkAll(RANDOM_ITER first, RANDOM_ITER last)
Definition bdlcc_stripedunorderedmultimap.h:801
void enableRehash()
Definition bdlcc_stripedunorderedmultimap.h:776
bsl::function< bool(const VALUE &)> EraseIfValuePredicate
Definition bdlcc_stripedunorderedmultimap.h:356
bsl::size_t bucketIndex(const KEY &key) const
Definition bdlcc_stripedunorderedmultimap.h:950
int setComputedValueAll(const KEY &key, const VisitorFunction &visitor)
Definition bdlcc_stripedunorderedmultimap.h:869
void disableRehash()
Prevent future rehash until enableRehash is called.
Definition bdlcc_stripedunorderedmultimap.h:769
bsl::pair< KEY, VALUE > KVType
Value type of a bulk insert entry.
Definition bdlcc_stripedunorderedmultimap.h:320
bslma::Allocator * allocator() const
Definition bdlcc_stripedunorderedmultimap.h:1084
bsl::size_t getValueAll(bsl::vector< VALUE > *valuesPtr, const KEY &key) const
Definition bdlcc_stripedunorderedmultimap.h:982
Forward declaration.
Definition bslstl_function.h:946
Definition bslstl_pair.h:1280
Definition bslstl_vector.h:1120
Definition bslma_allocator.h:545
Definition bslmf_movableref.h:752
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlcc_boundedqueue.h:270
Definition baljsn_encoder_testtypes.h:76
Definition bslstl_equalto.h:316
Definition bslstl_hash.h:495
Definition bslma_usesbslmaallocator.h:344
static MovableRef< t_TYPE > move(t_TYPE &reference) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1067