From: David Given Date: Fri, 16 Dec 2016 20:00:47 +0000 (+0100) Subject: Expand the graph and set APIs. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=5c940cc9d165c2040d5bc46a029429bf19029eee;p=ack.git Expand the graph and set APIs. --- diff --git a/modules/src/data/bigraph.c b/modules/src/data/bigraph.c index cc8440b3f..1e6a84151 100644 --- a/modules/src/data/bigraph.c +++ b/modules/src/data/bigraph.c @@ -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); diff --git a/modules/src/data/bigraph.h b/modules/src/data/bigraph.h index ff6f420a9..673d4364f 100644 --- a/modules/src/data/bigraph.h +++ b/modules/src/data/bigraph.h @@ -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); diff --git a/modules/src/data/set.c b/modules/src/data/set.c index 9c0a87a76..4a437d8f2 100644 --- a/modules/src/data/set.c +++ b/modules/src/data/set.c @@ -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) diff --git a/modules/src/data/set.h b/modules/src/data/set.h index 998e0035c..7cce54f24 100644 --- a/modules/src/data/set.h +++ b/modules/src/data/set.h @@ -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);