aboutsummaryrefslogtreecommitdiffstats
path: root/lib/hashmap
diff options
context:
space:
mode:
Diffstat (limited to '')
m---------lib/hashmap0
-rw-r--r--lib/hashmap/hashmap.c69
-rw-r--r--lib/hashmap/hashmap.h38
3 files changed, 107 insertions, 0 deletions
diff --git a/lib/hashmap b/lib/hashmap
deleted file mode 160000
-Subproject 1c139923fe08f36143ecc0ba37cd674684f87f9
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
n> 2015-01-26Describe the web page indicators too.Gravatar Christoph Lohmann 1-0/+1 2015-01-26It wasn't really clear what was meant with site indicators in the manpage.Gravatar Christoph Lohmann 1-0/+1 2015-01-26surf: documented indicators in man pageGravatar Greg Reagle 1-0/+50 2015-01-20fix stylesheet interna.Gravatar Markus Teich 1-19/+12 2015-01-20Only plumb some URI, when it's ASCII.Gravatar Christoph Lohmann 1-1/+10 2015-01-20Oh my blob!Gravatar Christoph Lohmann 1-0/+1 2015-01-19Data: is part of the browser too.Gravatar Christoph Lohmann 1-0/+1 2015-01-19file:// should be handled in surf too.Gravatar Christoph Lohmann 1-0/+1 2015-01-19Remove the debugging from the testing.Gravatar Christoph Lohmann 1-1/+0 2015-01-19Add some description for the plumb feature.Gravatar Christoph Lohmann 1-0/+3 2015-01-19Add plumbing functionality.Gravatar Christoph Lohmann 2-2/+28 2015-01-18Add a comment about how the styles are iterated.Gravatar Christoph Lohmann 1-0/+4 2015-01-18My CMD was too short. :OGravatar Christoph Lohmann 1-1/+1 2015-01-17Add the manpage changes for the disk cache support.Gravatar Christoph Lohmann 1-1/+7 2015-01-17Adding disk cache support for soup.Gravatar Christoph Lohmann 2-9/+40 2015-01-17Fix extra newline, and add -g where other switches are forwarded.Gravatar Ben Woolley 1-1/+3 2015-01-17Newer libc want _DEFAULT_SOURCE.Gravatar Christoph Lohmann 1-1/+1 2015-01-17Major styles update.Gravatar Christoph Lohmann 3-11/+84 2015-01-02Fix a typo in surf manual.Gravatar Jakukyo Friel 1-1/+1 2014-09-28Minor style change.Gravatar Christoph Lohmann 1-1/+1 2014-09-28Make »Copy image address« work.Gravatar Christoph Lohmann 1-3/+10 2014-08-07Mention xdotool in SEE ALSO too.Gravatar Christoph Lohmann 1-1/+2 2014-08-07Fix the manpage about xid.Gravatar Christoph Lohmann 1-1/+3