LCOV - code coverage report
Current view: top level - zephyr/sys - hash_map_sc.h Coverage Total Hit
Test: new.info Lines: 83.3 % 6 5
Test Date: 2025-09-05 16:43:28

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

Generated by: LCOV version 2.0-1