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);
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);
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)
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);