Derive-C
Loading...
Searching...
No Matches
utils.h File Reference
#include <stdint.h>
#include <stddef.h>
#include <derive-c/core/math.h>
#include <derive-c/core/prelude.h>

Go to the source code of this file.

Data Structures

struct  dc_ankerl_mdata
struct  __attribute__
struct  dc_ankerl_index_small

Typedefs

typedef uint8_t dc_ankerl_dfd

Functions

static size_t dc_ankerl_buckets_capacity (size_t for_items)
static uint8_t dc_ankerl_fingerprint_from_hash (size_t hash)
static dc_ankerl_dfd dc_ankerl_dfd_increment (dc_ankerl_dfd dfd)
static dc_ankerl_dfd dc_ankerl_dfd_decrement_for_backshift (dc_ankerl_dfd dfd)
static dc_ankerl_dfd dc_ankerl_dfd_new (uint8_t distance)
static bool dc_ankerl_mdata_present (dc_ankerl_mdata const *bucket)
 DC_STATIC_ASSERT (sizeof(dc_ankerl_index_large)==6)
static size_t get (dc_ankerl_index_large const *index)
static dc_ankerl_index_large new (size_t to)
 DC_STATIC_ASSERT (sizeof(dc_ankerl_index_small)==2)
static size_t get (dc_ankerl_index_small const *index)

Variables

static const size_t dc_ankerl_initial_items = 256
static const dc_ankerl_dfd dc_ankerl_dfd_none = 0
static const dc_ankerl_dfd dc_ankerl_dfd_max = (dc_ankerl_dfd)UINT8_MAX
uint64_t const max = ((((int64_t)1) << 47) - 1)

Typedef Documentation

◆ dc_ankerl_dfd

typedef uint8_t dc_ankerl_dfd

Definition at line 23 of file utils.h.

Function Documentation

◆ dc_ankerl_buckets_capacity()

size_t dc_ankerl_buckets_capacity ( size_t for_items)
static

Definition at line 10 of file utils.h.

10 {
11 if (for_items < dc_ankerl_initial_items) {
13 }
14 return dc_math_next_power_of_2(for_items);
15}
static const size_t dc_ankerl_initial_items
Definition utils.h:8
static DC_INLINE DC_CONST size_t dc_math_next_power_of_2(size_t x)
Definition math.h:48

◆ dc_ankerl_dfd_decrement_for_backshift()

dc_ankerl_dfd dc_ankerl_dfd_decrement_for_backshift ( dc_ankerl_dfd dfd)
static

Definition at line 31 of file utils.h.

31 {
33 if (dfd == dc_ankerl_dfd_max) {
34 return dc_ankerl_dfd_max;
35 }
36 return (dc_ankerl_dfd)(dfd - 1U);
37}
uint8_t dc_ankerl_dfd
Definition utils.h:23
static const dc_ankerl_dfd dc_ankerl_dfd_none
Definition utils.h:24
static const dc_ankerl_dfd dc_ankerl_dfd_max
Definition utils.h:25
#define DC_ASSERT(expr,...)
Definition panic.h:36

◆ dc_ankerl_dfd_increment()

dc_ankerl_dfd dc_ankerl_dfd_increment ( dc_ankerl_dfd dfd)
static

Definition at line 27 of file utils.h.

27 {
28 return (dfd == dc_ankerl_dfd_max) ? dc_ankerl_dfd_max : (dc_ankerl_dfd)(dfd + 1U);
29}

◆ dc_ankerl_dfd_new()

dc_ankerl_dfd dc_ankerl_dfd_new ( uint8_t distance)
static

Definition at line 39 of file utils.h.

39{ return (dc_ankerl_dfd)(distance + 1U); }

◆ dc_ankerl_fingerprint_from_hash()

uint8_t dc_ankerl_fingerprint_from_hash ( size_t hash)
static

Definition at line 17 of file utils.h.

17 {
18 uint8_t fp = (uint8_t)(hash >> (sizeof(size_t) * 8U - 8U));
19 return (fp == 0) ? 1U : fp;
20}

◆ dc_ankerl_mdata_present()

bool dc_ankerl_mdata_present ( dc_ankerl_mdata const * bucket)
static

Definition at line 46 of file utils.h.

46 {
47 return bucket->dfd != dc_ankerl_dfd_none;
48}

◆ DC_STATIC_ASSERT() [1/2]

DC_STATIC_ASSERT ( sizeof(dc_ankerl_index_large) = =6)

◆ DC_STATIC_ASSERT() [2/2]

DC_STATIC_ASSERT ( sizeof(dc_ankerl_index_small) = =2)

◆ get() [1/2]

size_t get ( dc_ankerl_index_large const * index)
static

Definition at line 59 of file utils.h.

59 {
60 return (size_t)index->dense_index_lo + ((size_t)index->dense_index_hi << 32);
61}

◆ get() [2/2]

size_t get ( dc_ankerl_index_small const * index)
static

Definition at line 79 of file utils.h.

79 {
80 return (size_t)index->dense_index;
81}

◆ new()

dc_ankerl_index_small new ( size_t to)
static

Definition at line 63 of file utils.h.

63 {
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,
68 };
69}

Variable Documentation

◆ dc_ankerl_dfd_max

const dc_ankerl_dfd dc_ankerl_dfd_max = (dc_ankerl_dfd)UINT8_MAX
static

Definition at line 25 of file utils.h.

◆ dc_ankerl_dfd_none

const dc_ankerl_dfd dc_ankerl_dfd_none = 0
static

Definition at line 24 of file utils.h.

◆ dc_ankerl_initial_items

const size_t dc_ankerl_initial_items = 256
static

Definition at line 8 of file utils.h.

◆ max

uint64_t const max = ((((int64_t)1) << 47) - 1)

Definition at line 55 of file utils.h.