From 829fa6da11920f2052f719809b617c3c7eef273f Mon Sep 17 00:00:00 2001 From: David Given Date: Tue, 6 Dec 2016 00:12:41 +0100 Subject: [PATCH] Add pmap_remove_either(). --- modules/src/data/pmap.c | 16 ++++++++++++++++ modules/src/data/pmap.h | 1 + 2 files changed, 17 insertions(+) diff --git a/modules/src/data/pmap.c b/modules/src/data/pmap.c index 4ac38178a..a74febcff 100644 --- a/modules/src/data/pmap.c +++ b/modules/src/data/pmap.c @@ -90,6 +90,22 @@ void pmap_remove(void* mapp, void* left, void* right) } } +void pmap_remove_either(void* mapp, void* either) +{ + struct pmap* map = mapp; + int i; + + for (i=map->count-1; i>=0; i--) + { + struct pmap_node* node = &map->item[i]; + if ((node->left == either) || (node->right == either)) + { + memmove(node, node+1, sizeof(*node) * (map->count - i - 1)); + map->count--; + } + } +} + void* pmap_findleft(void* mapp, void* left) { struct pmap* map = mapp; diff --git a/modules/src/data/pmap.h b/modules/src/data/pmap.h index ff43b6aa3..c9939dc77 100644 --- a/modules/src/data/pmap.h +++ b/modules/src/data/pmap.h @@ -27,6 +27,7 @@ extern void pmap_put(void* map, void* left, void* right); extern void pmap_add(void* map, void* left, void* right); extern void pmap_add_bi(void* map, void* left, void* right); extern void pmap_remove(void* map, void* left, void* right); +extern void pmap_remove_either(void* map, void* either); extern void* pmap_findleft(void* map, void* left); extern void* pmap_findright(void* map, void* right); -- 2.34.1