Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

C hash implementation based on khash

branch: master


latest commit f00e6e6e16
TJ Holowaychuk visionmedia authored October 10, 2013
Octocat-spinner-32 .gitignore Initial commit June 17, 2012
Octocat-spinner-32 Makefile Initial commit June 17, 2012
Octocat-spinner-32 docs October 10, 2013
Octocat-spinner-32 hash.c fix test asserts to account for randomness November 02, 2012
Octocat-spinner-32 hash.h fix khash include November 02, 2012
Octocat-spinner-32 khash.h add package.json November 02, 2012
Octocat-spinner-32 package.json docs October 10, 2013


C hash implementation based on khash.


Install with clib:

$ clib install clibs/hash


hash_t *hash = hash_new();
hash_set(hash, "name", "tobi");
hash_set(hash, "species", "ferret");
hash_set(hash, "age", "2");

hash_each(hash, {
  printf("%s: %s\n", key, (char *) val);



species: ferret
age: 2
name: tobi



The hash type.

hash_t *hash_new()

Allocate and initialize a new hash.

hash_free(hash_t *self)

Free the hash, you must free values appropriately.

unsigned int hash_size(hash_t *self)

Return the number of values in the hash table.

void hash_clear(hash_t *self)

Remove all values from the hash.

void hash_set(hash_t *self, char *key, void *val);

Set key to val.

void *hash_get(hash_t *self, char *key);

Get value for key or NULL.

int hash_has(hash_t *self, char *key);

Check if the hash contains key.

void hash_del(hash_t *self, char *key);

Remove key from the hash.

hash_each(hash_t *self, block)

A macro for iterating key/value pairs.

hash_each(users, {
  printf("%s: %s\n", key, (char *) val);

hash_each_key(hash_t *self, block)

A macro for iterating keys only.

hash_each_key(users, {
  printf("%s\n", key);

hash_each_val(hash_t *self, block)

A macro for iterating values only.

hash_each_val(users, {
  printf("%s\n", (char *) val);
Something went wrong with that request. Please try again.