Zephyr Project API  3.4.0
A Scalable Open Source RTOS
hash_map_api.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022 Meta
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
15#ifndef ZEPHYR_INCLUDE_SYS_HASHMAP_API_H_
16#define ZEPHYR_INCLUDE_SYS_HASHMAP_API_H_
17
18#include <stdbool.h>
19#include <stddef.h>
20#include <stdint.h>
21
23#include <zephyr/sys/util.h>
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
50 const struct sys_hashmap *map;
51 void (*next)(struct sys_hashmap_iterator *it);
52 void *state;
55 const size_t size;
56 size_t pos;
57};
58
66static inline bool sys_hashmap_iterator_has_next(const struct sys_hashmap_iterator *it)
67{
68 return it->pos < it->size;
69}
70
82typedef void *(*sys_hashmap_allocator_t)(void *ptr, size_t new_size);
83
92typedef void (*sys_hashmap_iterator_t)(const struct sys_hashmap *map,
93 struct sys_hashmap_iterator *it);
94
104typedef void (*sys_hashmap_callback_t)(uint64_t key, uint64_t value, void *cookie);
105
116 void *cookie);
117
133 uint64_t *old_value);
134
148
161typedef bool (*sys_hashmap_get_t)(const struct sys_hashmap *map, uint64_t key, uint64_t *value);
162
179};
180
202 size_t max_size;
205};
206
215#define SYS_HASHMAP_CONFIG(_max_size, _load_factor) \
216 { \
217 .max_size = (size_t)_max_size, .load_factor = (uint8_t)_load_factor, \
218 .initial_n_buckets = NHPOT(DIV_ROUND_UP(100, _load_factor)), \
219 }
220
231 void *buckets;
232 size_t n_buckets;
233 size_t size;
234};
235
238#ifdef __cplusplus
239}
240#endif
241
242#endif /* ZEPHYR_INCLUDE_SYS_HASHMAP_API_H_ */
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
void(* sys_hashmap_callback_t)(uint64_t key, uint64_t value, void *cookie)
Callback interface for sys_hashmap.
Definition: hash_map_api.h:104
bool(* sys_hashmap_remove_t)(struct sys_hashmap *map, uint64_t key, uint64_t *value)
Remove an entry from a sys_hashmap.
Definition: hash_map_api.h:147
bool(* sys_hashmap_get_t)(const struct sys_hashmap *map, uint64_t key, uint64_t *value)
Get a value from a sys_hashmap.
Definition: hash_map_api.h:161
void(* sys_hashmap_clear_t)(struct sys_hashmap *map, sys_hashmap_callback_t cb, void *cookie)
Clear all entries contained in a sys_hashmap.
Definition: hash_map_api.h:115
int(* sys_hashmap_insert_t)(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_api.h:132
void(* sys_hashmap_iterator_t)(const struct sys_hashmap *map, struct sys_hashmap_iterator *it)
In-place iterator constructor for sys_hashmap.
Definition: hash_map_api.h:92
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
#define bool
Definition: stdbool.h:13
__UINT64_TYPE__ uint64_t
Definition: stdint.h:91
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
Generic Hashmap API.
Definition: hash_map_api.h:173
sys_hashmap_iterator_t iter
Definition: hash_map_api.h:174
sys_hashmap_remove_t remove
Definition: hash_map_api.h:177
sys_hashmap_clear_t clear
Definition: hash_map_api.h:175
sys_hashmap_insert_t insert
Definition: hash_map_api.h:176
sys_hashmap_get_t get
Definition: hash_map_api.h:178
Generic Hashmap configuration.
Definition: hash_map_api.h:201
uint8_t initial_n_buckets
Definition: hash_map_api.h:204
uint8_t load_factor
Definition: hash_map_api.h:203
size_t max_size
Definition: hash_map_api.h:202
Generic Hashmap data.
Definition: hash_map_api.h:230
size_t n_buckets
Definition: hash_map_api.h:232
size_t size
Definition: hash_map_api.h:233
void * buckets
Definition: hash_map_api.h:231
Generic Hashmap iterator interface.
Definition: hash_map_api.h:49
size_t pos
Definition: hash_map_api.h:56
const struct sys_hashmap * map
Definition: hash_map_api.h:50
void * state
Definition: hash_map_api.h:52
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
Generic Hashmap.
Definition: hash_map.h:130
Misc utilities.