aboutsummaryrefslogtreecommitdiff
path: root/src/shared/util/hashmap.hpp
diff options
context:
space:
mode:
authorAlexander Pickering <alex@cogarr.net>2018-06-28 16:05:26 -0600
committerAlexander Pickering <alex@cogarr.net>2018-06-28 16:05:26 -0600
commitef25a513437196a3ea9ee45e6e03565eb86067d2 (patch)
treeacd43d214f9a7ec96e7fcd66097fd13593dd8f38 /src/shared/util/hashmap.hpp
parent2260a1dda8693664c77a03781ae07fbb5f0ea8a0 (diff)
downloadbrokengine-ef25a513437196a3ea9ee45e6e03565eb86067d2.tar.gz
brokengine-ef25a513437196a3ea9ee45e6e03565eb86067d2.tar.bz2
brokengine-ef25a513437196a3ea9ee45e6e03565eb86067d2.zip
Simplified makefile
Made makefile much simpiler, added option to build dynamically with DEBUG=true
Diffstat (limited to 'src/shared/util/hashmap.hpp')
-rw-r--r--src/shared/util/hashmap.hpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/shared/util/hashmap.hpp b/src/shared/util/hashmap.hpp
new file mode 100644
index 0000000..16c76dd
--- /dev/null
+++ b/src/shared/util/hashmap.hpp
@@ -0,0 +1,81 @@
+/*
+ * Generic hashmap manipulation functions
+ *
+ * Originally by Elliot C Back - http://elliottback.com/wp/hashmap-implementation-in-c/
+ *
+ * Modified by Pete Warden to fix a serious performance problem, support strings as keys
+ * and removed thread synchronization - http://petewarden.typepad.com
+ */
+#ifndef __HASHMAP_H__
+#define __HASHMAP_H__
+
+#define MAP_MISSING -3 /* No such element */
+#define MAP_FULL -2 /* Hashmap is full */
+#define MAP_OMEM -1 /* Out of Memory */
+#define MAP_OK 0 /* OK */
+
+/*
+ * any_t is a pointer. This allows you to put arbitrary structures in
+ * the hashmap.
+ */
+typedef void *any_t;
+
+/*
+ * PFany is a pointer to a function that can take two any_t arguments
+ * and return an integer. Returns status code..
+ */
+typedef int (*PFany)(any_t, any_t);
+
+/*
+ * map_t is a pointer to an internally maintained data structure.
+ * Clients of this package do not need to know how hashmaps are
+ * represented. They see and manipulate only map_t's.
+ */
+typedef any_t map_t;
+
+/*
+ * Return an empty hashmap. Returns NULL if empty.
+*/
+extern map_t hashmap_new();
+
+/*
+ * Iteratively call f with argument (item, data) for
+ * each element data in the hashmap. The function must
+ * return a map status code. If it returns anything other
+ * than MAP_OK the traversal is terminated. f must
+ * not reenter any hashmap functions, or deadlock may arise.
+ */
+extern int hashmap_iterate(map_t in, PFany f, any_t item);
+
+/*
+ * Add an element to the hashmap. Return MAP_OK or MAP_OMEM.
+ */
+extern int hashmap_put(map_t in, char* key, any_t value);
+
+/*
+ * Get an element from the hashmap. Return MAP_OK or MAP_MISSING.
+ */
+extern int hashmap_get(map_t in, char* key, any_t *arg);
+
+/*
+ * Remove an element from the hashmap. Return MAP_OK or MAP_MISSING.
+ */
+extern int hashmap_remove(map_t in, char* key);
+
+/*
+ * Get any element. Return MAP_OK or MAP_MISSING.
+ * remove - should the element be removed from the hashmap
+ */
+extern int hashmap_get_one(map_t in, any_t *arg, int remove);
+
+/*
+ * Free the hashmap
+ */
+extern void hashmap_free(map_t in);
+
+/*
+ * Get the current size of a hashmap
+ */
+extern int hashmap_length(map_t in);
+
+#endif //__HASHMAP_H__