mirror of
https://github.com/cc65/cc65.git
synced 2024-12-25 17:29:50 +00:00
More tweaking of the new hashtab module
git-svn-id: svn://svn.cc65.org/cc65/trunk@2560 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
5e07b14e8d
commit
ff2dca420b
@ -96,7 +96,7 @@ HashNode* HT_Find (const HashTable* T, const void* Key)
|
|||||||
* if it is not really necessary.
|
* if it is not really necessary.
|
||||||
*/
|
*/
|
||||||
if (N->Hash == Hash &&
|
if (N->Hash == Hash &&
|
||||||
T->Func->Compare (Key, T->Func->GetIndex (N->Entry))) {
|
T->Func->Compare (Key, T->Func->GetKey (N->Entry))) {
|
||||||
/* Found */
|
/* Found */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -133,8 +133,8 @@ void HT_Insert (HashTable* T, HashNode* N)
|
|||||||
HT_Alloc (T);
|
HT_Alloc (T);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generate the hash for the node contents */
|
/* Generate the hash over the node key. */
|
||||||
N->Hash = T->Func->GenHash (T->Func->GetIndex (N->Entry));
|
N->Hash = T->Func->GenHash (T->Func->GetKey (N->Entry));
|
||||||
|
|
||||||
/* Calculate the reduced hash */
|
/* Calculate the reduced hash */
|
||||||
RHash = N->Hash % T->Slots;
|
RHash = N->Hash % T->Slots;
|
||||||
@ -143,6 +143,9 @@ void HT_Insert (HashTable* T, HashNode* N)
|
|||||||
N->Next = T->Table[RHash];
|
N->Next = T->Table[RHash];
|
||||||
T->Table[RHash] = N;
|
T->Table[RHash] = N;
|
||||||
|
|
||||||
|
/* Set the owner */
|
||||||
|
N->Owner = T;
|
||||||
|
|
||||||
/* One more entry */
|
/* One more entry */
|
||||||
++T->Count;
|
++T->Count;
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ struct HashNode {
|
|||||||
void* Entry; /* Pointer to user entry data */
|
void* Entry; /* Pointer to user entry data */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define STATIC_HASHNODE_INITIALIZER(Entry) { 0, 0, 0, Entry }
|
#define STATIC_HASHNODE_INITIALIZER(Entry) { 0, 0, 0, Entry }
|
||||||
|
|
||||||
/* Hash table functions */
|
/* Hash table functions */
|
||||||
typedef struct HashFunctions HashFunctions;
|
typedef struct HashFunctions HashFunctions;
|
||||||
@ -68,8 +68,8 @@ struct HashFunctions {
|
|||||||
unsigned (*GenHash) (const void* Key);
|
unsigned (*GenHash) (const void* Key);
|
||||||
/* Generate the hash over a key. */
|
/* Generate the hash over a key. */
|
||||||
|
|
||||||
const void* (*GetIndex) (void* Entry);
|
const void* (*GetKey) (void* Entry);
|
||||||
/* Given a pointer to the user entry data, return a pointer to the index */
|
/* Given a pointer to the user entry data, return a pointer to the key */
|
||||||
|
|
||||||
HashNode* (*GetHashNode) (void* Entry);
|
HashNode* (*GetHashNode) (void* Entry);
|
||||||
/* Given a pointer to the user entry data, return a pointer to the hash node */
|
/* Given a pointer to the user entry data, return a pointer to the hash node */
|
||||||
@ -99,7 +99,7 @@ struct HashTable {
|
|||||||
|
|
||||||
#if defined(HAVE_INLINE)
|
#if defined(HAVE_INLINE)
|
||||||
INLINE void InitHashNode (HashNode* N, void* Entry)
|
INLINE void InitHashNode (HashNode* N, void* Entry)
|
||||||
/* Initialize a hash node */
|
/* Initialize a hash node. */
|
||||||
{
|
{
|
||||||
N->Next = 0;
|
N->Next = 0;
|
||||||
N->Owner = 0;
|
N->Owner = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user