X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=pbqp_node.c;h=f20954f0426cbf2678e5dc975fbbb3ebd006c8b8;hb=4a0403e066651b474eb3a0d1ee106bb0a7f228b7;hp=160425d8cf868e4b1c59af2ce2cd4b8681d774cc;hpb=b1ca465591d6c8e6bf323b3d80b6b75ae2ee593e;p=libfirm diff --git a/pbqp_node.c b/pbqp_node.c index 160425d8c..f20954f04 100644 --- a/pbqp_node.c +++ b/pbqp_node.c @@ -4,19 +4,47 @@ #include "pbqp_node.h" #include "pbqp_node_t.h" +#include "pbqp_edge_t.h" #include "vector.h" -pbqp_node *alloc_node(pbqp *pbqp, vector *costs) +pbqp_node *alloc_node(pbqp *pbqp, unsigned node_index, vector *costs) { pbqp_node *node = obstack_alloc(&pbqp->obstack, sizeof(*node)); assert(node); node->edges = NEW_ARR_F(pbqp_edge *, 0); node->costs = vector_copy(pbqp, costs); + node->bucket_index = UINT_MAX; + node->solution = UINT_MAX; + node->index = node_index; return node; } +int is_connected(pbqp_node *node, pbqp_edge *edge) +{ + pbqp_edge **edges; + unsigned edge_index; + unsigned edge_len; + + assert(node); + assert(edge); + + if (edge->src != node && edge->tgt != node) return 0; + + edges = node->edges; + edge_len = ARR_LEN(edges); + + for (edge_index = 0; edge_index < edge_len; ++edge_index) { + pbqp_edge *edge_candidate = edges[edge_index]; + if (edge_candidate == edge) { + return 1; + } + } + + return 0; +} + void disconnect_edge(pbqp_node *node, pbqp_edge *edge) { pbqp_edge **edges;