blob: d36a4e124535525e798e66c3585f2eced0c3f168 [file] [log] [blame]
# Copyright (c) 2022 Meta
#
# SPDX-License-Identifier: Apache-2.0
menu "Hashmap (Hash Table) Support"
config SYS_HASH_MAP
bool "Hashmap support"
help
Support for Hashmaps (a.k.a. Hash Tables).
Hashmaps are data structures that are used when insertion, removal, and
lookup of key-value pairs must be done in O(1) time (on average).
if SYS_HASH_MAP
config SYS_HASH_MAP_SC
bool "Separate-Chaining Hashmap"
help
Separate-Chaining Hashmaps implement each bucket as a linked-list.
They are perhaps more useful on resource-constrained systems where
large contiguous memory regions are scarce.
The main disadvantage of Separate-Chaining Hashmaps are that their
use tends to incur more cache-misses as nodes are spread throughout
the heap.
config SYS_HASH_MAP_OA_LP
bool "Open-Addressing / Linear Probe Hashmap"
help
Open-Addressing Hashmaps do not chain entries together but instead
store all entries in the table itself which is a contiguously allocated
memory region.
The main advantage of Open-Addressing Hashmaps are due to their
contiguous allocation which improves performance on systems with
memory caching.
config SYS_HASH_MAP_CXX
bool "C++ Hashmap"
select CPP
select REQUIRES_FULL_LIBCPP
select CPP_EXCEPTIONS
help
This enables a C wrapper around the C++ std::unordered_map.
It is mainly used for benchmarking purposes.
choice SYS_HASH_MAP_CHOICE
prompt "Default hashmap implementation"
default SYS_HASH_MAP_CHOICE_SC
config SYS_HASH_MAP_CHOICE_SC
bool "Default hash is Separate-Chaining"
select SYS_HASH_MAP_SC
config SYS_HASH_MAP_CHOICE_OA_LP
bool "Default hash is Open-Addressing / Linear Probe"
select SYS_HASH_MAP_OA_LP
config SYS_HASH_MAP_CHOICE_CXX
bool "Default hash is C++"
select SYS_HASH_MAP_CXX
endchoice # SYS_HASH_MAP_CHOICE
endif
endmenu