Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
NAME
     ck_ht_init -- initialize a hash table

LIBRARY
     Concurrency Kit (libck, -lck)

SYNOPSIS
     #include <ck_ht.h>

     typedef void
     ck_ht_hash_cb_t(ck_ht_hash_t *h, const void *key, size_t key_length,
	 uint64_t seed);

     bool
     ck_ht_init(ck_ht_t *ht, enum ck_ht_mode mode,
	 ck_ht_hash_cb_t *hash_function, struct ck_malloc *allocator,
	 uint64_t capacity, uint64_t seed);

DESCRIPTION
     The  ck_ht_init()	function initializes the hash table pointed to by the ht
     pointer.

     The argument mode specifies the type of key-value pairs to be stored in the
     hash table. The value of mode may be one of:

     CK_HT_MODE_BYTESTRING
	     The hash table is meant to store key-value pointers where key is  a
	     region of memory that is up to 65536 bytes long.  This pointer will
	     be  dereferenced  during  hash table operations for key comparison.
	     Entries of this hash table are expected to be interacted with using
	     the     ck_ht_entry_empty(3),     ck_ht_entry_key(3),     ck_ht_en-
	     try_key_length(3),   ck_ht_entry_value(3),  and  ck_ht_entry_set(3)
	     functions. Attempting a hash table operation with a  key  of  value
	     NULL or (void *)UINTPTR_MAX will result in undefined behavior.

     CK_HT_MODE_DIRECT
	     The  hash	table is meant to store key-value pointers where the key
	     is of fixed width field compatible with the uintptr_t type. The key
	     will be directly compared with other keys for equality. Entries  of
	     this  hash  table	are  expected  to  be  interacted with using the
	     ck_ht_entry_empty(3),     ck_ht_entry_key_direct(3),      ck_ht_en-
	     try_value_direct(3)  and  ck_ht_entry_set_direct(3)  functions. At-
	     tempting a hash table operation  with  a  key  of	value  of  0  or
	     UINTPTR_MAX will result in undefined behavior.

     In addition to this, the user may bitwise OR the mode flag with CK_HT_WORK-
     LOAD_DELETE  to  indicate	that the hash table will have to handle a delete
     heavy workload, in which case stronger bounds on latency can be provided at
     the  cost	of  approximately  13%	higher	memory	usage.	  The	argument
     hash_function  is	a  pointer  to a user-specified hash function. It is op-
     tional, if NULL is specified, then the default hash function implementation
     will be used ( ck_ht_hash(3)). A user-specified hash  function  takes  four
     arguments.  The  h  argument  is a pointer to a hash value object. The hash
     function is expected to update the value object of type uint64_t  contained
     with-in  the  object  pointed  to by h.  The key argument is a pointer to a
     key, the key_length argument is the length of the key and the seed argument
     is the initial seed associated with the hash table.  This initial	seed  is
     specified by the user in ck_ht_init(3).

     The  allocator  argument  is a pointer to a structure containing malloc and
     free function pointers which respectively define the memory allocation  and
     destruction functions to be used by the hash table being initialized.

     The  argument capacity represents the initial number of key-value pairs the
     hash table is expected to contain. This argument is simply a hint	and  the
     underlying implementation is free to allocate more or less memory than nec-
     essary to contain the number of entries capacity specifies.

     The  argument  seed  specifies the initial seed used by the underlying hash
     function.	The user is free to choose a value of their choice.

     The hash table is safe to access by multiple readers in the presence of one
     concurrent writer. Behavior is undefined  in  the	presence  of  concurrent
     writers.

RETURN VALUES
     Upon  successful completion ck_ht_init() returns a value of true and other-
     wise returns a value of false to indicate an error.

ERRORS
     The behavior of ck_ht_init() is undefined if ht  is  not  a  pointer  to  a
     ck_ht_t object.

SEE ALSO
     ck_ht_stat(3),   ck_ht_destroy(3),   ck_ht_hash(3),   ck_ht_hash_direct(3),
     ck_ht_set_spmc(3),   ck_ht_put_spmc(3),   ck_ht_gc(3),   ck_ht_get_spmc(3),
     ck_ht_grow_spmc(3),  ck_ht_remove_spmc(3),  ck_ht_reset_spmc(3),  ck_ht_re-
     set_size_spmc(3),	  ck_ht_count(3),    ck_ht_entry_empty(3),     ck_ht_en-
     try_key_set(3),	  ck_ht_entry_key_set_direct(3),     ck_ht_entry_key(3),
     ck_ht_entry_key_length(3),    ck_ht_entry_value(3),     ck_ht_entry_set(3),
     ck_ht_entry_set_direct(3), ck_ht_entry_key_direct(3), ck_ht_entry_value_di-
     rect(3), ck_ht_iterator_init(3), ck_ht_next(3)

     Additional information available at http://concurrencykit.org/

				 March 28, 2012 		   CK_HT_INIT(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ck_ht_init&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help