diff options
Diffstat (limited to 'collections/map/map.c')
-rw-r--r-- | collections/map/map.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/collections/map/map.c b/collections/map/map.c index 83a446d..7de58e4 100644 --- a/collections/map/map.c +++ b/collections/map/map.c @@ -82,6 +82,29 @@ void *key, *val; return 0; } +void* map_reset_key(root, key) +map *root; +void *key; +{ + void *tmp; + int cmp; + + if (!root || !key) + return NULL; + + cmp = root->cmp(root->key, key); + + if (cmp < 0) + return map_reset_key(root->left, key); + + if (cmp > 0) + return map_reset_key(root->right, key); + + tmp = root->key; + root->key = key; + return tmp; +} + void map_clear(root) map *root; { |