6 #include "pbqp_node_t.h"
7 #include "pbqp_edge_t.h"
10 pbqp_node *alloc_node(pbqp *pbqp, unsigned node_index, vector *costs)
12 pbqp_node *node = obstack_alloc(&pbqp->obstack, sizeof(*node));
15 node->edges = NEW_ARR_F(pbqp_edge *, 0);
16 node->costs = vector_copy(pbqp, costs);
17 node->bucket_index = UINT_MAX;
18 node->solution = UINT_MAX;
19 node->index = node_index;
24 int is_connected(pbqp_node *node, pbqp_edge *edge)
33 if (edge->src != node && edge->tgt != node) return 0;
36 edge_len = ARR_LEN(edges);
38 for (edge_index = 0; edge_index < edge_len; ++edge_index) {
39 pbqp_edge *edge_candidate = edges[edge_index];
40 if (edge_candidate == edge) {
48 void disconnect_edge(pbqp_node *node, pbqp_edge *edge)
55 edge_len = ARR_LEN(edges);
57 for (edge_index = 0; edge_index < edge_len; ++edge_index) {
58 pbqp_edge *edge_candidate = edges[edge_index];
59 if (edge_candidate == edge) {
60 edges[edge_index] = edges[edge_len - 1];
61 ARR_SHRINKLEN(edges, (int)edge_len - 1);
67 unsigned pbqp_node_get_degree(pbqp_node *node)
70 return ARR_LEN(node->edges);
73 pbqp_node *pbqp_node_deep_copy(pbqp *pbqp, pbqp_node *node)
76 unsigned edge_length = pbqp_node_get_degree(node);
77 pbqp_node *copy = obstack_alloc(&pbqp->obstack, sizeof(*node));
80 for (edge_index = 0; edge_index < edge_length; ++edge_index) {
81 copy->edges[edge_index] = pbqp_edge_deep_copy(node->edges[edge_index]);
83 copy->edges = NEW_ARR_F(pbqp_edge *, 0);
84 copy->costs = vector_copy(pbqp, node->costs);
85 copy->bucket_index = node->bucket_index;
86 copy->solution = node->solution;
87 copy->index = node->index;