ATLAS Offline Software
Loading...
Searching...
No Matches
hash-table.h File Reference

Hash table. More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _HashTableIterator
 Definition of a HashTableIterator. More...

Macros

#define HASH_TABLE_NULL   ((void *) 0)
 A null HashTableValue.

Typedefs

typedef struct _HashTable HashTable
 A hash table structure.
typedef struct _HashTableIterator HashTableIterator
 Structure used to iterate over a hash table.
typedef struct _HashTableEntry HashTableEntry
 Internal structure representing an entry in a hash table.
typedef void * HashTableKey
 A key to look up a value in a HashTable.
typedef void * HashTableValue
 A value stored in a HashTable.
typedef unsigned long(* HashTableHashFunc) (HashTableKey value)
 Hash function used to generate hash values for keys used in a hash table.
typedef int(* HashTableEqualFunc) (HashTableKey value1, HashTableKey value2)
 Function used to compare two keys for equality.
typedef void(* HashTableKeyFreeFunc) (HashTableKey value)
 Type of function used to free keys when entries are removed from a hash table.
typedef void(* HashTableValueFreeFunc) (HashTableValue value)
 Type of function used to free values when entries are removed from a hash table.

Functions

HashTablehash_table_new (HashTableHashFunc hash_func, HashTableEqualFunc equal_func)
 Create a new hash table.
void hash_table_free (HashTable *hash_table)
 Destroy a hash table.
void hash_table_register_free_functions (HashTable *hash_table, HashTableKeyFreeFunc key_free_func, HashTableValueFreeFunc value_free_func)
 Register functions used to free the key and value when an entry is removed from a hash table.
int hash_table_insert (HashTable *hash_table, HashTableKey key, HashTableValue value)
 Insert a value into a hash table, overwriting any existing entry using the same key.
HashTableValue hash_table_lookup (HashTable *hash_table, HashTableKey key)
 Look up a value in a hash table by key.
int hash_table_remove (HashTable *hash_table, HashTableKey key)
 Remove a value from a hash table.
int hash_table_num_entries (HashTable *hash_table)
 Retrieve the number of entries in a hash table.
void hash_table_iterate (HashTable *hash_table, HashTableIterator *iter)
 Initialise a HashTableIterator to iterate over a hash table.
int hash_table_iter_has_more (HashTableIterator *iterator)
 Determine if there are more keys in the hash table to iterate over.
HashTableValue hash_table_iter_next (HashTableIterator *iterator)
 Using a hash table iterator, retrieve the next key.

Detailed Description

Hash table.

A hash table stores a set of values which can be addressed by a key. Given the key, the corresponding value can be looked up quickly.

To create a hash table, use hash_table_new. To destroy a hash table, use hash_table_free.

To insert a value into a hash table, use hash_table_insert.

To remove a value from a hash table, use hash_table_remove.

To look up a value by its key, use hash_table_lookup.

To iterate over all values in a hash table, use hash_table_iterate to initialise a HashTableIterator structure. Each value can then be read in turn using hash_table_iter_next and hash_table_iter_has_more.

Definition in file hash-table.h.

Macro Definition Documentation

◆ HASH_TABLE_NULL

#define HASH_TABLE_NULL   ((void *) 0)

A null HashTableValue.

Definition at line 96 of file hash-table.h.

Typedef Documentation

◆ HashTable

typedef struct _HashTable HashTable

A hash table structure.

Definition at line 56 of file hash-table.h.

◆ HashTableEntry

typedef struct _HashTableEntry HashTableEntry

Internal structure representing an entry in a hash table.

Definition at line 68 of file hash-table.h.

◆ HashTableEqualFunc

typedef int(* HashTableEqualFunc) (HashTableKey value1, HashTableKey value2)

Function used to compare two keys for equality.

Returns
Non-zero if the two keys are equal, zero if the keys are not equal.

Definition at line 115 of file hash-table.h.

◆ HashTableHashFunc

typedef unsigned long(* HashTableHashFunc) (HashTableKey value)

Hash function used to generate hash values for keys used in a hash table.

Parameters
valueThe value to generate a hash value for.
Returns
The hash value.

Definition at line 106 of file hash-table.h.

◆ HashTableIterator

Structure used to iterate over a hash table.

Definition at line 62 of file hash-table.h.

◆ HashTableKey

typedef void* HashTableKey

A key to look up a value in a HashTable.

Definition at line 74 of file hash-table.h.

◆ HashTableKeyFreeFunc

typedef void(* HashTableKeyFreeFunc) (HashTableKey value)

Type of function used to free keys when entries are removed from a hash table.

Definition at line 122 of file hash-table.h.

◆ HashTableValue

typedef void* HashTableValue

A value stored in a HashTable.

Definition at line 80 of file hash-table.h.

◆ HashTableValueFreeFunc

typedef void(* HashTableValueFreeFunc) (HashTableValue value)

Type of function used to free values when entries are removed from a hash table.

Definition at line 129 of file hash-table.h.

Function Documentation

◆ hash_table_free()

void hash_table_free ( HashTable * hash_table)

Destroy a hash table.

Parameters
hash_tableThe hash table to destroy.

◆ hash_table_insert()

int hash_table_insert ( HashTable * hash_table,
HashTableKey key,
HashTableValue value )

Insert a value into a hash table, overwriting any existing entry using the same key.

Parameters
hash_tableThe hash table.
keyThe key for the new value.
valueThe value to insert.
Returns
Non-zero if the value was added successfully, or zero if it was not possible to allocate memory for the new entry.

◆ hash_table_iter_has_more()

int hash_table_iter_has_more ( HashTableIterator * iterator)

Determine if there are more keys in the hash table to iterate over.

Parameters
iteratorThe hash table iterator.
Returns
Zero if there are no more values to iterate over, non-zero if there are more values to iterate over.

◆ hash_table_iter_next()

HashTableValue hash_table_iter_next ( HashTableIterator * iterator)

Using a hash table iterator, retrieve the next key.

Parameters
iteratorThe hash table iterator.
Returns
The next key from the hash table, or HASH_TABLE_NULL if there are no more keys to iterate over.

◆ hash_table_iterate()

void hash_table_iterate ( HashTable * hash_table,
HashTableIterator * iter )

Initialise a HashTableIterator to iterate over a hash table.

Parameters
hash_tableThe hash table.
iterPointer to an iterator structure to initialise.

◆ hash_table_lookup()

HashTableValue hash_table_lookup ( HashTable * hash_table,
HashTableKey key )

Look up a value in a hash table by key.

Parameters
hash_tableThe hash table.
keyThe key of the value to look up.
Returns
The value, or HASH_TABLE_NULL if there is no value with that key in the hash table.

◆ hash_table_new()

HashTable * hash_table_new ( HashTableHashFunc hash_func,
HashTableEqualFunc equal_func )

Create a new hash table.

Parameters
hash_funcFunction used to generate hash keys for the keys used in the table.
equal_funcFunction used to test keys used in the table for equality.
Returns
A new hash table structure, or NULL if it was not possible to allocate the new hash table.

◆ hash_table_num_entries()

int hash_table_num_entries ( HashTable * hash_table)

Retrieve the number of entries in a hash table.

Parameters
hash_tableThe hash table.
Returns
The number of entries in the hash table.

◆ hash_table_register_free_functions()

void hash_table_register_free_functions ( HashTable * hash_table,
HashTableKeyFreeFunc key_free_func,
HashTableValueFreeFunc value_free_func )

Register functions used to free the key and value when an entry is removed from a hash table.

Parameters
hash_tableThe hash table.
key_free_funcFunction used to free keys.
value_free_funcFunction used to free values.

◆ hash_table_remove()

int hash_table_remove ( HashTable * hash_table,
HashTableKey key )

Remove a value from a hash table.

Parameters
hash_tableThe hash table.
keyThe key of the value to remove.
Returns
Non-zero if a key was removed, or zero if the specified key was not found in the hash table.