Line data Source code
1 1 : /*
2 : * Copyright (c) 2022 Meta
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : /**
8 : * @file
9 : * @ingroup hashmap_implementations
10 : * @brief Open-Addressing / Linear Probe Hashmap Implementation
11 : *
12 : * @note Enable with @kconfig{CONFIG_SYS_HASH_MAP_OA_LP}
13 : */
14 :
15 : #ifndef ZEPHYR_INCLUDE_SYS_HASH_MAP_OA_LP_H_
16 : #define ZEPHYR_INCLUDE_SYS_HASH_MAP_OA_LP_H_
17 :
18 : #include <stddef.h>
19 :
20 : #include <zephyr/sys/hash_function.h>
21 : #include <zephyr/sys/hash_map_api.h>
22 :
23 : #ifdef __cplusplus
24 : extern "C" {
25 : #endif
26 :
27 0 : struct sys_hashmap_oa_lp_data {
28 0 : void *buckets;
29 0 : size_t n_buckets;
30 0 : size_t size;
31 0 : size_t n_tombstones;
32 : };
33 :
34 : /**
35 : * @brief Declare a Open Addressing Linear Probe Hashmap (advanced)
36 : *
37 : * Declare a Open Addressing Linear Probe Hashmap with control over advanced parameters.
38 : *
39 : * @note The allocator @p _alloc is used for allocating internal Hashmap
40 : * entries and does not interact with any user-provided keys or values.
41 : *
42 : * @param _name Name of the Hashmap.
43 : * @param _hash_func Hash function pointer of type @ref sys_hash_func32_t.
44 : * @param _alloc_func Allocator function pointer of type @ref sys_hashmap_allocator_t.
45 : * @param ... Variant-specific details for @ref sys_hashmap_config.
46 : */
47 1 : #define SYS_HASHMAP_OA_LP_DEFINE_ADVANCED(_name, _hash_func, _alloc_func, ...) \
48 : SYS_HASHMAP_DEFINE_ADVANCED(_name, &sys_hashmap_oa_lp_api, sys_hashmap_config, \
49 : sys_hashmap_oa_lp_data, _hash_func, _alloc_func, __VA_ARGS__)
50 :
51 : /**
52 : * @brief Declare a Open Addressing Linear Probe Hashmap (advanced)
53 : *
54 : * Declare a Open Addressing Linear Probe Hashmap with control over advanced parameters.
55 : *
56 : * @note The allocator @p _alloc is used for allocating internal Hashmap
57 : * entries and does not interact with any user-provided keys or values.
58 : *
59 : * @param _name Name of the Hashmap.
60 : * @param _hash_func Hash function pointer of type @ref sys_hash_func32_t.
61 : * @param _alloc_func Allocator function pointer of type @ref sys_hashmap_allocator_t.
62 : * @param ... Details for @ref sys_hashmap_config.
63 : */
64 1 : #define SYS_HASHMAP_OA_LP_DEFINE_STATIC_ADVANCED(_name, _hash_func, _alloc_func, ...) \
65 : SYS_HASHMAP_DEFINE_STATIC_ADVANCED(_name, &sys_hashmap_oa_lp_api, sys_hashmap_config, \
66 : sys_hashmap_oa_lp_data, _hash_func, _alloc_func, \
67 : __VA_ARGS__)
68 :
69 : /**
70 : * @brief Declare a Open Addressing Linear Probe Hashmap statically
71 : *
72 : * Declare a Open Addressing Linear Probe Hashmap statically with default parameters.
73 : *
74 : * @param _name Name of the Hashmap.
75 : */
76 1 : #define SYS_HASHMAP_OA_LP_DEFINE_STATIC(_name) \
77 : SYS_HASHMAP_OA_LP_DEFINE_STATIC_ADVANCED( \
78 : _name, sys_hash32, SYS_HASHMAP_DEFAULT_ALLOCATOR, \
79 : SYS_HASHMAP_CONFIG(SIZE_MAX, SYS_HASHMAP_DEFAULT_LOAD_FACTOR))
80 :
81 : /**
82 : * @brief Declare a Open Addressing Linear Probe Hashmap
83 : *
84 : * Declare a Open Addressing Linear Probe Hashmap with default parameters.
85 : *
86 : * @param _name Name of the Hashmap.
87 : */
88 1 : #define SYS_HASHMAP_OA_LP_DEFINE(_name) \
89 : SYS_HASHMAP_OA_LP_DEFINE_ADVANCED( \
90 : _name, sys_hash32, SYS_HASHMAP_DEFAULT_ALLOCATOR, \
91 : SYS_HASHMAP_CONFIG(SIZE_MAX, SYS_HASHMAP_DEFAULT_LOAD_FACTOR))
92 :
93 : #ifdef CONFIG_SYS_HASH_MAP_CHOICE_OA_LP
94 : #define SYS_HASHMAP_DEFAULT_DEFINE(_name) SYS_HASHMAP_OA_LP_DEFINE(_name)
95 : #define SYS_HASHMAP_DEFAULT_DEFINE_STATIC(_name) SYS_HASHMAP_OA_LP_DEFINE_STATIC(_name)
96 : #define SYS_HASHMAP_DEFAULT_DEFINE_ADVANCED(_name, _hash_func, _alloc_func, ...) \
97 : SYS_HASHMAP_OA_LP_DEFINE_ADVANCED(_name, _hash_func, _alloc_func, __VA_ARGS__)
98 : #define SYS_HASHMAP_DEFAULT_DEFINE_STATIC_ADVANCED(_name, _hash_func, _alloc_func, ...) \
99 : SYS_HASHMAP_OA_LP_DEFINE_STATIC_ADVANCED(_name, _hash_func, _alloc_func, __VA_ARGS__)
100 : #endif
101 :
102 0 : extern const struct sys_hashmap_api sys_hashmap_oa_lp_api;
103 :
104 : #ifdef __cplusplus
105 : }
106 : #endif
107 :
108 : #endif /* ZEPHYR_INCLUDE_SYS_HASH_MAP_OA_LP_H_ */
|