diff options
Diffstat (limited to 'tools/build/src/engine/hash.h')
-rw-r--r-- | tools/build/src/engine/hash.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/tools/build/src/engine/hash.h b/tools/build/src/engine/hash.h new file mode 100644 index 000000000..7c40e8c4a --- /dev/null +++ b/tools/build/src/engine/hash.h @@ -0,0 +1,79 @@ +/* + * 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 |