# Copyright (c) 2022 Meta
#
# SPDX-License-Identifier: Apache-2.0

menu "Hash Function Support"

config SYS_HASH_FUNC32
	bool "Hash function support"
	help
	  Enable this option to support hash functions.

if SYS_HASH_FUNC32

config SYS_HASH_FUNC32_DJB2
	bool "Daniel J. Bernstein's hash function (djb2)"

config SYS_HASH_FUNC32_MURMUR3
	bool "Murmur3 hash function"

choice SYS_HASH_FUNC32_CHOICE
	prompt "Default system-wide 32-bit hash function"
	default SYS_HASH_FUNC32_CHOICE_MURMUR3
	help
	  The default system-wide 32-bit hash function is sys_hash32().

config SYS_HASH_FUNC32_CHOICE_DJB2
	bool "Default 32-bit hash is djb2"
	select SYS_HASH_FUNC32_DJB2

config SYS_HASH_FUNC32_CHOICE_MURMUR3
	bool "Default 32-bit hash is Murmur3"
	select SYS_HASH_FUNC32_MURMUR3

config SYS_HASH_FUNC32_CHOICE_IDENTITY
	bool "Default 32-bit hash is the identity"
	help
	  This is the naive identity hash function. It only works for strings
	  either 1, 2, 4, or 8 bytes in length and so is suitable for scalar
	  values such as keys in a Hashmap. It is implemented as a static
	  inline function.

endchoice # SYS_HASH_FUNC_CHOICE

endif # SYS_HASH_FUNC

endmenu
