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

FreeBSD Manual Pages

  
 
  

home | help
NAME
       ck_rhs_init -- initialize a hash	set

LIBRARY
       Concurrency Kit (libck, -lck)

SYNOPSIS
       #include	<ck_rhs.h>

       typedef unsigned	long
       ck_rhs_hash_cb_t(const void *key, unsigned long seed);

       typedef bool
       ck_rhs_compare_cb_t(const void *c1, const void *c2);

       bool
       ck_rhs_init(ck_rhs_t	   *hs,	       unsigned	       int	 mode,
	   ck_rhs_hash_cb_t  *hash_function,   ck_rhs_compare_cb_t   *compare,
	   struct    ck_malloc	  *allocator,	 unsigned    long    capacity,
	   unsigned long seed);

DESCRIPTION
       The ck_rhs_init() function initializes the hash set pointed to  by  the
       hs pointer.

       The argument mode specifies the type of key-value pairs to be stored in
       the  hash  set  as  well	 as the	expected concurrent access model.  The
       value of	mode consists of a bitfield of one of the following:

       CK_RHS_MODE_OBJECT
	       The hash	set is meant to	store pointers to objects.  This  pro-
	       vides  a	 hint that only	CK_MD_VMA_BITS are necessary to	encode
	       the key argument. Any unused pointer bits are leveraged for in-
	       ternal optimizations.

       CK_RHS_MODE_DIRECT
	       The hash	set is meant to	directly store key values and that all
	       bits of the key are used	to encode values.

       CK_RHS_MODE_READ_MOSTLY
	       Optimize	read operations	over put/delete.

       The concurrent access model is specified	by:

       CK_RHS_MODE_SPMC
	       The hash	set should allow for concurrent	readers	in  the	 pres-
	       ence of a single	writer.

       CK_RHS_MODE_MPMC
	       The  hash  set should allow for concurrent readers in the pres-
	       ence of concurrent writers. This	is currently unsupported.

       The developer is	free to	 specify  additional  workload	hints.	 These
       hints are one of:

The  argument  hash_function  is  a mandatory pointer to a user-specified hash
function.  A user-specified hash function takes	two arguments. The  key	 argu-
ment  is  a pointer to a key. The seed argument	is the initial seed associated
with  the  hash	 set.	This  initial  seed  is	 specified  by	the  user   in
ck_rhs_init(3).

The compare argument is	an optional pointer to a user-specified	key comparison
function. If NULL is specified in this argument, then pointer equality will be
used to	determine key equality.	A user-specified comparison function takes two
arguments representing pointers	to the objects being compared for equality. It
is expected to return true if the keys are of equal value and false otherwise.

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

The argument capacity represents the initial number of keys the	 hash  set  is
expected  to contain. This argument is simply a	hint and the underlying	imple-
mentation is free to allocate more or less memory than	necessary  to  contain
the number of entries capacity specifies.

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

RETURN VALUES
       Upon  successful	 completion  ck_rhs_init() returns a value of true and
       otherwise returns a value of false to indicate an error.

ERRORS
       The behavior of ck_rhs_init() is	undefined if hs	is not a pointer to  a
       ck_rhs_t	object.

SEE ALSO
       ck_rhs_move(3),		  ck_rhs_destroy(3),	       CK_RHS_HASH(3),
       ck_rhs_iterator_init(3),	ck_rhs_next(3),	ck_rhs_get(3),	ck_rhs_put(3),
       ck_rhs_put_unique(3),  ck_rhs_set(3),  ck_rhs_fas(3), ck_rhs_remove(3),
       ck_rhs_grow(3),	 ck_rhs_rebuild(3),   ck_rhs_gc(3),   ck_rhs_count(3),
       ck_rhs_reset(3),	ck_rhs_reset_size(3), ck_rhs_stat(3)

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

			      September	17, 2012		CK_RHS_INIT(3)

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

home | help