/* * Copyright 1993, 1995 Christopher Seiwald. * * This file is part of Jam - see jam.c for Copyright information. */ /* * hash.h - simple in-memory hashing routines */ #ifndef BOOST_JAM_HASH_H #define BOOST_JAM_HASH_H #include "object.h" /* * An opaque struct representing an item in the hash table. The first element of * every struct stored in the table must be an OBJECT * which is treated as the * key. */ typedef struct hashdata HASHDATA; /* * hashinit() - initialize a hash table, returning a handle. * * Parameters: * datalen - item size * name - used for debugging */ struct hash * hashinit( int datalen, char const * name ); /* * hash_free() - free a hash table, given its handle */ void hash_free( struct hash * ); void hashdone( struct hash * ); /* * hashenumerate() - call f(i, data) on each item, i in the hash table. The * enumeration order is unspecified. */ void hashenumerate( struct hash *, void (* f)( void *, void * ), void * data ); /* * hash_insert() - insert a new item in a hash table, or return an existing one. * * Preconditions: * - hp must be a hash table created by hashinit() * - key must be an object created by object_new() * * Postconditions: * - if the key does not already exist in the hash table, *found == 0 and the * result will be a pointer to an uninitialized item. The key of the new * item must be set to a value equal to key before any further operations on * the hash table except hashdone(). * - if the key is present then *found == 1 and the result is a pointer to the * existing record. */ HASHDATA * hash_insert( struct hash *, OBJECT * key, int * found ); /* * hash_find() - find a record in the table or NULL if none exists */ HASHDATA * hash_find( struct hash *, OBJECT * key ); struct hashstats { int count; int num_items; int tab_size; int item_size; int sets; int num_hashes; }; void hashstats_init( struct hashstats * stats ); void hashstats_add( struct hashstats * stats, struct hash * ); void hashstats_print( struct hashstats * stats, char const * name ); #endif