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 Separate Chaining Hashmap Implementation 11 : * 12 : * @note Enable with @kconfig{CONFIG_SYS_HASH_MAP_SC} 13 : */ 14 : 15 : #ifndef ZEPHYR_INCLUDE_SYS_HASH_MAP_SC_H_ 16 : #define ZEPHYR_INCLUDE_SYS_HASH_MAP_SC_H_ 17 : 18 : #include <stdbool.h> 19 : #include <stddef.h> 20 : #include <stdint.h> 21 : #include <stdlib.h> 22 : 23 : #include <zephyr/sys/hash_function.h> 24 : #include <zephyr/sys/hash_map_api.h> 25 : 26 : #ifdef __cplusplus 27 : extern "C" { 28 : #endif 29 : 30 : /** 31 : * @brief Declare a Separate Chaining Hashmap (advanced) 32 : * 33 : * Declare a Separate Chaining Hashmap with control over advanced parameters. 34 : * 35 : * @note The allocator @p _alloc_func is used for allocating internal Hashmap 36 : * entries and does not interact with any user-provided keys or values. 37 : * 38 : * @param _name Name of the Hashmap. 39 : * @param _hash_func Hash function pointer of type @ref sys_hash_func32_t. 40 : * @param _alloc_func Allocator function pointer of type @ref sys_hashmap_allocator_t. 41 : * @param ... Details for @ref sys_hashmap_config. 42 : */ 43 1 : #define SYS_HASHMAP_SC_DEFINE_ADVANCED(_name, _hash_func, _alloc_func, ...) \ 44 : SYS_HASHMAP_DEFINE_ADVANCED(_name, &sys_hashmap_sc_api, sys_hashmap_config, \ 45 : sys_hashmap_data, _hash_func, _alloc_func, __VA_ARGS__) 46 : 47 : /** 48 : * @brief Declare a Separate Chaining Hashmap (advanced) 49 : * 50 : * Declare a Separate Chaining Hashmap with control over advanced parameters. 51 : * 52 : * @note The allocator @p _alloc is used for allocating internal Hashmap 53 : * entries and does not interact with any user-provided keys or values. 54 : * 55 : * @param _name Name of the Hashmap. 56 : * @param _hash_func Hash function pointer of type @ref sys_hash_func32_t. 57 : * @param _alloc_func Allocator function pointer of type @ref sys_hashmap_allocator_t. 58 : * @param ... Details for @ref sys_hashmap_config. 59 : */ 60 1 : #define SYS_HASHMAP_SC_DEFINE_STATIC_ADVANCED(_name, _hash_func, _alloc_func, ...) \ 61 : SYS_HASHMAP_DEFINE_STATIC_ADVANCED(_name, &sys_hashmap_sc_api, sys_hashmap_config, \ 62 : sys_hashmap_data, _hash_func, _alloc_func, __VA_ARGS__) 63 : 64 : /** 65 : * @brief Declare a Separate Chaining Hashmap statically 66 : * 67 : * Declare a Separate Chaining Hashmap statically with default parameters. 68 : * 69 : * @param _name Name of the Hashmap. 70 : */ 71 1 : #define SYS_HASHMAP_SC_DEFINE_STATIC(_name) \ 72 : SYS_HASHMAP_SC_DEFINE_STATIC_ADVANCED( \ 73 : _name, sys_hash32, SYS_HASHMAP_DEFAULT_ALLOCATOR, \ 74 : SYS_HASHMAP_CONFIG(SIZE_MAX, SYS_HASHMAP_DEFAULT_LOAD_FACTOR)) 75 : 76 : /** 77 : * @brief Declare a Separate Chaining Hashmap 78 : * 79 : * Declare a Separate Chaining Hashmap with default parameters. 80 : * 81 : * @param _name Name of the Hashmap. 82 : */ 83 1 : #define SYS_HASHMAP_SC_DEFINE(_name) \ 84 : SYS_HASHMAP_SC_DEFINE_ADVANCED( \ 85 : _name, sys_hash32, SYS_HASHMAP_DEFAULT_ALLOCATOR, \ 86 : SYS_HASHMAP_CONFIG(SIZE_MAX, SYS_HASHMAP_DEFAULT_LOAD_FACTOR)) 87 : 88 : #ifdef CONFIG_SYS_HASH_MAP_CHOICE_SC 89 : #define SYS_HASHMAP_DEFAULT_DEFINE(_name) SYS_HASHMAP_SC_DEFINE(_name) 90 : #define SYS_HASHMAP_DEFAULT_DEFINE_STATIC(_name) SYS_HASHMAP_SC_DEFINE_STATIC(_name) 91 : #define SYS_HASHMAP_DEFAULT_DEFINE_ADVANCED(_name, _hash_func, _alloc_func, ...) \ 92 : SYS_HASHMAP_SC_DEFINE_ADVANCED(_name, _hash_func, _alloc_func, __VA_ARGS__) 93 : #define SYS_HASHMAP_DEFAULT_DEFINE_STATIC_ADVANCED(_name, _hash_func, _alloc_func, ...) \ 94 : SYS_HASHMAP_SC_DEFINE_STATIC_ADVANCED(_name, _hash_func, _alloc_func, __VA_ARGS__) 95 : #endif 96 : 97 0 : extern const struct sys_hashmap_api sys_hashmap_sc_api; 98 : 99 : #ifdef __cplusplus 100 : } 101 : #endif 102 : 103 : #endif /* ZEPHYR_INCLUDE_SYS_HASH_MAP_SC_H_ */