hashtable.h
上传用户:ladybrid91
上传日期:2007-01-04
资源大小:287k
文件大小:2k
源码类别:

Web服务器

开发平台:

Unix_Linux

  1. /*
  2. ** hashtable.h
  3. **
  4. ** Copyright (c) 1995 Peter Eriksson <pen@signum.se>
  5. **
  6. ** This program is free software; you can redistribute it and/or modify
  7. ** it under the terms of the GNU General Public License as published by
  8. ** the Free Software Foundation; either version 2 of the License, or
  9. ** (at your option) any later version.
  10. **
  11. ** This program is distributed in the hope that it will be useful,
  12. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. ** GNU General Public License for more details.
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program; if not, write to the Free Software
  17. ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19. #ifndef HASHTABLE_H
  20. #define HASHTABLE_H
  21. #define HTF_REPLACE 0x0001
  22. #define HTF_NOINSERT 0x0002
  23. typedef struct hashentry_s
  24. {
  25.     mutex_t lock;
  26.     int use;
  27.     void *key;
  28.     unsigned int keylen;
  29.     void *data;
  30.     struct hashentry_s *next;
  31.     void (*release_fcn)(void *data);
  32. } hashentry_t;
  33. typedef struct hashtable_s
  34. {
  35.     unsigned int size;
  36.     unsigned int (*hash_fcn)(const void *key,
  37.      unsigned int keylen,
  38.      unsigned int size);
  39.     hashentry_t *table;
  40. } hashtable_t;
  41. extern void ht_init(hashtable_t *htp,
  42.     unsigned hashsize,
  43.     unsigned (*hash_fcn)(const void *key,
  44.  unsigned int keylen,
  45.  unsigned int hashsize));
  46. extern int ht_clean(hashtable_t *htp);
  47. extern void ht_destroy(hashtable_t *htp);
  48. extern hashentry_t *ht_lookup(hashtable_t *htp,
  49.       const void *key,
  50.       unsigned int keylen);
  51. extern void ht_release(hashentry_t *hep);
  52. extern hashentry_t *ht_insert(hashtable_t *htp,
  53.       const void *key,
  54.       unsigned int keylen,
  55.       void *data,
  56.       unsigned int flags,
  57.       void (*release_fcn)(void *data));
  58. extern int ht_delete(hashtable_t *htp,
  59.      hashentry_t *hep);
  60. extern int ht_foreach(hashtable_t *htp,
  61.       int (*foreach_fcn)(hashentry_t *hep,
  62.  void *misc),
  63.       void *misc);
  64. #endif