LCOV - code coverage report
Current view: top level - zephyr/sys - hash_map_cxx.h Coverage Total Hit
Test: new.info Lines: 83.3 % 6 5
Test Date: 2025-09-05 20:47:19

            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_ */
        

Generated by: LCOV version 2.0-1