aboutsummaryrefslogtreecommitdiff
path: root/src/common/libkogata/keyval.c
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2016-07-15 23:12:14 +0200
committerAlex Auvolat <alex@adnab.me>2016-07-15 23:12:14 +0200
commit32407e728971006ed3d0885e01c22fb66c8adc57 (patch)
tree89483d39e8e2638383f815d4e73b647334fe2fe9 /src/common/libkogata/keyval.c
parentba4e59a1d687173ac5cfa74d26d71d6059dc6bc6 (diff)
downloadkogata-32407e728971006ed3d0885e01c22fb66c8adc57.tar.gz
kogata-32407e728971006ed3d0885e01c22fb66c8adc57.zip
Move stuff around, again
Diffstat (limited to 'src/common/libkogata/keyval.c')
-rw-r--r--src/common/libkogata/keyval.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/common/libkogata/keyval.c b/src/common/libkogata/keyval.c
new file mode 100644
index 0000000..9541c72
--- /dev/null
+++ b/src/common/libkogata/keyval.c
@@ -0,0 +1,51 @@
+#include <string.h>
+
+#include <kogata/malloc.h>
+#include <kogata/algo.h>
+
+// Hashing and comparing
+
+hash_t id_hash_fun(const void* v) {
+ return (hash_t)v;
+}
+
+hash_t str_hash_fun(const void* v) {
+ hash_t h = 712;
+ for (char* s = (char*)v; *s != 0; s++) {
+ h = h * 101 + *s;
+ }
+ return h;
+}
+
+bool id_key_eq_fun(const void* a, const void* b) {
+ return a == b;
+}
+
+bool str_key_eq_fun(const void* a, const void* b) {
+ return strcmp((const char*)a, (const char*)b) == 0;
+}
+
+int id_key_cmp_fun(const void* a, const void* b) {
+ return (a == b ? 0 : (a < b ? -1 : 1));
+}
+
+int str_key_cmp_fun(const void* a, const void* b) {
+ return strcmp((const char*)a, (const char*)b);
+}
+
+// Freeing functions
+
+void free_key(void* key, void* val) {
+ free(key);
+}
+
+void free_val(void* key, void* val) {
+ free(val);
+}
+
+void free_key_val(void* key, void* val) {
+ free(key);
+ free(val);
+}
+
+/* vim: set ts=4 sw=4 tw=0 noet :*/