mirror of
https://github.com/cc65/cc65.git
synced 2024-12-26 08:32:00 +00:00
Added routines to remove an entry from the hash table.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5048 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
ce0d51d55a
commit
279ad05150
@ -6,10 +6,10 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2003 Ullrich von Bassewitz */
|
/* (C) 2003-2011, Ullrich von Bassewitz */
|
||||||
/* Römerstrasse 52 */
|
/* Roemerstrasse 52 */
|
||||||
/* D-70794 Filderstadt */
|
/* D-70794 Filderstadt */
|
||||||
/* EMail: uz@cc65.org */
|
/* EMail: uz@cc65.org */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* This software is provided 'as-is', without any expressed or implied */
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/* common */
|
/* common */
|
||||||
|
#include "check.h"
|
||||||
#include "hashtab.h"
|
#include "hashtab.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
|
|
||||||
@ -164,6 +165,34 @@ void HT_Insert (HashTable* T, HashNode* N)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void HT_Remove (HashNode* N)
|
||||||
|
/* Remove a node from a hash table. */
|
||||||
|
{
|
||||||
|
/* Get the table from the node */
|
||||||
|
HashTable* T = N->Owner;
|
||||||
|
|
||||||
|
/* Calculate the reduced hash, which is also the slot number */
|
||||||
|
unsigned Slot = N->Hash % T->Slots;
|
||||||
|
|
||||||
|
/* Remove the entry from the single linked list */
|
||||||
|
HashNode** Q = &T->Table[Slot];
|
||||||
|
while (1) {
|
||||||
|
/* If the pointer is NULL, the node is not in the table which we will
|
||||||
|
* consider a serious error.
|
||||||
|
*/
|
||||||
|
CHECK (*Q != 0);
|
||||||
|
if (*Q == N) {
|
||||||
|
/* Found - remove it */
|
||||||
|
*Q = N->Next;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* Next node */
|
||||||
|
Q = &(*Q)->Next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void HT_InsertEntry (HashTable* T, void* Entry)
|
void HT_InsertEntry (HashTable* T, void* Entry)
|
||||||
/* Insert an entry into the given hash table */
|
/* Insert an entry into the given hash table */
|
||||||
{
|
{
|
||||||
@ -172,6 +201,21 @@ void HT_InsertEntry (HashTable* T, void* Entry)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void HT_RemoveEntry (HashTable* T, void* Entry)
|
||||||
|
/* Remove an entry from the given hash table */
|
||||||
|
{
|
||||||
|
/* Get the node from the entry */
|
||||||
|
HashNode* N = T->Func->GetHashNode (Entry);
|
||||||
|
|
||||||
|
/* Make sure the entry is actually in the given table */
|
||||||
|
CHECK (N->Owner == T);
|
||||||
|
|
||||||
|
/* Remove the node */
|
||||||
|
HT_Remove (N);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void HT_Walk (HashTable* T, void (*F) (void* Entry, void* Data), void* Data)
|
void HT_Walk (HashTable* T, void (*F) (void* Entry, void* Data), void* Data)
|
||||||
/* Walk over all nodes of a hash table. For each node, the user supplied
|
/* Walk over all nodes of a hash table. For each node, the user supplied
|
||||||
* function F is called, passing a pointer to the entry, and the data pointer
|
* function F is called, passing a pointer to the entry, and the data pointer
|
||||||
|
@ -6,10 +6,10 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2003-2008 Ullrich von Bassewitz */
|
/* (C) 2003-2011, Ullrich von Bassewitz */
|
||||||
/* Roemerstrasse 52 */
|
/* Roemerstrasse 52 */
|
||||||
/* D-70794 Filderstadt */
|
/* D-70794 Filderstadt */
|
||||||
/* EMail: uz@cc65.org */
|
/* EMail: uz@cc65.org */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* This software is provided 'as-is', without any expressed or implied */
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
@ -196,9 +196,15 @@ void* HT_FindEntry (const HashTable* T, const void* Key);
|
|||||||
void HT_Insert (HashTable* T, HashNode* N);
|
void HT_Insert (HashTable* T, HashNode* N);
|
||||||
/* Insert a node into the given hash table */
|
/* Insert a node into the given hash table */
|
||||||
|
|
||||||
|
void HT_Remove (HashNode* N);
|
||||||
|
/* Remove a node from its hash table */
|
||||||
|
|
||||||
void HT_InsertEntry (HashTable* T, void* Entry);
|
void HT_InsertEntry (HashTable* T, void* Entry);
|
||||||
/* Insert an entry into the given hash table */
|
/* Insert an entry into the given hash table */
|
||||||
|
|
||||||
|
void HT_RemoveEntry (HashTable* T, void* Entry);
|
||||||
|
/* Remove an entry from the given hash table */
|
||||||
|
|
||||||
void HT_Walk (HashTable* T, void (*F) (void* Entry, void* Data), void* Data);
|
void HT_Walk (HashTable* T, void (*F) (void* Entry, void* Data), void* Data);
|
||||||
/* Walk over all nodes of a hash table. For each node, the user supplied
|
/* Walk over all nodes of a hash table. For each node, the user supplied
|
||||||
* function F is called, passing a pointer to the entry, and the data pointer
|
* function F is called, passing a pointer to the entry, and the data pointer
|
||||||
|
Loading…
Reference in New Issue
Block a user