8#ifndef INCLUDED_BDLC_FLATHASHTABLE_GROUPCONTROL
9#define INCLUDED_BDLC_FLATHASHTABLE_GROUPCONTROL
66#include <bdlscm_version.h>
72#include <bsl_cstddef.h>
73#include <bsl_cstdint.h>
74#include <bsl_cstring.h>
76#if defined(BSLS_PLATFORM_CPU_SSE2)
94#if defined(BSLS_PLATFORM_CPU_SSE2)
102 static const bsl::uint64_t k_MULT = 0x0101010101010101ull;
103 static const bsl::uint64_t k_DEFLATE = 0x0002040810204081ull;
104 static const int k_DEFLATE_SHIFT = 56;
105 static const bsl::uint64_t k_MSB_MASK = 0x8080808080808080ull;
115 bsl::uint32_t matchRaw(bsl::uint8_t value)
const;
149 bsl::uint32_t
inUse()
const;
155 bsl::uint32_t
match(bsl::uint8_t value)
const;
172bsl::uint32_t FlatHashTable_GroupControl::matchRaw(bsl::uint8_t value)
const
174#if defined(BSLS_PLATFORM_CPU_SSE2)
175 return _mm_movemask_epi8(_mm_cmpeq_epi8(
176 _mm_set1_epi8(
static_cast<char>(value)),
179 Storage t = d_value ^ (k_MULT * value);
185 return static_cast<bsl::uint32_t
>(
186 (((~t) & k_MSB_MASK) * k_DEFLATE) >> k_DEFLATE_SHIFT);
192FlatHashTable_GroupControl::FlatHashTable_GroupControl(
193 const bsl::uint8_t *data)
195#if defined(BSLS_PLATFORM_CPU_SSE2)
196 d_value = _mm_loadu_si128(
static_cast<const Storage *
>(
197 static_cast<const void *
>(data)));
199 bsl::memcpy(&d_value, data,
k_SIZE);
208#if defined(BSLS_PLATFORM_CPU_SSE2)
209 return _mm_movemask_epi8(d_value);
211 return static_cast<bsl::uint32_t
>(
212 ((d_value & k_MSB_MASK) * k_DEFLATE) >> k_DEFLATE_SHIFT);
219#if defined(BSLS_PLATFORM_CPU_SSE2)
231 return matchRaw(value);
Definition bdlc_flathashtable_groupcontrol.h:91
static const bsl::uint8_t k_EMPTY
Definition bdlc_flathashtable_groupcontrol.h:125
~FlatHashTable_GroupControl()=default
static const bsl::size_t k_SIZE
Definition bdlc_flathashtable_groupcontrol.h:127
static const bsl::uint8_t k_ERASED
Definition bdlc_flathashtable_groupcontrol.h:126
bsl::uint32_t match(bsl::uint8_t value) const
Definition bdlc_flathashtable_groupcontrol.h:227
bsl::uint32_t inUse() const
Definition bdlc_flathashtable_groupcontrol.h:217
bsl::uint32_t available() const
Definition bdlc_flathashtable_groupcontrol.h:206
bsl::uint64_t Storage
Definition bdlc_flathashtable_groupcontrol.h:97
bool neverFull() const
Definition bdlc_flathashtable_groupcontrol.h:235
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_BYTEORDER_HOST_U64_TO_LE(x)
Definition bsls_byteorder.h:366
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlc_bitarray.h:506