MACSio  0.9
Multi-purpose, Application-Centric, Scalable I/O Proxy App
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
linkhash.h File Reference
#include "json_object.h"

Go to the source code of this file.

Data Structures

struct  lh_entry
 
struct  lh_table
 

Macros

#define LH_PRIME   0x9e370001UL
 
#define LH_LOAD_FACTOR   0.66
 
#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 )(const void *k)
 
typedef int( lh_equal_fn )(const void *k1, const void *k2)
 

Functions

unsigned long lh_ptr_hash (const void *k)
 
int lh_ptr_equal (const void *k1, const void *k2)
 
unsigned long lh_char_hash (const void *k)
 
int lh_char_equal (const void *k1, const void *k2)
 
struct lh_tablelh_table_new (int size, const char *name, lh_entry_free_fn *free_fn, lh_hash_fn *hash_fn, lh_equal_fn *equal_fn)
 
struct lh_tablelh_kchar_table_new (int size, const char *name, lh_entry_free_fn *free_fn)
 
struct lh_tablelh_kptr_table_new (int size, const 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, const void *v)
 
struct lh_entrylh_table_lookup_entry (struct lh_table *t, const void *k)
 
 THIS_FUNCTION_IS_DEPRECATED (extern const void *lh_table_lookup(struct lh_table *t, const void *k))
 
json_bool lh_table_lookup_ex (struct lh_table *t, const void *k, void **v)
 
int lh_table_delete_entry (struct lh_table *t, struct lh_entry *e)
 
int lh_table_delete (struct lh_table *t, const void *k)
 
int lh_table_length (struct lh_table *t)
 
void lh_abort (const char *msg,...)
 
void lh_table_resize (struct lh_table *t, int new_size)
 

Data Structure Documentation

struct lh_entry

An entry in the hash table

Definition at line 62 of file linkhash.h.

Data Fields
void * k

The key.

const void * v

The value.

struct lh_entry * next

The next entry

struct lh_entry * prev

The previous entry.

struct lh_table

The hash table structure.

Definition at line 85 of file linkhash.h.

Data Fields
int size

Size of our hash.

int count

Numbers of entries.

int collisions

Number of collisions.

int resizes

Number of resizes.

int lookups

Number of lookups.

int inserts

Number of inserts.

int deletes

Number of deletes.

const char * name

Name of the hash table.

struct lh_entry * head

The first entry.

struct lh_entry * tail

The last entry.

struct lh_entry * table
lh_entry_free_fn * free_fn

A pointer onto the function responsible for freeing an entry.

lh_hash_fn * hash_fn
lh_equal_fn * equal_fn

Macro Definition Documentation

#define LH_PRIME   0x9e370001UL

golden prime used in hash functions

Definition at line 25 of file linkhash.h.

#define LH_LOAD_FACTOR   0.66

The fraction of filled hash buckets until an insert will cause the table to be resized. This can range from just above 0 up to 1.0.

Definition at line 32 of file linkhash.h.

#define LH_EMPTY   (void*)-1

sentinel pointer value for empty slots

Definition at line 37 of file linkhash.h.

#define LH_FREED   (void*)-2

sentinel pointer value for freed slots

Definition at line 42 of file linkhash.h.

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

Convenience list iterator.

Definition at line 159 of file linkhash.h.

#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.

Definition at line 165 of file linkhash.h.

Typedef Documentation

typedef void( lh_entry_free_fn)(struct lh_entry *e)

callback function prototypes

Definition at line 49 of file linkhash.h.

typedef unsigned long( lh_hash_fn)(const void *k)

callback function prototypes

Definition at line 53 of file linkhash.h.

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

callback function prototypes

Definition at line 57 of file linkhash.h.

Function Documentation

unsigned long lh_ptr_hash ( const void *  k)

Pre-defined hash and equality functions

Definition at line 36 of file linkhash.c.

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

Definition at line 42 of file linkhash.c.

unsigned long lh_char_hash ( const void *  k)

Definition at line 400 of file linkhash.c.

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

Definition at line 421 of file linkhash.c.

struct lh_table* lh_table_new ( int  size,
const char *  name,
lh_entry_free_fn free_fn,
lh_hash_fn hash_fn,
lh_equal_fn equal_fn 
)

Create a new linkhash table.

Parameters
sizeinitial table size. The table is automatically resized although this incurs a performance penalty.
namethe table name.
free_fncallback 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_fnfunction 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_fncomparison 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.

Definition at line 426 of file linkhash.c.

struct lh_table* lh_kchar_table_new ( int  size,
const char *  name,
lh_entry_free_fn free_fn 
)

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

Parameters
sizeinitial table size.
nametable name.
free_fncallback function used to free memory for entries.
Returns
a pointer onto the linkhash table.

Definition at line 448 of file linkhash.c.

struct lh_table* lh_kptr_table_new ( int  size,
const char *  name,
lh_entry_free_fn free_fn 
)

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

Parameters
sizeinitial table size.
nametable name.
free_fncallback function used to free memory for entries.
Returns
a pointer onto the linkhash table.

Definition at line 454 of file linkhash.c.

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
ttable to free.

Definition at line 480 of file linkhash.c.

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

Insert a record into the table.

Parameters
tthe table to insert into.
ka pointer to the key to insert.
va pointer to the value to insert.

Definition at line 493 of file linkhash.c.

struct lh_entry* lh_table_lookup_entry ( struct lh_table t,
const void *  k 
)

Lookup a record into the table.

Parameters
tthe table to lookup
ka pointer to the key to lookup
Returns
a pointer to the record structure of the value or NULL if it does not exist.

Definition at line 527 of file linkhash.c.

THIS_FUNCTION_IS_DEPRECATED ( extern const void *  lh_table_lookupstruct lh_table *t, const void *k)

Lookup a record into the table

Parameters
tthe table to lookup
ka pointer to the key to lookup
Returns
a pointer to the found value or NULL if it does not exist.
Deprecated:
Use lh_table_lookup_ex instead.
json_bool lh_table_lookup_ex ( struct lh_table t,
const void *  k,
void **  v 
)

Lookup a record in the table

Parameters
tthe table to lookup
ka pointer to the key to lookup
va pointer to a where to store the found value (set to NULL if it doesn't exist).
Returns
whether or not the key was found

Definition at line 552 of file linkhash.c.

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
tthe table to delete from.
ea pointer to the entry to delete.
Returns
0 if the item was deleted.
-1 if it was not found.

Definition at line 563 of file linkhash.c.

int lh_table_delete ( struct lh_table t,
const 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
tthe table to delete from.
ka pointer to the key to delete.
Returns
0 if the item was deleted.
-1 if it was not found.

Definition at line 592 of file linkhash.c.

int lh_table_length ( struct lh_table t)

Definition at line 599 of file linkhash.c.

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

Definition at line 27 of file linkhash.c.

void lh_table_resize ( struct lh_table t,
int  new_size 
)

Definition at line 460 of file linkhash.c.