Use a real hashing function.
This commit is contained in:
parent
c9c662dd00
commit
120db2838c
1 changed files with 10 additions and 2 deletions
|
@ -15,7 +15,13 @@ typedef struct {
|
|||
} HASHTABLE;
|
||||
|
||||
int hash_of_key(HASHTABLE* hashtable, char * key) {
|
||||
return 0;
|
||||
int val=0;
|
||||
int idx=0;
|
||||
while (key[idx] != '\0') {
|
||||
val ^= key[idx];
|
||||
idx++;
|
||||
}
|
||||
return (val % hashtable->capacity);
|
||||
}
|
||||
|
||||
HASHTABLE* hashtable_create(int capacity) {
|
||||
|
@ -88,7 +94,7 @@ int hashtable_set(HASHTABLE* hashtable, char* key, void * value) {
|
|||
(void*)cell->value,
|
||||
(void*)cell->next);
|
||||
}
|
||||
printf("hashtable_set -- done\n");
|
||||
printf("hashtable_set(...) -- done\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -98,6 +104,7 @@ void * hashtable_get(HASHTABLE* hashtable, char* key) {
|
|||
HASHCELL* cell;
|
||||
printf("hashtable_get(%p, %p) -- \n", hashtable, key);
|
||||
idx = hash_of_key(hashtable, key);
|
||||
printf("hashtable_get(...) -- index [%d/%d]\n", idx, hashtable->capacity);
|
||||
cell = hashtable->data[idx];
|
||||
while(cell) {
|
||||
printf("hashtable_get(...) -- cell@%p{key=%s, value=%p, next=%p}\n",
|
||||
|
@ -134,6 +141,7 @@ int main(int argc, char** argv) {
|
|||
printf("h['charlie'] <- %d\n", z);
|
||||
hashtable_set(hashtable, "alice", &y);
|
||||
printf("h['alice'] <- %d\n", y);
|
||||
|
||||
value = hashtable_get(hashtable, "alice");
|
||||
printf("h['alice'] ? %d\n", *value);
|
||||
value = hashtable_get(hashtable, "bob");
|
||||
|
|
Loading…
Reference in a new issue