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