Expand the graph and set APIs.
authorDavid Given <dg@cowlark.com>
Fri, 16 Dec 2016 20:00:47 +0000 (21:00 +0100)
committerDavid Given <dg@cowlark.com>
Fri, 16 Dec 2016 20:00:47 +0000 (21:00 +0100)
modules/src/data/bigraph.c
modules/src/data/bigraph.h
modules/src/data/set.c
modules/src/data/set.h

index cc8440b..1e6a841 100644 (file)
@@ -99,6 +99,17 @@ static struct edgenode** find_edgep(struct vertex* v1, struct vertex* v2)
     return ep;
 }
 
+bool graph_contains_edge(struct graph* g, void* data1, void* data2)
+{
+    struct vertex* v1 = find_or_add_vertex(g, data1);
+    struct vertex* v2 = find_or_add_vertex(g, data2);
+
+       if (!v1 || !v2)
+               return false;
+
+       return *find_edgep(v1, v2) || *find_edgep(v2, v1);
+}
+
 static struct edgenode* add_edge(struct vertex* v1, struct vertex* v2)
 {
     struct edgenode** ep = find_edgep(v1, v2);
index ff6f420..673d436 100644 (file)
@@ -35,6 +35,7 @@ extern void graph_reset(struct graph* g);
 extern bool graph_contains_vertex(struct graph* g, void* data);
 extern void graph_add_vertex(struct graph* g, void* data);
 extern void graph_remove_vertex(struct graph* g, void* data);
+extern bool graph_contains_edge(struct graph* g, void* data1, void* data2);
 extern void graph_add_edge(struct graph* g, void* data1, void* data2);
 extern void graph_remove_edge(struct graph* g, void* data1, void* data2);
 extern int graph_get_vertex_degree(struct graph* g, void* data);
index 9c0a87a..4a437d8 100644 (file)
@@ -8,9 +8,9 @@ void set_reset(struct set* s)
        hashtable_reset(&s->table);
 }
 
-void set_add(struct set* s, void* item)
+bool set_add(struct set* s, void* item)
 {
-       hashtable_put(&s->table, item, item);
+       return hashtable_put(&s->table, item, item);
 }
 
 bool set_remove(struct set* s, void* item)
index 998e003..7cce54f 100644 (file)
@@ -12,7 +12,7 @@ struct set
 
 extern void set_reset(struct set* s);
 
-extern void set_add(struct set* s, void* item);
+extern bool set_add(struct set* s, void* item);
 extern bool set_remove(struct set* s, void* item);
 extern bool set_contains(struct set* s, void* item);
 extern void* set_pop(struct set* s);