zc_hashtable.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /*
  2. * This file is part of the zlog Library.
  3. *
  4. * Copyright (C) 2011 by Hardy Simpson <HardySimpson1984@gmail.com>
  5. *
  6. * Licensed under the LGPL v2.1, see the file COPYING in base directory.
  7. */
  8. #ifndef __zc_hashtalbe_h
  9. #define __zc_hashtalbe_h
  10. #include <stdlib.h>
  11. typedef struct zc_hashtable_entry_s {
  12. unsigned int hash_key;
  13. void *key;
  14. void *value;
  15. struct zc_hashtable_entry_s *prev;
  16. struct zc_hashtable_entry_s *next;
  17. } zc_hashtable_entry_t;
  18. typedef struct zc_hashtable_s zc_hashtable_t;
  19. typedef unsigned int (*zc_hashtable_hash_fn) (const void *key);
  20. typedef int (*zc_hashtable_equal_fn) (const void *key1, const void *key2);
  21. typedef void (*zc_hashtable_del_fn) (void *kv);
  22. zc_hashtable_t *zc_hashtable_new(size_t a_size,
  23. zc_hashtable_hash_fn hash_fn,
  24. zc_hashtable_equal_fn equal_fn,
  25. zc_hashtable_del_fn key_del_fn,
  26. zc_hashtable_del_fn value_del_fn);
  27. void zc_hashtable_del(zc_hashtable_t * a_table);
  28. void zc_hashtable_clean(zc_hashtable_t * a_table);
  29. int zc_hashtable_put(zc_hashtable_t * a_table, void *a_key, void *a_value);
  30. zc_hashtable_entry_t *zc_hashtable_get_entry(zc_hashtable_t * a_table, const void *a_key);
  31. void *zc_hashtable_get(zc_hashtable_t * a_table, const void *a_key);
  32. void zc_hashtable_remove(zc_hashtable_t * a_table, const void *a_key);
  33. zc_hashtable_entry_t *zc_hashtable_begin(zc_hashtable_t * a_table);
  34. zc_hashtable_entry_t *zc_hashtable_next(zc_hashtable_t * a_table, zc_hashtable_entry_t * a_entry);
  35. #define zc_hashtable_foreach(a_table, a_entry) \
  36. for(a_entry = zc_hashtable_begin(a_table); a_entry; a_entry = zc_hashtable_next(a_table, a_entry))
  37. unsigned int zc_hashtable_str_hash(const void *str);
  38. int zc_hashtable_str_equal(const void *key1, const void *key2);
  39. #endif