---
name: "ck_rhs_init"
section: "3"
platform: "linux"
package: "libck-dev"
version: "0.7.2-6"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/ck_rhs_init"
---

# ck\_rhs\_init(3)

initialize a hash set

## 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 provides a hint that only CK\_MD\_VMA\_BITS are necessary to encode the key argument. Any unused pointer bits are leveraged for internal 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 presence of a single writer.

- CK\_RHS\_MODE\_MPMC

  The hash set should allow for concurrent readers in the presence 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* argument 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)](/ck_rhs_init/3.md).

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 destruction 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 implementation 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 function. 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_move/3.md), [ck\_rhs\_destroy(3)](/ck_rhs_destroy/3.md), [CK\_RHS\_HASH(3)](/CK_RHS_HASH/3.md), [ck\_rhs\_iterator\_init(3)](/ck_rhs_iterator_init/3.md), [ck\_rhs\_next(3)](/ck_rhs_next/3.md), [ck\_rhs\_get(3)](/ck_rhs_get/3.md), [ck\_rhs\_put(3)](/ck_rhs_put/3.md), [ck\_rhs\_put\_unique(3)](/ck_rhs_put_unique/3.md), [ck\_rhs\_set(3)](/ck_rhs_set/3.md), [ck\_rhs\_fas(3)](/ck_rhs_fas/3.md), [ck\_rhs\_remove(3)](/ck_rhs_remove/3.md), [ck\_rhs\_grow(3)](/ck_rhs_grow/3.md), [ck\_rhs\_rebuild(3)](/ck_rhs_rebuild/3.md), [ck\_rhs\_gc(3)](/ck_rhs_gc/3.md), [ck\_rhs\_count(3)](/ck_rhs_count/3.md), [ck\_rhs\_reset(3)](/ck_rhs_reset/3.md), [ck\_rhs\_reset\_size(3)](/ck_rhs_reset_size/3.md), [ck\_rhs\_stat(3)](/ck_rhs_stat/3.md)

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