diff --git a/lib/hashmap/hashmap.c b/lib/hashmap/hashmap.c index cfc112c..08dea74 100644 --- a/lib/hashmap/hashmap.c +++ b/lib/hashmap/hashmap.c @@ -20,50 +20,53 @@ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. #include #include -hashmap_t *hm_new_hashmap() { - hashmap_t *this = malloc(sizeof(hashmap_t)); - this->cap = 8; - this->len = 0; - // null all pointers in list - this->list = calloc((this->cap), sizeof(map_pair_t *)); - return this; -} - -unsigned int hm_hashcode(hashmap_t *this, char *key) { - unsigned int code; - for (code = 0; *key != '\0'; key++) { - code = *key + 31 * code; - } - - return code % (this->cap); -} - -char *hm_get(hashmap_t *this, char *key) { - map_pair_t *current; - for (current = this->list[hm_hashcode(this, key)]; current; - current = current->next) { - if (strcmp(current->key, key) == 0) { - return current->val; - } - } - // the key is not found - return NULL; -} - -void hm_set(hashmap_t *this, char *key, char *val) { - unsigned int idx = hm_hashcode(this, key); - map_pair_t *current; - for (current = this->list[idx]; current; current = current->next) { - if (strcmp(current->key, key) == 0) { - current->val = val; - return; - } - } +int main(){ - map_pair_t *p = malloc(sizeof(map_pair_t)); - p->key = key; - p->val = val; - p->next = this->list[idx]; - this->list[idx] = p; - this->len++; + hashmap_t *hm_new_hashmap() { + hashmap_t *this = malloc(sizeof(hashmap_t)); + this->cap = 8; + this->len = 0; + // null all pointers in list + this->list = calloc((this->cap), sizeof(map_pair_t *)); + return this; + } + + unsigned int hm_hashcode(hashmap_t *this, char *key) { + unsigned int code; + for (code = 0; *key != '\0'; key++) { + code = *key + 31 * code; + } + + return code % (this->cap); + } + + char *hm_get(hashmap_t *this, char *key) { + map_pair_t *current; + for (current = this->list[hm_hashcode(this, key)]; current; + current = current->next) { + if (strcmp(current->key, key) == 0) { + return current->val; + } + } + // the key is not found + return NULL; + } + + void hm_set(hashmap_t *this, char *key, char *val) { + unsigned int idx = hm_hashcode(this, key); + map_pair_t *current; + for (current = this->list[idx]; current; current = current->next) { + if (strcmp(current->key, key) == 0) { + current->val = val; + return; + } + } + + map_pair_t *p = malloc(sizeof(map_pair_t)); + p->key = key; + p->val = val; + p->next = this->list[idx]; + this->list[idx] = p; + this->len++; + } }