Add a routine for adding bidirectional edges to a graph.
authorDavid Given <dg@cowlark.com>
Mon, 28 Nov 2016 22:38:01 +0000 (23:38 +0100)
committerDavid Given <dg@cowlark.com>
Mon, 28 Nov 2016 22:38:01 +0000 (23:38 +0100)
modules/src/data/pmap.c
modules/src/data/pmap.h

index fffba7e..4ac3817 100644 (file)
@@ -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; i<map->count; 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;
index a7980a3..ff43b6a 100644 (file)
@@ -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);