15#ifndef ZEPHYR_INCLUDE_SYS_HASH_MAP_H_
16#define ZEPHYR_INCLUDE_SYS_HASH_MAP_H_
53#define SYS_HASHMAP_DEFINE_ADVANCED(_name, _api, _config_type, _data_type, _hash_func, \
55 const struct _config_type _name##_config = __VA_ARGS__; \
56 struct _data_type _name##_data; \
57 struct sys_hashmap _name = { \
58 .api = (const struct sys_hashmap_api *)(_api), \
59 .config = (const struct sys_hashmap_config *)&_name##_config, \
60 .data = (struct sys_hashmap_data *)&_name##_data, \
61 .hash_func = (_hash_func), \
62 .alloc_func = (_alloc_func), \
81#define SYS_HASHMAP_DEFINE_STATIC_ADVANCED(_name, _api, _config_type, _data_type, _hash_func, \
83 static const struct _config_type _name##_config = __VA_ARGS__; \
84 static struct _data_type _name##_data; \
85 static struct sys_hashmap _name = { \
86 .api = (const struct sys_hashmap_api *)(_api), \
87 .config = (const struct sys_hashmap_config *)&_name##_config, \
88 .data = (struct sys_hashmap_data *)&_name##_data, \
89 .hash_func = (_hash_func), \
90 .alloc_func = (_alloc_func), \
100#define SYS_HASHMAP_DEFINE(_name) SYS_HASHMAP_DEFAULT_DEFINE(_name)
109#define SYS_HASHMAP_DEFINE_STATIC(_name) SYS_HASHMAP_DEFAULT_DEFINE_STATIC(_name)
124#define SYS_HASHMAP_DEFAULT_ALLOCATOR sys_hashmap_default_allocator
127#define SYS_HASHMAP_DEFAULT_LOAD_FACTOR 75
168 map->api->clear(
map, cb, cookie);
249 return map->data->size;
262 return map->data->size == 0;
277 if (
map->data->n_buckets == 0) {
281 return (
map->data->size * 100) /
map->data->n_buckets;
292 return map->data->n_buckets;
317 size_t num_reserved,
size_t *new_num_buckets)
323 const bool shrink = !grow;
347 __ASSERT_NO_MSG(new_num_buckets != NULL);
348 __ASSERT_NO_MSG(new_num_buckets != &
data->n_buckets);
352 grow && (
data->n_buckets == 0 ||
353 (
size + num_reserved) * 100 /
data->n_buckets >
map->config->load_factor);
355 shrink && (
n_buckets == 0 || (
size * 100) / n_buckets <= map->config->load_factor);
357 return should_grow || should_shrink;
static bool sys_hashmap_iterator_has_next(const struct sys_hashmap_iterator *it)
Check if a Hashmap iterator has a next entry.
Definition: hash_map_api.h:66
static bool sys_hashmap_remove(struct sys_hashmap *map, uint64_t key, uint64_t *value)
Remove an entry from a sys_hashmap.
Definition: hash_map.h:204
static int sys_hashmap_insert(struct sys_hashmap *map, uint64_t key, uint64_t value, uint64_t *old_value)
Insert a new entry into a sys_hashmap.
Definition: hash_map.h:186
static uint8_t sys_hashmap_load_factor(const struct sys_hashmap *map)
Query the load factor of map.
Definition: hash_map.h:275
static size_t sys_hashmap_size(const struct sys_hashmap *map)
Query the number of entries contained within map.
Definition: hash_map.h:247
static bool sys_hashmap_get(const struct sys_hashmap *map, uint64_t key, uint64_t *value)
Get a value from a sys_hashmap.
Definition: hash_map.h:221
static bool sys_hashmap_is_empty(const struct sys_hashmap *map)
Check if map is empty.
Definition: hash_map.h:260
void(* sys_hashmap_callback_t)(uint64_t key, uint64_t value, void *cookie)
Callback interface for sys_hashmap.
Definition: hash_map_api.h:104
static size_t sys_hashmap_num_buckets(const struct sys_hashmap *map)
Query the number of buckets used in map.
Definition: hash_map.h:290
void *(* sys_hashmap_allocator_t)(void *ptr, size_t new_size)
Allocator interface for sys_hashmap.
Definition: hash_map_api.h:82
static bool sys_hashmap_contains_key(const struct sys_hashmap *map, uint64_t key)
Check if map contains a value associated with key.
Definition: hash_map.h:235
static void * sys_hashmap_default_allocator(void *ptr, size_t size)
Definition: hash_map.h:114
static void sys_hashmap_clear(struct sys_hashmap *map, sys_hashmap_callback_t cb, void *cookie)
Clear all entries contained in a sys_hashmap.
Definition: hash_map.h:165
static void sys_hashmap_foreach(const struct sys_hashmap *map, sys_hashmap_callback_t cb, void *cookie)
Iterate over all values contained in a sys_hashmap.
Definition: hash_map.h:145
static bool sys_hashmap_should_rehash(const struct sys_hashmap *map, bool grow, size_t num_reserved, size_t *new_num_buckets)
Decide whether the Hashmap should be resized.
Definition: hash_map.h:316
uint32_t(* sys_hash_func32_t)(const void *str, size_t n)
32-bit Hash function interface
Definition: hash_function.h:35
Hashmap (Hash Table) API.
Open-Addressing / Linear Probe Hashmap Implementation.
Separate Chaining Hashmap Implementation.
struct region_map map[]
Definition: main.c:35
void * ptr
Definition: printk.c:120
static k_spinlock_key_t key
Definition: spinlock_error_case.c:15
__UINT64_TYPE__ uint64_t
Definition: stdint.h:91
#define SIZE_MAX
Definition: stdint.h:70
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
void * realloc(void *ptr, size_t size)
Generic Hashmap API.
Definition: hash_map_api.h:173
Generic Hashmap configuration.
Definition: hash_map_api.h:201
Generic Hashmap data.
Definition: hash_map_api.h:230
Generic Hashmap iterator interface.
Definition: hash_map_api.h:49
const size_t size
Definition: hash_map_api.h:55
uint64_t key
Definition: hash_map_api.h:53
void(* next)(struct sys_hashmap_iterator *it)
Definition: hash_map_api.h:51
uint64_t value
Definition: hash_map_api.h:54
Definition: hash_map_oa_lp.h:26
size_t size
Definition: hash_map_oa_lp.h:29
size_t n_buckets
Definition: hash_map_oa_lp.h:28
Generic Hashmap.
Definition: hash_map.h:130
struct sys_hashmap_data * data
Definition: hash_map.h:133
sys_hash_func32_t hash_func
Definition: hash_map.h:134
const struct sys_hashmap_api * api
Definition: hash_map.h:131
sys_hashmap_allocator_t alloc_func
Definition: hash_map.h:135
const struct sys_hashmap_config * config
Definition: hash_map.h:132
static fdata_t data[2]
Definition: test_fifo_contexts.c:15