hash.h
上传用户:xiaozhuqw
上传日期:2009-11-15
资源大小:1338k
文件大小:2k
源码类别:

网络

开发平台:

Unix_Linux

  1. /* Hash routine.
  2.    Copyright (C) 1998 Kunihiro Ishiguro
  3. This file is part of GNU Zebra.
  4. GNU Zebra is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published
  6. by the Free Software Foundation; either version 2, or (at your
  7. option) any later version.
  8. GNU Zebra is distributed in the hope that it will be useful, but
  9. WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11. General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with GNU Zebra; see the file COPYING.  If not, write to the
  14. Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  15. Boston, MA 02111-1307, USA.  */
  16. #ifndef _ZEBRA_HASH_H
  17. #define _ZEBRA_HASH_H
  18. /* Default hash table size.  */ 
  19. #define HASHTABSIZE     1024
  20. struct hash_backet
  21. {
  22.   /* Linked list.  */
  23.   struct hash_backet *next;
  24.   /* Hash key. */
  25.   unsigned int key;
  26.   /* Data.  */
  27.   void *data;
  28. };
  29. struct hash
  30. {
  31.   /* Hash backet. */
  32.   struct hash_backet **index;
  33.   /* Hash table size. */
  34.   unsigned int size;
  35.   /* Key make function. */
  36.   unsigned int (*hash_key) ();
  37.   /* Data compare function. */
  38.   int (*hash_cmp) ();
  39.   /* Backet alloc. */
  40.   unsigned long count;
  41. };
  42. struct hash *hash_create (unsigned int (*) (), int (*) ());
  43. struct hash *hash_create_size (unsigned int, unsigned int (*) (), int (*) ());
  44. void *hash_get (struct hash *, void *, void * (*) ());
  45. void *hash_alloc_intern (void *);
  46. void *hash_lookup (struct hash *, void *);
  47. void *hash_release (struct hash *, void *);
  48. void hash_iterate (struct hash *, 
  49.    void (*) (struct hash_backet *, void *), void *);
  50. void hash_clean (struct hash *, void (*) (void *));
  51. void hash_free (struct hash *);
  52. #endif /* _ZEBRA_HASH_H */