1 /* 2 * Copyright 1993, 1995 Christopher Seiwald. 3 * 4 * This file is part of Jam - see jam.c for Copyright information. 5 */ 6 7 /* 8 * hash.h - simple in-memory hashing routines 9 */ 10 11 #ifndef BOOST_JAM_HASH_H 12 #define BOOST_JAM_HASH_H 13 14 #include "object.h" 15 16 /* 17 * An opaque struct representing an item in the hash table. The first element of 18 * every struct stored in the table must be an OBJECT * which is treated as the 19 * key. 20 */ 21 typedef struct hashdata HASHDATA; 22 23 /* 24 * hashinit() - initialize a hash table, returning a handle. 25 * 26 * Parameters: 27 * datalen - item size 28 * name - used for debugging 29 */ 30 struct hash * hashinit( int datalen, char const * name ); 31 32 /* 33 * hash_free() - free a hash table, given its handle 34 */ 35 void hash_free( struct hash * ); 36 void hashdone( struct hash * ); 37 38 /* 39 * hashenumerate() - call f(i, data) on each item, i in the hash table. The 40 * enumeration order is unspecified. 41 */ 42 void hashenumerate( struct hash *, void (* f)( void *, void * ), void * data ); 43 44 /* 45 * hash_insert() - insert a new item in a hash table, or return an existing one. 46 * 47 * Preconditions: 48 * - hp must be a hash table created by hashinit() 49 * - key must be an object created by object_new() 50 * 51 * Postconditions: 52 * - if the key does not already exist in the hash table, *found == 0 and the 53 * result will be a pointer to an uninitialized item. The key of the new 54 * item must be set to a value equal to key before any further operations on 55 * the hash table except hashdone(). 56 * - if the key is present then *found == 1 and the result is a pointer to the 57 * existing record. 58 */ 59 HASHDATA * hash_insert( struct hash *, OBJECT * key, int * found ); 60 61 /* 62 * hash_find() - find a record in the table or NULL if none exists 63 */ 64 HASHDATA * hash_find( struct hash *, OBJECT * key ); 65 66 struct hashstats { 67 int count; 68 int num_items; 69 int tab_size; 70 int item_size; 71 int sets; 72 int num_hashes; 73 }; 74 75 void hashstats_init( struct hashstats * stats ); 76 void hashstats_add( struct hashstats * stats, struct hash * ); 77 void hashstats_print( struct hashstats * stats, char const * name ); 78 79 #endif 80