From cf427c05b05e0409cfdeb6bc30b69070dd1700c3 Mon Sep 17 00:00:00 2001 From: Tucker Evans Date: Mon, 6 Jul 2020 15:39:08 -0400 Subject: Add constructor for maps --- collections/map/map.adoc | 22 +++++++++++++++++++++- collections/map/map.c | 16 ++++++++++++++++ collections/map/map.h | 3 +++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/collections/map/map.adoc b/collections/map/map.adoc index a43ae1d..fc6b8b7 100644 --- a/collections/map/map.adoc +++ b/collections/map/map.adoc @@ -1,7 +1,7 @@ Map === Tucker Evans -v0.0, 2020-07-06 +v0.1, 2020-07-06 A basic map implemented in an AVL tree. @@ -30,3 +30,23 @@ first parameter. 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. + +Functions +--------- +[[map_new]] ++map_new(cmp_func cmp)+ +~~~~~~~~~~~~~~~~~~~~~~~ +Constructs an empty map. ++cmp+ should be a function that takes two pointers (+lhs+, +rhs+)to your value +type and returns (int) a negative value if +lhs+ is less than +rhs+, zero if ++lhs+ is equal to +rhs+, and positive value if +lhs+ is greater than +rhs+. + +Examples +^^^^^^^^ +[source,c] +---- +#include "map.h" +#include + +map *dict = map_new((cmp_func) strcmp); +---- diff --git a/collections/map/map.c b/collections/map/map.c index 21af21c..803b5ad 100644 --- a/collections/map/map.c +++ b/collections/map/map.c @@ -1,7 +1,9 @@ #include "map.h" #include +#include #include +#include struct map_node { void *key, *val; @@ -9,3 +11,17 @@ struct map_node { struct map_node *left, *right, *parent; }; + +map* map_new(cmp) +cmp_func cmp; +{ + map *tmp; + + tmp = malloc(sizeof(map)); + assert(tmp); + + tmp->cmp = cmp; + tmp->key = tmp->val = tmp->left = tmp->right = tmp->parent = NULL; + + return tmp; +} diff --git a/collections/map/map.h b/collections/map/map.h index a760b45..8aad2f4 100644 --- a/collections/map/map.h +++ b/collections/map/map.h @@ -4,4 +4,7 @@ typedef struct map_node map; typedef int (*cmp_func)(void*, void*); +/*constructors*/ +map* map_new(cmp_func); + #endif -- cgit v1.1