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->index == 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->dump_file = NULL;
50 pbqp->nodes = obstack_alloc(&pbqp->obstack, number_nodes
51 * sizeof(*pbqp->nodes));
52 memset(pbqp->nodes, 0, number_nodes * sizeof(*pbqp->nodes));
57 void free_pbqp(pbqp *pbqp)
59 obstack_free(&pbqp->obstack, NULL);
63 void add_node_costs(pbqp *pbqp, unsigned node_index, vector *costs)
65 pbqp_node *node = get_node(pbqp, node_index);
68 node = alloc_node(pbqp, node_index, costs);
69 pbqp->nodes[node_index] = node;
71 vector_add(node->costs, costs);
75 void add_edge_costs(pbqp *pbqp, unsigned src_index, unsigned tgt_index,
78 pbqp_edge *edge = get_edge(pbqp, src_index, tgt_index);
81 edge = alloc_edge(pbqp, src_index, tgt_index, costs);
83 pbqp_matrix_add(edge->costs, costs);
87 num get_node_solution(pbqp *pbqp, unsigned node_index)
89 pbqp_node *node = get_node(pbqp, node_index);
92 return node->solution;
95 num get_solution(pbqp *pbqp)
97 return pbqp->solution;
100 void set_dumpfile(pbqp *pbqp, FILE *f)