18 uint8_t fp = (uint8_t)(hash >> (
sizeof(
size_t) * 8U - 8U));
19 return (fp == 0) ? 1U : fp;
55uint64_t
const NS(dc_ankerl_index_large,
max) = ((((int64_t)1) << 47) - 1);
59static size_t NS(dc_ankerl_index_large,
get)(dc_ankerl_index_large
const* index) {
60 return (
size_t)index->dense_index_lo + ((size_t)index->dense_index_hi << 32);
63static dc_ankerl_index_large
NS(dc_ankerl_index_large,
new)(
size_t to) {
64 DC_ASSERT(to <= dc_ankerl_index_large_max,
"Index too large for ankerl");
65 return (dc_ankerl_index_large){
66 .dense_index_hi = (uint16_t)(to >> 32),
67 .dense_index_lo = (uint32_t)to,
80 return (
size_t)index->dense_index;
84 DC_ASSERT(to <= dc_ankerl_index_small_max,
"Index too large for ankerl map with small buckets");
86 .dense_index = (uint16_t)to,
static uint8_t dc_ankerl_fingerprint_from_hash(size_t hash)
static const size_t dc_ankerl_initial_items
static bool dc_ankerl_mdata_present(dc_ankerl_mdata const *bucket)
static dc_ankerl_dfd dc_ankerl_dfd_new(uint8_t distance)
static const dc_ankerl_dfd dc_ankerl_dfd_none
static dc_ankerl_dfd dc_ankerl_dfd_decrement_for_backshift(dc_ankerl_dfd dfd)
static const dc_ankerl_dfd dc_ankerl_dfd_max
static dc_ankerl_dfd dc_ankerl_dfd_increment(dc_ankerl_dfd dfd)
static size_t dc_ankerl_buckets_capacity(size_t for_items)
static DC_INLINE DC_CONST size_t dc_math_next_power_of_2(size_t x)
#define DC_ASSERT(expr,...)