1/* $NetBSD: htable.h,v 1.2 2017/02/14 01:16:49 christos Exp $ */ 2 3#ifndef _HTABLE_H_INCLUDED_ 4#define _HTABLE_H_INCLUDED_ 5 6/*++ 7/* NAME 8/* htable 3h 9/* SUMMARY 10/* hash table manager 11/* SYNOPSIS 12/* #include <htable.h> 13/* DESCRIPTION 14/* .nf 15 16 /* Structure of one hash table entry. */ 17 18typedef struct HTABLE_INFO { 19 char *key; /* lookup key */ 20 void *value; /* associated value */ 21 struct HTABLE_INFO *next; /* colliding entry */ 22 struct HTABLE_INFO *prev; /* colliding entry */ 23} HTABLE_INFO; 24 25 /* Structure of one hash table. */ 26 27typedef struct HTABLE { 28 ssize_t size; /* length of entries array */ 29 ssize_t used; /* number of entries in table */ 30 HTABLE_INFO **data; /* entries array, auto-resized */ 31 HTABLE_INFO **seq_bucket; /* current sequence hash bucket */ 32 HTABLE_INFO **seq_element; /* current sequence element */ 33} HTABLE; 34 35extern HTABLE *htable_create(ssize_t); 36extern HTABLE_INFO *htable_enter(HTABLE *, const char *, void *); 37extern HTABLE_INFO *htable_locate(HTABLE *, const char *); 38extern void *htable_find(HTABLE *, const char *); 39extern void htable_delete(HTABLE *, const char *, void (*) (void *)); 40extern void htable_free(HTABLE *, void (*) (void *)); 41extern void htable_walk(HTABLE *, void (*) (HTABLE_INFO *, void *), void *); 42extern HTABLE_INFO **htable_list(HTABLE *); 43extern HTABLE_INFO *htable_sequence(HTABLE *, int); 44 45#define HTABLE_SEQ_FIRST 0 46#define HTABLE_SEQ_NEXT 1 47#define HTABLE_SEQ_STOP (-1) 48 49 /* 50 * Correct only when casting (char *) to (void *). 51 */ 52#define HTABLE_ACTION_FN_CAST(f) ((void *)(HTABLE_INFO *, void *)) (f) 53#define HTABLE_FREE_FN_CAST(f) ((void *)(void *)) (f) 54 55/* LICENSE 56/* .ad 57/* .fi 58/* The Secure Mailer license must be distributed with this software. 59/* AUTHOR(S) 60/* Wietse Venema 61/* IBM T.J. Watson Research 62/* P.O. Box 704 63/* Yorktown Heights, NY 10598, USA 64/* CREATION DATE 65/* Fri Feb 14 13:43:19 EST 1997 66/* LAST MODIFICATION 67/* %E% %U% 68/* VERSION/RELEASE 69/* %I% 70/*--*/ 71 72#endif 73