Files
libpostal/src/graph_builder.h

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