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.


AltStyle によって変換されたページ (->オリジナル) /