1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
/*
* Simple hash table
* Copyright
* (C) 1992 Joseph H. Allen
*
* This file is part of JOE (Joe's Own Editor)
*/
#ifndef _JOE_HASH_H
#define _JOE_HASH_H 1
struct entry {
HENTRY *next;
unsigned char *name;
unsigned hash_val;
void *val;
};
struct hash {
unsigned len;
HENTRY **tab;
unsigned nentries;
};
/* Compute hash code for a string */
unsigned long hash PARAMS((unsigned char *s));
/* Create a hash table of specified size, which must be a power of 2 */
HASH *htmk PARAMS((int len));
/* Delete a hash table. HENTRIES get freed, but name/vals don't. */
void htrm PARAMS((HASH *ht));
/* Add an entry to a hash table.
Note: 'name' is _not_ strdup()ed */
void *htadd PARAMS((HASH *ht, unsigned char *name, void *val));
/* Look up an entry in a hash table, returns NULL if not found */
void *htfind PARAMS((HASH *ht, unsigned char *name));
#endif
|