aboutsummaryrefslogtreecommitdiff
path: root/src/hashmap.c
diff options
context:
space:
mode:
authorDanny van Kooten <dannyvankooten@users.noreply.github.com>2020-03-12 14:19:24 +0100
committerDanny van Kooten <dannyvankooten@users.noreply.github.com>2020-03-12 14:19:24 +0100
commit616ff505f666d4d162e5d2d8c0238f8af6f79c40 (patch)
treebd475af1d3c7b200d38e6769d33c1bed77384d15 /src/hashmap.c
parent83eee4d23f9da9e72238dd01d43b350ed5bc04f1 (diff)
downloadunja-616ff505f666d4d162e5d2d8c0238f8af6f79c40.tar.gz
unja-616ff505f666d4d162e5d2d8c0238f8af6f79c40.zip
add first template tests
Diffstat (limited to 'src/hashmap.c')
-rw-r--r--src/hashmap.c10
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;