From f652c23fbc61dec9db48c6e745edca5a12b655bb Mon Sep 17 00:00:00 2001 From: Tucker Evans Date: Mon, 6 Jul 2020 15:36:34 -0400 Subject: Add structs/typedefs for maps --- collections/map/map.adoc | 32 ++++++++++++++++++++++++++++++++ collections/map/map.c | 11 +++++++++++ collections/map/map.h | 7 +++++++ 3 files changed, 50 insertions(+) create mode 100644 collections/map/map.adoc create mode 100644 collections/map/map.c create mode 100644 collections/map/map.h diff --git a/collections/map/map.adoc b/collections/map/map.adoc new file mode 100644 index 0000000..a43ae1d --- /dev/null +++ b/collections/map/map.adoc @@ -0,0 +1,32 @@ +Map +=== +Tucker Evans +v0.0, 2020-07-06 + +A basic map implemented in an AVL tree. + +NOTE: Keys are passed as void pointers and their data is not copied (this +should be handled by the user), they should not be freed without clearing the +map. + +NOTE: There is currently no way to distinquish between a failed retrieval +(pop, index, back, etc.) and returning a NULL value. Keep this in mind if +you plan on storing NULL values in the vector, there are plans to fix this in +the future. + +Types +---- +The following types are defined in the header file: +[[map]] ++map+ +~~~~~ +This structure holds all internal information regarding a map. +All functions (except constructors) expect a pointer to this struct as their +first parameter. + +[[cmp_func]] ++cmp_func+ +~~~~~~~~~~~ +This is a pointer to a function that to compare keys from pointers. This +typedef is provided to cast comparison functions as a map expects the +comparison function to take void* as its parameters. diff --git a/collections/map/map.c b/collections/map/map.c new file mode 100644 index 0000000..21af21c --- /dev/null +++ b/collections/map/map.c @@ -0,0 +1,11 @@ +#include "map.h" + +#include +#include + +struct map_node { + void *key, *val; + cmp_func cmp; + + struct map_node *left, *right, *parent; +}; diff --git a/collections/map/map.h b/collections/map/map.h new file mode 100644 index 0000000..a760b45 --- /dev/null +++ b/collections/map/map.h @@ -0,0 +1,7 @@ +#ifndef MAP_H +#define MAP_H + +typedef struct map_node map; +typedef int (*cmp_func)(void*, void*); + +#endif -- cgit v1.1