# linkhash.h File Reference

## Data Structures
struct | lh_entry
struct | lh_table
## Defines
#define | LH_PRIME 0x9e370001UL
#define | LH_EMPTY (void*)-1
#define | LH_FREED (void*)-2
#define | lh_foreach(table, entry) for(entry = table->head; entry; entry = entry->next)
#define | lh_foreach_safe(table, entry, tmp) for(entry = table->head; entry && ((tmp = entry->next) || 1); entry = tmp)
## Typedefs
typedef void( | lh_entry_free_fn )(struct lh_entry *e)
typedef unsigned long( | lh_hash_fn )(void *k)
typedef int( | lh_equal_fn )(void *k1, void *k2)
## Functions
unsigned long | lh_ptr_hash (void *k)
int | lh_ptr_equal (void *k1, void *k2)
unsigned long | lh_char_hash (void *k)
int | lh_char_equal (void *k1, void *k2)
struct lh_table * | lh_table_new (int size, char *name, lh_entry_free_fn *free_fn, lh_hash_fn *hash_fn, lh_equal_fn *equal_fn)
struct lh_table * | lh_kchar_table_new (int size, char *name, lh_entry_free_fn *free_fn)
struct lh_table * | lh_kptr_table_new (int size, char *name, lh_entry_free_fn *free_fn)
void | lh_table_free (struct lh_table *t)
int | lh_table_insert (struct lh_table *t, void *k, void *v)
struct lh_entry * | lh_table_lookup_entry (struct lh_table *t, void *k)
void * | lh_table_lookup (struct lh_table *t, void *k)
int | lh_table_delete_entry (struct lh_table *t, struct lh_entry *e)
int | lh_table_delete (struct lh_table *t, void *k)
void | lh_abort (const char *msg,...)
void | lh_table_resize (struct lh_table *t, int new_size)

## Define Documentation

#define LH_EMPTY (void*)-1

sentinel pointer value for empty slots

#define lh_foreach | ( | table,
|  | entry |  | ) | for(entry = table->head; entry; entry = entry->next)

Convenience list iterator.

#define lh_foreach_safe | ( | table,
|  | entry,
|  | tmp |  | ) | for(entry = table->head; entry && ((tmp = entry->next) || 1); entry = tmp)

lh_foreach_safe allows calling of deletion routine while iterating.

#define LH_FREED (void*)-2

sentinel pointer value for freed slots

#define LH_PRIME 0x9e370001UL

golden prime used in hash functions

## Typedef Documentation

typedef void( lh_entry_free_fn)(struct lh_entry *e)

callback function prototypes

typedef int( lh_equal_fn)(void *k1, void *k2)

callback function prototypes

typedef unsigned long( lh_hash_fn)(void *k)

callback function prototypes

## Function Documentation

void lh_abort | ( | const char * | msg,
|  |  | ... |
| ) |  |  |

int lh_char_equal | ( | void * | k1,
|  | void * | k2 |
| ) |  |  |

unsigned long lh_char_hash | ( | void * | k | ) |

struct lh_table* lh_kchar_table_new | ( | int | size,
|  | char * | name,
|  | lh_entry_free_fn * | free_fn |
| ) |  |  | `[read]`

Convenience function to create a new linkhash table with char keys.

Parameters:

  | size | initial table size.
  | name | table name.
  | free_fn | callback function used to free memory for entries.

Returns:
  a pointer onto the linkhash table.

struct lh_table* lh_kptr_table_new | ( | int | size,
|  | char * | name,
|  | lh_entry_free_fn * | free_fn |
| ) |  |  | `[read]`

Convenience function to create a new linkhash table with ptr keys.

Parameters:

  | size | initial table size.
  | name | table name.
  | free_fn | callback function used to free memory for entries.

Returns:
  a pointer onto the linkhash table.

int lh_ptr_equal | ( | void * | k1,
|  | void * | k2 |
| ) |  |  |

unsigned long lh_ptr_hash | ( | void * | k | ) |

Pre-defined hash and equality functions

int lh_table_delete | ( | struct lh_table * | t,
|  | void * | k |
| ) |  |  |

Delete a record from the table. If a callback free function is provided then it is called for the for the item being deleted.

Parameters:

  | t | the table to delete from.
  | k | a pointer to the key to delete.

Returns:
  0 if the item was deleted.

  -1 if it was not found.

int lh_table_delete_entry | ( | struct lh_table * | t,
|  | struct lh_entry * | e |
| ) |  |  |

Delete a record from the table. If a callback free function is provided then it is called for the for the item being deleted.

Parameters:

  | t | the table to delete from.
  | e | a pointer to the entry to delete.

Returns:
  0 if the item was deleted.

  -1 if it was not found.

void lh_table_free | ( | struct lh_table * | t | ) |

Free a linkhash table. If a callback free function is provided then it is called for all entries in the table.

Parameters:

  | t | table to free.

int lh_table_insert | ( | struct lh_table * | t,
|  | void * | k,
|  | void * | v |
| ) |  |  |

Insert a record into the table.

Parameters:

  | t | the table to insert into.
  | k | a pointer to the key to insert.
  | v | a pointer to the value to insert.

void* lh_table_lookup | ( | struct lh_table * | t,
|  | void * | k |
| ) |  |  |

Lookup a record into the table

Parameters:

  | t | the table to lookup
  | k | a pointer to the key to lookup

Returns:
  a pointer to the found value or NULL if it does not exist.

struct lh_entry* lh_table_lookup_entry | ( | struct lh_table * | t,
|  | void * | k |
| ) |  |  | `[read]`

Lookup a record into the table.

Parameters:

  | t | the table to lookup
  | k | a pointer to the key to lookup

Returns:
  a pointer to the record structure of the value or NULL if it does not exist.

struct lh_table* lh_table_new | ( | int | size,
|  | char * | name,
|  | lh_entry_free_fn * | free_fn,
|  | lh_hash_fn * | hash_fn,
|  | lh_equal_fn * | equal_fn |
| ) |  |  | `[read]`

Create a new linkhash table.

Parameters:

  | size | initial table size. The table is automatically resized although this incurs a performance penalty.
  | name | the table name.
  | free_fn | callback function used to free memory for entries when lh_table_free or lh_table_delete is called. If NULL is provided, then memory for keys and values must be freed by the caller.
  | hash_fn | function used to hash keys. 2 standard ones are defined: lh_ptr_hash and lh_char_hash for hashing pointer values and C strings respectively.
  | equal_fn | comparison function to compare keys. 2 standard ones defined: lh_ptr_hash and lh_char_hash for comparing pointer values and C strings respectively.

Returns:
  a pointer onto the linkhash table.

void lh_table_resize | ( | struct lh_table * | t,
|  | int | new_size |
| ) |  |  |