Hash Tables
Various implementations of hash table functions.
Hash tables are common data structures that allow for fast random access to the data that is stored within.
Here, we provide an abstract implementation of a hash table interface and a concrete implementation for pairs of secondary structure and corresponding free energy value.
Abstract interface
-
typedef struct vrna_hash_table_s *vrna_hash_table_t
- #include <ViennaRNA/datastructures/hash_tables.h>
A hash table object.
See also
-
typedef int (*vrna_ht_cmp_f)(void *x, void *y)
- #include <ViennaRNA/datastructures/hash_tables.h>
Callback function to compare two hash table entries.
See also
- Param x
A hash table entry
- Param y
A hash table entry
- Return
-1 if x is smaller, +1 if x is larger than y. 0 if \(x == y \)
- int() vrna_callback_ht_compare_entries (void *x, void *y)
- #include <ViennaRNA/datastructures/hash_tables.h>
-
typedef unsigned int (*vrna_ht_hashfunc_f)(void *x, unsigned long hashtable_size)
- #include <ViennaRNA/datastructures/hash_tables.h>
Callback function to generate a hash key, i.e. hash function.
See also
- Param x
A hash table entry
- Param hashtable_size
The size of the hash table
- Return
The hash table key for entry
x
- unsigned int() vrna_callback_ht_hash_function (void *x, unsigned long hashtable_size)
- #include <ViennaRNA/datastructures/hash_tables.h>
-
typedef int (*vrna_ht_free_f)(void *x)
- #include <ViennaRNA/datastructures/hash_tables.h>
Callback function to free a hash table entry.
See also
- Param x
A hash table entry
- Return
0 on success
- int() vrna_callback_ht_free_entry (void *x)
- #include <ViennaRNA/datastructures/hash_tables.h>
-
vrna_hash_table_t vrna_ht_init(unsigned int b, vrna_ht_cmp_f compare_function, vrna_ht_hashfunc_f hash_function, vrna_ht_free_f free_hash_entry)
- #include <ViennaRNA/datastructures/hash_tables.h>
Get an initialized hash table.
This function returns a ready-to-use hash table with pre-allocated memory for a particular number of entries.
Note
If all function pointers are
NULL
, this function initializes the hash table with default functions, i.e.vrna_ht_db_comp() for the
compare_function
,vrna_ht_db_hash_func() for the
hash_function
, andvrna_ht_db_free_entry() for the
free_hash_entry
arguments.
Warning
If
hash_bits
is larger than 27 you have to compile it with the flag gcc -mcmodel=large.- Parameters
b – Number of bits for the hash table. This determines the size ( \(2^b -1\)).
compare_function – A function pointer to compare any two entries in the hash table (may be
NULL
)hash_function – A function pointer to retrieve the hash value of any entry (may be
NULL
)free_hash_entry – A function pointer to free the memory occupied by any entry (may be
NULL
)
- Returns
An initialized, empty hash table, or
NULL
on any error
-
unsigned long vrna_ht_size(vrna_hash_table_t ht)
- #include <ViennaRNA/datastructures/hash_tables.h>
Get the size of the hash table.
- Parameters
ht – The hash table
- Returns
The size of the hash table, i.e. the maximum number of entries
-
unsigned long vrna_ht_collisions(struct vrna_hash_table_s *ht)
- #include <ViennaRNA/datastructures/hash_tables.h>
Get the number of collisions in the hash table.
- Parameters
ht – The hash table
- Returns
The number of collisions in the hash table
-
void *vrna_ht_get(vrna_hash_table_t ht, void *x)
- #include <ViennaRNA/datastructures/hash_tables.h>
Get an element from the hash table.
This function takes an object
x
and performs a look-up whether the object is stored within the hash tableht
. If the object is already stored inht
, the function simply returns the entry, otherwise it returnsNULL
.See also
vrna_ht_insert(), vrna_hash_delete(), vrna_ht_init()
- Parameters
ht – The hash table
x – The hash entry to look-up
- Returns
The entry
x
if it is stored inht
,NULL
otherwise
-
int vrna_ht_insert(vrna_hash_table_t ht, void *x)
- #include <ViennaRNA/datastructures/hash_tables.h>
Insert an object into a hash table.
Writes the pointer to your hash entry into the table.
See also
vrna_ht_init(), vrna_hash_delete(), vrna_ht_clear()
Warning
In case of collisions, this function simply increments the hash key until a free entry in the hash table is found.
- Parameters
ht – The hash table
x – The hash entry
- Returns
0 on success, 1 if the value is already in the hash table, -1 on error.
-
void vrna_ht_remove(vrna_hash_table_t ht, void *x)
- #include <ViennaRNA/datastructures/hash_tables.h>
Remove an object from the hash table.
Deletes the pointer to your hash entry from the table.
Note
This function doesn’t free any memory occupied by the hash entry.
- Parameters
ht – The hash table
x – The hash entry
-
void vrna_ht_clear(vrna_hash_table_t ht)
- #include <ViennaRNA/datastructures/hash_tables.h>
Clear the hash table.
This function removes all entries from the hash table and automatically free’s the memory occupied by each entry using the bound vrna_ht_free_f() function.
See also
- Parameters
ht – The hash table
-
void vrna_ht_free(vrna_hash_table_t ht)
- #include <ViennaRNA/datastructures/hash_tables.h>
Free all memory occupied by the hash table.
This function removes all entries from the hash table by calling the vrna_ht_free_f() function for each entry. Finally, the memory occupied by the hash table itself is free’d as well.
- Parameters
ht – The hash table
Dot-Bracket / Free Energy entries
-
int vrna_ht_db_comp(void *x, void *y)
- #include <ViennaRNA/datastructures/hash_tables.h>
Default hash table entry comparison.
This is the default comparison function for hash table entries. It assumes the both entries
x
andy
are of type vrna_ht_entry_db_t and compares thestructure
attribute of both entries- Parameters
x – A hash table entry of type vrna_ht_entry_db_t
y – A hash table entry of type vrna_ht_entry_db_t
- Returns
-1 if x is smaller, +1 if x is larger than y. 0 if both are equal.
-
unsigned int vrna_ht_db_hash_func(void *x, unsigned long hashtable_size)
- #include <ViennaRNA/datastructures/hash_tables.h>
Default hash function.
This is the default hash function for hash table insertion/lookup. It assumes that entries are of type vrna_ht_entry_db_t and uses the Bob Jenkins 1996 mix function to create a hash key from the
structure
attribute of the hash entry.- Parameters
x – A hash table entry to compute the key for
hashtable_size – The size of the hash table
- Returns
The hash key for entry
x
-
int vrna_ht_db_free_entry(void *hash_entry)
- #include <ViennaRNA/datastructures/hash_tables.h>
Default function to free memory occupied by a hash entry.
This function assumes that hash entries are of type vrna_ht_entry_db_t and free’s the memory occupied by that entry.
- Parameters
hash_entry – The hash entry to remove from memory
- Returns
0 on success
-
struct vrna_ht_entry_db_t
- #include <ViennaRNA/datastructures/hash_tables.h>
Default hash table entry.
-
typedef struct vrna_hash_table_s *vrna_hash_table_t