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 C++ Hashmap 11 : * 12 : * This is a C wrapper around `std::unordered_map`. It is mainly used for 13 : * benchmarking purposes. 14 : * 15 : * @note Enable with @kconfig{CONFIG_SYS_HASH_MAP_CXX} 16 : */ 17 : 18 : #ifndef ZEPHYR_INCLUDE_SYS_HASH_MAP_CXX_H_ 19 : #define ZEPHYR_INCLUDE_SYS_HASH_MAP_CXX_H_ 20 : 21 : #include <stddef.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 C++ Hashmap (advanced) 32 : * 33 : * Declare a C++ Hashmap with control over advanced parameters. 34 : * 35 : * @note The allocator @p _alloc 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 ... Variant-specific details for @ref sys_hashmap_config. 42 : */ 43 1 : #define SYS_HASHMAP_CXX_DEFINE_ADVANCED(_name, _hash_func, _alloc_func, ...) \ 44 : SYS_HASHMAP_DEFINE_ADVANCED(_name, &sys_hashmap_cxx_api, sys_hashmap_config, \ 45 : sys_hashmap_data, _hash_func, _alloc_func, __VA_ARGS__) 46 : 47 : /** 48 : * @brief Declare a C++ Hashmap (advanced) 49 : * 50 : * Declare a C++ 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_CXX_DEFINE_STATIC_ADVANCED(_name, _hash_func, _alloc_func, ...) \ 61 : SYS_HASHMAP_DEFINE_STATIC_ADVANCED(_name, &sys_hashmap_cxx_api, sys_hashmap_config, \ 62 : sys_hashmap_data, _hash_func, _alloc_func, __VA_ARGS__) 63 : 64 : /** 65 : * @brief Declare a C++ Hashmap statically 66 : * 67 : * Declare a C++ Hashmap statically with default parameters. 68 : * 69 : * @param _name Name of the Hashmap. 70 : */ 71 1 : #define SYS_HASHMAP_CXX_DEFINE_STATIC(_name) \ 72 : SYS_HASHMAP_CXX_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 C++ Hashmap 78 : * 79 : * Declare a C++ Hashmap with default parameters. 80 : * 81 : * @param _name Name of the Hashmap. 82 : */ 83 1 : #define SYS_HASHMAP_CXX_DEFINE(_name) \ 84 : SYS_HASHMAP_CXX_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_CXX 89 : #define SYS_HASHMAP_DEFAULT_DEFINE(_name) SYS_HASHMAP_CXX_DEFINE(_name) 90 : #define SYS_HASHMAP_DEFAULT_DEFINE_STATIC(_name) SYS_HASHMAP_CXX_DEFINE_STATIC(_name) 91 : #define SYS_HASHMAP_DEFAULT_DEFINE_ADVANCED(_name, _hash_func, _alloc_func, ...) \ 92 : SYS_HASHMAP_CXX_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_CXX_DEFINE_STATIC_ADVANCED(_name, _hash_func, _alloc_func, __VA_ARGS__) 95 : #endif 96 : 97 0 : extern const struct sys_hashmap_api sys_hashmap_cxx_api; 98 : 99 : #ifdef __cplusplus 100 : } 101 : #endif 102 : 103 : #endif /* ZEPHYR_INCLUDE_SYS_HASH_MAP_CXX_H_ */