-HashNode* HT_Find (const HashTable* T, const void* Key)
-/* Find the node with the given index */
-{
- /* If we don't have a table, there's nothing to find */
- if (T->Table == 0) {
- return 0;
- }
-
- /* Search for the entry */
- return HT_FindHash (T, Key, T->Func->GenHash (Key));
-}
-
-
-
HashNode* HT_FindHash (const HashTable* T, const void* Key, unsigned Hash)
/* Find the node with the given key. Differs from HT_Find in that the hash
* for the key is precalculated and passed to the function.
-void* HT_FindEntry (const HashTable* T, const void* Key)
-/* Find the node with the given index and return the corresponding entry */
+void* HT_Find (const HashTable* T, const void* Key)
+/* Find the entry with the given key and return it */
{
- /* Since the HashEntry must be first member, we can use HT_Find here */
- return HT_Find (T, Key);
+ /* Search for the entry */
+ return HT_FindHash (T, Key, T->Func->GenHash (Key));
}
-void HT_Insert (HashTable* T, HashNode* N)
-/* Insert a node into the given hash table */
+void HT_Insert (HashTable* T, void* Entry)
+/* Insert an entry into the given hash table */
{
+ HashNode* N;
unsigned RHash;
/* If we don't have a table, we need to allocate it now */
HT_Alloc (T);
}
+ /* The first member of Entry is also the hash node */
+ N = Entry;
+
/* Generate the hash over the node key. */
N->Hash = T->Func->GenHash (T->Func->GetKey (N));
-void HT_Remove (HashTable* T, HashNode* N)
-/* Remove a node from a hash table. */
+void HT_Remove (HashTable* T, void* Entry)
+/* Remove an entry from the given hash table */
{
+ /* The first member of Entry is also the hash node */
+ HashNode* N = Entry;
+
/* Calculate the reduced hash, which is also the slot number */
unsigned Slot = N->Hash % T->Slots;
-void HT_InsertEntry (HashTable* T, void* Entry)
-/* Insert an entry into the given hash table */
-{
- /* Since the hash node must be first member, Entry is also the pointer to
- * the hash node.
- */
- HT_Insert (T, Entry);
-}
-
-
-
-void HT_RemoveEntry (HashTable* T, void* Entry)
-/* Remove an entry from the given hash table */
-{
- /* The entry is the first member, so we can just convert the pointer */
- HT_Remove (T, Entry);
-}
-
-
-
void HT_Walk (HashTable* T, int (*F) (void* Entry, void* Data), void* Data)
/* Walk over all nodes of a hash table, optionally deleting entries from the
* table. For each node, the user supplied function F is called, passing a
void FreeHashTable (HashTable* T);
/* Free a hash table. Note: This will not free the entries in the table! */
-HashNode* HT_Find (const HashTable* T, const void* Key);
-/* Find the node with the given key*/
-
HashNode* HT_FindHash (const HashTable* T, const void* Key, unsigned Hash);
/* Find the node with the given key. Differs from HT_Find in that the hash
* for the key is precalculated and passed to the function.
*/
-void* HT_FindEntry (const HashTable* T, const void* Key);
-/* Find the node with the given key and return the corresponding entry */
-
-void HT_Insert (HashTable* T, HashNode* N);
-/* Insert a node into the given hash table */
-
-void HT_Remove (HashTable* T, HashNode* N);
-/* Remove a node from its hash table */
+void* HT_Find (const HashTable* T, const void* Key);
+/* Find the entry with the given key and return it */
-void HT_InsertEntry (HashTable* T, void* Entry);
+void HT_Insert (HashTable* T, void* Entry);
/* Insert an entry into the given hash table */
-void HT_RemoveEntry (HashTable* T, void* Entry);
+void HT_Remove (HashTable* T, void* Entry);
/* Remove an entry from the given hash table */
void HT_Walk (HashTable* T, int (*F) (void* Entry, void* Data), void* Data);