| # 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 |