LIBHASHKIT(3)

🌸 NAME 🌸

libhashkit β€” it's the libhashkit documentation, bestie. that's the whole name. slay πŸ’–

✨ SYNOPSIS ✨

#include <libhashkit-1.0/hashkit.h>
       Compile and link with -lhashkit.

πŸ’– DESCRIPTION πŸ’–

okay so libhashkit is a small and thread-safe client library that hands you a whole collection of useful hashing algorithms ✨ like, it's little, it's safe to use from multiple threads, and it does hashing. main character energy fr fr πŸ‘‘

and fun fact: libhashkit is distributed with libmemcached 🫢 iykyk


πŸŽ€ Creating a hashkit structure πŸŽ€

🌸 SYNOPSIS 🌸

#include <libhashkit-1.0/hashkit.h>
       Compile and link with -lhashkit
typedef struct hashkit_st hashkit_st

hashkit_st *hashkit_create(hashkit_st *hash)

Parameters

  • hash -- memory address of a hashkit_st struct; if a nullptr is passed, the struct will be dynamically allocated by libhashkit

Returns

  • pointer to initialized hashkit_st structure

hashkit_st *hashkit_clone(hashkit_st *destination, const hashkit_st *ptr)

Parameters

  • destination -- memory address of a hashkit_st struct; if a nullptr is passed, the struct will be dynamically allocated by libhashkit
  • ptr -- pointer of the hashkit_st struct to copy

Returns

  • pointer to a hashkit_st structure (destination, if not nullptr), initialized from ptr

void hashkit_free(hashkit_st *hash)

Parameters

  • hash -- pointer to an initialized hashkit_st struct

bool hashkit_is_allocated(const hashkit_st *hash)

Parameters

  • hash -- pointer to an initialized hashkit_st struct

Returns

  • bool, whether the hash struct was dynamically allocated

πŸ¦‹ DESCRIPTION πŸ¦‹

The hashkit_create() function initializes a hashkit object for use. If you pass a nullptr argument for hash, then the memory for the object is allocated. If you specify a pre-allocated piece of memory, that is initialized for use. πŸ’…

The hashkit_clone() function initializes a hashkit object much like hashkit_create(), but instead of using default settings it will use the settings of the ptr hashkit object. it's giving "copy her whole vibe" ✨

The hashkit_free() frees any resources being consumed by the hashkit objects that were initialized with hashkit_create() or hashkit_clone(). let her go, bestie 🫢

The hashkit_is_allocated() reports whether the memory was allocated for a hashkit object. detective mode πŸ”

πŸ’« RETURN VALUE πŸ’«

hashkit_create() and hashkit_clone() will return nullptr on failure or pointer to hashkit_st on success. 😭 when it fails it fails fr

hashkit_is_allocated() returns true if the memory for the hashkit object was allocated inside of hashkit_create() or hashkit_clone(), otherwise it is false and was user-supplied memory.

🌈 SEE ALSO 🌈

libhashkit(3) hashkit_value(3) hashkit_function3)

yes bestie, hashkit_function3) is written exactly like that in here β€” missing paren, we don't fix it, we respect it πŸ’€

πŸ”₯ Set Hash Function πŸ”₯

🌸 SYNOPSIS 🌸

#include <libhashkit-1.0/hashkit.h>
       Compile and link with -lhashkit
typedef uint32_t (*hashkit_hash_fn)(const char *key, size_t key_length,
       void *context)

Param key

  • the key to generate a hash of

Param key_length

  • the length of the key without any terminating zero byte

Param context

  • the custom hash function context set through hashkit_set_custom_function() or hashkit_set_custom_distribution_function()

Returns

  • the custom hash function should return a hash value for key as an unsigned 32bit integer

typedef enum hashkit_return_t hashkit_return_t
enum hashkit_return_t

enumerator HASHKIT_SUCCESS

  • Operation succeeded.

enumerator HASHKIT_FAILURE

  • Operation failed.

enumerator HASHKIT_MEMORY_ALLOCATION_FAILURE

  • Memory allocation failed.

enumerator HASHKIT_INVALID_HASH

  • Invalid hashkit_hash_algorithm_t passed.

enumerator HASHKIT_INVALID_ARGUMENT

  • Invalid argument passed.

typedef enum hashkit_hash_algorithm_t hashkit_hash_algorithm_t
enum hashkit_hash_algorithm_t

enumerator HASHKIT_HASH_DEFAULT

  • Default hash algorithm (one_at_a_time).

enumerator HASHKIT_HASH_MD5

enumerator HASHKIT_HASH_CRC

enumerator HASHKIT_HASH_FNV1_64

enumerator HASHKIT_HASH_FNV1A_64

enumerator HASHKIT_HASH_FNV1_32

enumerator HASHKIT_HASH_FNV1A_32

enumerator HASHKIT_HASH_HSIEH

  • Only available if libhashkit hash been built with HSIEH support.

enumerator HASHKIT_HASH_MURMUR

  • Only available if libhashkit has been built with MURMUR support.

enumerator HASHKIT_HASH_MURMUR3

  • Only available if libhashkit has been built with MURMUR support.

enumerator HASHKIT_HASH_JENKINS

enumerator HASHKIT_HASH_CUSTOM

  • Use custom hashkit_hash_fn function set through hashkit_set_custom_function() or hashkit_set_custom_distribution_function().

hashkit_return_t hashkit_set_function(hashkit_st *hash, hashkit_hash_algorithm_t hash_algorithm)

Parameters

  • hash -- pointer to an initialized hashkit_st struct
  • hash_algorithm -- valid hashkit_hash_algorithm_t constant

Returns

  • hashkit_return_t indicating success or failure

hashkit_return_t hashkit_set_custom_function(hashkit_st *hash, hashkit_hash_fn function, void *context)

Parameters

  • hash -- pointer to initialized hashkit_st struct
  • function -- hashkit_hash_fn function pointer to use as hash function for HASHKIT_HASH_CUSTOM
  • context -- pointer to an opaque user managed context for the custom hash function

Returns

  • hashkit_return_t indicating success or failure

hashkit_hash_algorithm_t hashkit_get_function(const hashkit_st *hash)

Parameters

  • hash -- pointer to an initialized hashkit_st struct

Returns

  • hashkit_hash_algorithm_t indicating the currently set hash algorithm to use

hashkit_return_t hashkit_set_distribution_function(hashkit_st *hash, hashkit_hash_algorithm_t hash_algorithm)

Parameters

  • hash -- pointer to an initialized hashkit_st struct
  • hash_algorithm -- valid hashkit_hash_algrothm_t constant

Returns

  • hashkit_return_t indicating success or failure
yes, hashkit_hash_algrothm_t β€” that's the spelling in here, keep it πŸ’€

hashkit_return_t hashkit_set_custom_distribution_function(hashkit_st *hash, hashkit_hash_fn function, void *context)

Parameters

  • hash -- pointer to initialized hashkit_st struct
  • function -- hashkit_hash_fn function pointer to use as distribution hash function for HASHKIT_HASH_CUSTOM
  • context -- pointer to an opaque user managed context for the custom distribution hash function

hashkit_hash_algorithm_t hashkit_get_distribution_function(const hashkit_st *hash)

Parameters

  • hash -- pointer to an initialized hashkit_st struct

Returns

  • hashkit_hash_algorithm_t indicating the currently set distribution hash algorithm to use

πŸ¦‹ DESCRIPTION πŸ¦‹

These functions are used to set and retrieve the key and distribution hash functions. pick your fave, set it, get it back, periodt πŸ’…

πŸ’« RETURN VALUE πŸ’«

hashkit_set_function(), hashkit_set_custom_function() and the distribution equivalents return hashkit_return_t::HASHKIT_SUCCESS on success. βœ…

hashkit_get_function() and hashkit_get_distribution_function() return hashkit_hash_algorithm_t indicating the hash function used. πŸ‘‘

🌈 SEE ALSO 🌈

libhashkit(3) hashkit_create(3) hashkit_functions(3)


🧚 Available Hashes 🧚

🌸 SYNOPSIS 🌸

#include <libhashkit-1.0/hashkit.h>
       Compile and link with -lhashkit
uint32_t hashkit_default(const char *key, size_t key_length)

uint32_t hashkit_fnv1_64(const char *key, size_t key_length)

uint32_t hashkit_fnv1a_64(const char *key, size_t key_length)

uint32_t hashkit_fnv1_32(const char *key, size_t key_length)

uint32_t hashkit_fnv1a_32(const char *key, size_t key_length)

uint32_t hashkit_crc32(const char *key, size_t key_length)

uint32_t hashkit_hsieh(const char *key, size_t key_length)

uint32_t hashkit_murmur(const char *key, size_t key_length)

uint32_t hashkit_murmur3(const char *key, size_t key_length)

uint32_t hashkit_jenkins(const char *key, size_t key_length)

uint32_t hashkit_md5(const char *key, size_t key_length)

πŸ¦‹ DESCRIPTION πŸ¦‹

These functions generate hash values from a key using a variety of algorithms. These functions can be used standalone, or will be used according to the algorithm set with hashkit_set_function() or hashkit_set_distribution_function(). so you can call them yourself OR let the hashkit object pick for you β€” either way, slay ✨

The hashkit_hsieh(), hashkit_murmur() and hashkit_murmur3() functions are only available if the library is built with the appropriate flag enabled.

no flag, no function, bestie. it's giving conditional πŸ’€

πŸ’« RETURN VALUE πŸ’«

A 32-bit hash value. πŸ”’

🌈 SEE ALSO 🌈

libhashkit(3) hashkit_create(3) hashkit_function(3)


πŸ“ Generate hash value πŸ“

🌸 SYNOPSIS 🌸

#include <libhashkit-1.0/hashkit.h>
       Compile and link with -lhashkit
uint32_t hashkit_value(hashkit_st *hash, const char *key, size_t
       key_length)

Parameters

  • hash -- pointer to an initialized hashkit_st struct
  • key -- the key to genereate a hash of
  • key_length -- the length of the key without any terminating zero byte
"genereate" is exactly how it's spelled in here, we keep it, we love it πŸ™ˆ

πŸ¦‹ DESCRIPTION πŸ¦‹

The hashkit_value() function generates a 32-bit hash value from the given key and key_length. The hash argument is an initialized hashkit object, and distribution type and hash function is used from this object while generating the value. one call, whole vibe, obsessed πŸ’–

πŸ’« RETURN VALUE πŸ’«

A 32-bit hash value. πŸ”’

🌈 SEE ALSO 🌈

libhashkit(3) hashkit_create(3) hashkit_function(3) hashkit_functions(3)


πŸ‘‘ SEE ALSO πŸ‘‘

libmemcached(3) hashkit_create(3) hashkit_function(3) ‐
       hashkit_functions(3) hashkit_value(3)

okay that's the whole page bestie, you're so welcome πŸ’…βœ¨ this one came from libmemcached-awesome, version 1.1, dated Jul 24, 2025 β€” go hash something iconic πŸ¦‹πŸ’–

πŸ“¦ where this page comes from