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 unsigned tmp = src_index;
23 src_index = tgt_index;
27 pbqp_node *src_node = get_node(pbqp, src_index);
29 assert(get_node(pbqp, tgt_index));
31 len = ARR_LEN(src_node->edges);
33 for (i = 0; i < len; ++i) {
34 pbqp_edge *cur_edge = src_node->edges[i];
35 if (cur_edge->tgt->index == tgt_index) {
43 pbqp *alloc_pbqp(unsigned number_nodes)
45 pbqp* pbqp = xmalloc(sizeof(*pbqp));
47 obstack_init(&pbqp->obstack);
50 pbqp->num_nodes = number_nodes;
51 pbqp->dump_file = NULL;
52 pbqp->nodes = obstack_alloc(&pbqp->obstack, number_nodes
53 * sizeof(*pbqp->nodes));
54 memset(pbqp->nodes, 0, number_nodes * sizeof(*pbqp->nodes));
59 void free_pbqp(pbqp *pbqp)
61 obstack_free(&pbqp->obstack, NULL);
65 void add_node_costs(pbqp *pbqp, unsigned node_index, vector *costs)
67 pbqp_node *node = get_node(pbqp, node_index);
70 node = alloc_node(pbqp, node_index, costs);
71 pbqp->nodes[node_index] = node;
73 vector_add(node->costs, costs);
77 void add_edge_costs(pbqp *pbqp, unsigned src_index, unsigned tgt_index,
80 pbqp_edge *edge = get_edge(pbqp, src_index, tgt_index);
83 edge = alloc_edge(pbqp, src_index, tgt_index, costs);
85 pbqp_matrix_add(edge->costs, costs);
89 num get_node_solution(pbqp *pbqp, unsigned node_index)
91 pbqp_node *node = get_node(pbqp, node_index);
94 return node->solution;
97 num get_solution(pbqp *pbqp)
99 return pbqp->solution;
102 void set_dumpfile(pbqp *pbqp, FILE *f)