Hash.h 1.92 KB
Newer Older
1 2 3 4 5 6 7 8
/*-----------------------------------------------------------------------------
 *
 * (c) The GHC Team, 1999
 *
 * Prototypes for Hash.c
 *
 * -------------------------------------------------------------------------- */

9 10 11
#ifndef HASH_H
#define HASH_H

12
#include "BeginPrivate.h"
13

14 15
typedef struct hashtable HashTable; /* abstract */

16 17
/* Hash table access where the keys are StgWords */
HashTable * allocHashTable    ( void );
18 19 20
void *      lookupHashTable ( HashTable *table, StgWord key );
void        insertHashTable ( HashTable *table, StgWord key, void *data );
void *      removeHashTable ( HashTable *table, StgWord key, void *data );
21

22 23
int keyCountHashTable (HashTable *table);

24
// Puts up to szKeys keys of the hash table into the given array. Returns the
Facundo Domínguez's avatar
Facundo Domínguez committed
25 26 27 28 29 30
// actual amount of keys that have been retrieved.
//
// If the table is modified concurrently, the function behavior is undefined.
//
int keysHashTable(HashTable *table, StgWord keys[], int szKeys);

31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
/* Hash table access where the keys are C strings (the strings are
 * assumed to be allocated by the caller, and mustn't be deallocated
 * until the corresponding hash table entry has been removed).
 */
HashTable * allocStrHashTable ( void );

#define lookupStrHashTable(table, key)  \
   (lookupHashTable(table, (StgWord)key))

#define insertStrHashTable(table, key, data)  \
   (insertHashTable(table, (StgWord)key, data))

#define removeStrHashTable(table, key, data) \
   (removeHashTable(table, (StgWord)key, data))

46 47 48 49 50 51 52
/* Hash tables for arbitrary keys */
typedef int HashFunction(HashTable *table, StgWord key);
typedef int CompareFunction(StgWord key1, StgWord key2);
HashTable * allocHashTable_(HashFunction *hash, CompareFunction *compare);
int hashWord(HashTable *table, StgWord key);
int hashStr(HashTable *table, char *key);

53
/* Freeing hash tables
54 55
 */
void freeHashTable ( HashTable *table, void (*freeDataFun)(void *) );
56

57 58
void exitHashTable ( void );

59
#include "EndPrivate.h"
60

61
#endif /* HASH_H */