About Libhashish

Posted on January 24th, 2008 by hgndgtl

Libhashish is a powerful and generic hash library for C and C++. The library attempt to combine the best algorithms in this area and take all kinds of optimizations into account. Furthermore the main focus is applicability - at least you should use and feel comfortable with this library. See the following list for some details:

  • Build-in key support for char arrays (strings) and uint_{8,16,32} types and support for own (possible complex) key data types
  • Support rbtree's as collision strategy instead of bucked lists (avoid worst case O(n) scenario)
  • Dynamic or manual adjustable table size (reordering if proportion entries/table_size is unfavorable)
  • Build as an static or dynamic library (.a and .so)
  • Iterator support (equivalent to ruby's hash.each() method)
  • Thread clean - fine-grained lock mechanisms (mutex locks, reader writer locks, ...)
  • Bloom filter implementation
  • Many built-in hash algorithms (from trivial algorithms till cryptographic ones)
  • Architecture clean - runs on 32bit machines as well as 64bit machines
  • As lightweight as possible - no bloated code
  • Makefile test target plus benchmark applications for comparing the different hashing algorithm
  • Dual licensed under the GNU General Public and BSD License (see Documentation to make the BSD License active)

Use the source, Luke

The following code snippset demonstrate a trivial but complete example how to use libhashish. There are really a bunch of other - more specialized - usages but for the normal case (keys of type char array (string)) these standard calls are sufficing:

/* gcc -pipe -Os -Wall -W test.c -lm -lhashish -o test */
#include <libhashish.h>

int main(void) {
  hi_handle_t *hi_handle;
  const char *key = "23";
  const char *data = "data element";
  const char *data_ptr;

  /* initialize hashish handle */
  hi_init_str(&hi_handle, 23);

  /* insert an key/data pair */
  ret = hi_insert_str(hi_handle, key, data);

  /* search for a pair with a string key and store result */
  hi_get_str(hi_handle, key, &data_ptr);

  fprintf(stdout, "Key: %s Data: %s\n", key, data_ptr);

  /* free the hashish handle */
  hi_fini(hi_handle);

  return 0;
}
        

Copyright © 2007 Libhashish Inc. All rights reserved.