From: David Given Date: Mon, 28 Nov 2016 22:38:01 +0000 (+0100) Subject: Add a routine for adding bidirectional edges to a graph. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=1b6e7e1bb660579479cef264205874730762f911;p=ack.git Add a routine for adding bidirectional edges to a graph. --- diff --git a/modules/src/data/pmap.c b/modules/src/data/pmap.c index fffba7e90..4ac38178a 100644 --- a/modules/src/data/pmap.c +++ b/modules/src/data/pmap.c @@ -57,6 +57,22 @@ void pmap_add(void* mapp, void* left, void* right) append(map, left, right); } +void pmap_add_bi(void* mapp, void* left, void* right) +{ + struct pmap* map = mapp; + int i; + + for (i=0; icount; i++) + { + struct pmap_node* node = &map->item[i]; + if (((node->left == left) && (node->right == right)) || + ((node->left == right) && (node->right == left))) + return; + } + + append(map, left, right); +} + void pmap_remove(void* mapp, void* left, void* right) { struct pmap* map = mapp; diff --git a/modules/src/data/pmap.h b/modules/src/data/pmap.h index a7980a3a3..ff43b6aa3 100644 --- a/modules/src/data/pmap.h +++ b/modules/src/data/pmap.h @@ -25,6 +25,7 @@ struct pmap 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_findleft(void* map, void* left); extern void* pmap_findright(void* map, void* right);