6 #include "pbqp_edge_t.h"
8 #include "pbqp_node_t.h"
11 pbqp_node *get_node(pbqp *pbqp, unsigned index)
13 return pbqp->nodes[index];
16 pbqp_edge *get_edge(pbqp *pbqp, unsigned src_index, unsigned tgt_index)
21 if (tgt_index < src_index) {
22 return get_edge(pbqp, tgt_index, src_index);
25 pbqp_node *src_node = get_node(pbqp, src_index);
27 assert(get_node(pbqp, tgt_index));
29 len = ARR_LEN(src_node->edges);
31 for (i = 0; i < len; ++i) {
32 pbqp_edge *cur_edge = src_node->edges[i];
33 if (cur_edge->tgt == tgt_index) {
41 pbqp *alloc_pbqp(unsigned number_nodes)
43 pbqp* pbqp = xmalloc(sizeof(*pbqp));
45 obstack_init(&pbqp->obstack);
48 pbqp->num_nodes = number_nodes;
49 pbqp->nodes = obstack_alloc(&pbqp->obstack, number_nodes
50 * sizeof(*pbqp->nodes));
55 void free_pbqp(pbqp *pbqp)
57 obstack_free(&pbqp->obstack, NULL);
61 void add_node_costs(pbqp *pbqp, unsigned node_index, vector *costs)
63 pbqp_node *node = get_node(pbqp, node_index);
66 node = alloc_node(pbqp, node_index, costs);
67 pbqp->nodes[node_index] = node;
69 vector_add(node->costs, costs);
73 void add_edge_costs(pbqp *pbqp, unsigned src_index, unsigned tgt_index,
76 pbqp_edge *edge = get_edge(pbqp, src_index, tgt_index);
79 edge = alloc_edge(pbqp, src_index, tgt_index, costs);
81 pbqp_matrix_add(edge->costs, costs);
85 num get_solution(pbqp *pbqp)
87 return pbqp->solution;
90 void set_dumpfile(pbqp *pbqp, FILE *f)