55 lines
1.2 KiB
C
55 lines
1.2 KiB
C
/*
|
|
graph_builder.h
|
|
---------------
|
|
|
|
For graphs it's sometimes impractical to assume that the vertices
|
|
will arrive in sorted order, which is required for constructing a
|
|
compressed sparse row (CSR) matrix. This is simply a coordinate matrix
|
|
(COO) style constructor where the rows/columns do not need to be
|
|
ordered or unique.
|
|
|
|
*/
|
|
|
|
#ifndef GRAPH_BUILDER_H
|
|
#define GRAPH_BUILDER_H
|
|
|
|
#include "collections.h"
|
|
#include "file_utils.h"
|
|
#include "graph.h"
|
|
|
|
|
|
typedef struct graph_edge {
|
|
uint32_t v1;
|
|
uint32_t v2;
|
|
} graph_edge_t;
|
|
|
|
VECTOR_INIT(graph_edge_array, graph_edge_t)
|
|
|
|
|
|
typedef struct graph_builder {
|
|
graph_type_t type;
|
|
size_t m;
|
|
size_t n;
|
|
bool fixed_rows;
|
|
graph_edge_array *edges;
|
|
} graph_builder_t;
|
|
|
|
graph_builder_t *graph_builder_new(graph_type_t type, bool fixed_rows);
|
|
void graph_builder_destroy(graph_builder_t *self);
|
|
|
|
/*
|
|
Destroy the builder and return a graph.
|
|
|
|
Note: remove_duplicates=true requires sorting the indices. Can only preserve
|
|
edge ordering if we can guarantee there are no duplicates.
|
|
*/
|
|
graph_t *graph_builder_finalize(graph_builder_t *self, bool sort_edges, bool remove_duplicates);
|
|
|
|
/*
|
|
Add an edge. Order
|
|
|
|
Reflexive edges not allowed.
|
|
*/
|
|
void graph_builder_add_edge(graph_builder_t *self, uint32_t v1, uint32_t v2);
|
|
|
|
#endif |