diff options
author | Danny van Kooten <dannyvankooten@users.noreply.github.com> | 2020-03-12 14:19:24 +0100 |
---|---|---|
committer | Danny van Kooten <dannyvankooten@users.noreply.github.com> | 2020-03-12 14:19:24 +0100 |
commit | 616ff505f666d4d162e5d2d8c0238f8af6f79c40 (patch) | |
tree | bd475af1d3c7b200d38e6769d33c1bed77384d15 /src/hashmap.c | |
parent | 83eee4d23f9da9e72238dd01d43b350ed5bc04f1 (diff) | |
download | unja-616ff505f666d4d162e5d2d8c0238f8af6f79c40.tar.gz unja-616ff505f666d4d162e5d2d8c0238f8af6f79c40.zip |
add first template tests
Diffstat (limited to 'src/hashmap.c')
-rw-r--r-- | src/hashmap.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/hashmap.c b/src/hashmap.c index 3d9edd0..b56b364 100644 --- a/src/hashmap.c +++ b/src/hashmap.c @@ -3,6 +3,8 @@ #include <err.h> #include "hashmap.h" +#define HASH(v) (v[0] - 'a') % HASHMAP_CAP + struct node { char *key; void *value; @@ -12,7 +14,7 @@ struct node { struct hashmap *hashmap_new() { struct hashmap *hm = malloc(sizeof *hm); if (!hm) err(EXIT_FAILURE, "out of memory"); - for (int i=0; i < 26; i++) { + for (int i=0; i < HASHMAP_CAP; i++) { hm->buckets[i] = NULL; } @@ -20,7 +22,7 @@ struct hashmap *hashmap_new() { } void hashmap_insert(struct hashmap *hm, char *key, void *value) { - int pos = (key[0] - 'a') % 26; + int pos = HASH(key); struct node *head = hm->buckets[pos]; struct node *node = head; @@ -40,7 +42,7 @@ void hashmap_insert(struct hashmap *hm, char *key, void *value) { } void *hashmap_get(struct hashmap *hm, char *key) { - int pos = (key[0] - 'a') % 26; + int pos = HASH(key); struct node *node = hm->buckets[pos]; while (node) { if (strcmp(node->key, key) == 0) { @@ -61,7 +63,7 @@ void hashmap_free(struct hashmap *hm) { struct node *node; struct node *next; - for (int i=0; i < 26; i++) { + for (int i=0; i < HASHMAP_CAP; i++) { node = hm->buckets[i]; while (node) { next = node->next; |