From 15de5dc2c5d82e816cd9c0a7c56b7e1d4165717f Mon Sep 17 00:00:00 2001 From: Tucker Evans Date: Mon, 6 Jul 2020 20:50:38 -0400 Subject: Add index function for maps --- collections/map/map.adoc | 20 +++++++++++++++++++- collections/map/map.c | 19 +++++++++++++++++++ collections/map/map.h | 1 + 3 files changed, 39 insertions(+), 1 deletion(-) (limited to 'collections') diff --git a/collections/map/map.adoc b/collections/map/map.adoc index 2822b79..da0ebaf 100644 --- a/collections/map/map.adoc +++ b/collections/map/map.adoc @@ -1,7 +1,7 @@ Map === Tucker Evans -v0.4, 2020-07-06 +v0.5, 2020-07-06 A basic map implemented in an AVL tree. @@ -113,6 +113,24 @@ free(map_reset_key(dict "ONE")); assert(map_insert(dict, "ONE", "NEW_VALUE") == 0); ---- +[[map_index]] ++void* map_index(map *self, vaid *key)+ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Returns the value associated with +key+ (or equivalent). + +Examples +^^^^^^^^ +[source,c] +---- +#include "map.h" +#include + +map *dict = map_new((cmp_func) strcmp, sizeof(char*)); + +map_insert(dict, strdup("ONE"), "VALUE"); +assert(strcmp(map_index(dict, "ONE"), "VALUE") == 0); +---- + [[map_clear]] +void map_clear(map *self)+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/collections/map/map.c b/collections/map/map.c index 7de58e4..0600c8b 100644 --- a/collections/map/map.c +++ b/collections/map/map.c @@ -105,6 +105,25 @@ void *key; return tmp; } +void* map_index(root, key) +map *root; +void *key; +{ + int cmp; + if (!root || !key) + return NULL; + + cmp = root->cmp(root->key, key); + + if (cmp < 0) + return map_index(root->left, key); + + if (cmp > 0) + return map_index(root->right, key); + + return root->val; +} + void map_clear(root) map *root; { diff --git a/collections/map/map.h b/collections/map/map.h index a5fc816..d1a0012 100644 --- a/collections/map/map.h +++ b/collections/map/map.h @@ -13,6 +13,7 @@ int map_size(map*); /*data*/ int map_insert(map*, void*, void*); void* map_reset_key(map*, void*); +void* map_index(map*, void*); /*memory*/ void map_clear(map*); -- cgit v1.1