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