2022-12-31 03:18:05 +08:00
|
|
|
# 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"
|
2023-07-26 19:16:31 +08:00
|
|
|
select CPP
|
|
|
|
select REQUIRES_FULL_LIBCPP
|
|
|
|
select CPP_EXCEPTIONS
|
2022-12-31 03:18:05 +08:00
|
|
|
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
|