diff options
| author | 2024-09-09 16:17:08 -0400 | |
|---|---|---|
| committer | 2024-09-09 16:17:08 -0400 | |
| commit | 521316d09b39a410d7e797efa176371e31a3a57e (patch) | |
| tree | bb0c6bb5a9df1280fceb483983e2328ee87c0da0 /lib | |
| parent | bugfix to inline backspace and delete on multiline buffer (diff) | |
add aliasing to init.lua
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/hashmap/hashmap.c | 69 | ||||
| -rw-r--r-- | lib/hashmap/hashmap.h | 38 |
2 files changed, 107 insertions, 0 deletions
diff --git a/lib/hashmap/hashmap.c b/lib/hashmap/hashmap.c new file mode 100644 index 0000000..cfc112c --- /dev/null +++ b/lib/hashmap/hashmap.c @@ -0,0 +1,69 @@ +/* +Copyright (c) 2024, Lance Borden +All rights reserved. + +This software is licensed under the BSD 3-Clause License. +You may obtain a copy of the license at: +https://opensource.org/licenses/BSD-3-Clause + +Redistribution and use in source and binary forms, with or without +modification, are permitted under the conditions stated in the BSD 3-Clause +License. + +THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTIES, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +*/ + +#include "hashmap.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +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++; +} diff --git a/lib/hashmap/hashmap.h b/lib/hashmap/hashmap.h new file mode 100644 index 0000000..d5775c5 --- /dev/null +++ b/lib/hashmap/hashmap.h @@ -0,0 +1,38 @@ +/* +Copyright (c) 2024, Lance Borden +All rights reserved. + +This software is licensed under the BSD 3-Clause License. +You may obtain a copy of the license at: +https://opensource.org/licenses/BSD-3-Clause + +Redistribution and use in source and binary forms, with or without +modification, are permitted under the conditions stated in the BSD 3-Clause +License. + +THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTIES, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +*/ + +#ifndef HASHMAP_H +#define HASHMAP_H + +typedef struct pair { + char *key; + char *val; + struct pair *next; +} map_pair_t; + +typedef struct { + map_pair_t **list; + unsigned int cap; + unsigned int len; +} hashmap_t; + +hashmap_t *hm_new_hashmap(); +unsigned int hm_hashcode(hashmap_t *this, char *key); +char *hm_get(hashmap_t *this, char *key); +void hm_set(hashmap_t *this, char *key, char *val); + +#endif // HASHMAP_H |
