4 #include "pbqp_edge_t.h"
6 #include "pbqp_node_t.h"
9 pbqp_node *get_node(pbqp *pbqp, int index)
11 return pbqp->nodes[index];
14 pbqp_edge *get_edge(pbqp *pbqp, int src_index, int tgt_index)
19 if (src_index < tgt_index) {
20 return get_edge(pbqp, tgt_index, src_index);
23 pbqp_node *src_node = get_node(pbqp, src_index);
25 pbqp_node *tgt_node = get_node(pbqp, tgt_index);
28 len = ARR_LEN(src_node->edges);
30 for (i = 0; i < len; ++i) {
31 pbqp_edge *cur_edge = src_node->edges[i];
32 if (cur_edge->tgt == tgt_node) {
40 pbqp *alloc_pbqp(int number_nodes)
42 pbqp* pbqp = xmalloc(sizeof(*pbqp));
44 obstack_init(&pbqp->obstack);
47 pbqp->num_nodes = number_nodes;
48 pbqp->nodes = obstack_alloc(&pbqp->obstack, number_nodes
49 * sizeof(*pbqp->nodes));
54 void free_pbqp(pbqp *pbqp)
56 obstack_free(&pbqp->obstack, NULL);
60 void add_node_costs(pbqp *pbqp, int node_index, vector *costs)
62 pbqp_node *node = get_node(pbqp, node_index);
65 node = alloc_node(pbqp, costs);
67 vector_add(node->costs, costs);
71 void add_edge_costs(pbqp *pbqp, int src_index, int tgt_index, matrix *costs)
73 pbqp_edge *edge = get_edge(pbqp, src_index, tgt_index);
76 edge = alloc_edge(pbqp, src_index, tgt_index, costs);
78 matrix_add(edge->costs, costs);