diff options
| author | Tucker Evans <tucker@tuckerevans.com> | 2020-07-06 20:50:38 -0400 | 
|---|---|---|
| committer | Tucker Evans <tucker@tuckerevans.com> | 2020-07-08 11:03:54 -0400 | 
| commit | 15de5dc2c5d82e816cd9c0a7c56b7e1d4165717f (patch) | |
| tree | 5b8a61fc0978046b6f3107c7454cd690845d81e0 /collections | |
| parent | 7d69ea177200bda62b403eb9ead6eee2ba5abe52 (diff) | |
Add index function for maps
Diffstat (limited to 'collections')
| -rw-r--r-- | collections/map/map.adoc | 20 | ||||
| -rw-r--r-- | collections/map/map.c | 19 | ||||
| -rw-r--r-- | collections/map/map.h | 1 | 
3 files changed, 39 insertions, 1 deletions
| 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 <string.h> + +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*); | 
