From 88489a7266baca73a15ddf98444662c396b244da Mon Sep 17 00:00:00 2001 From: Sebastian Buchwald Date: Mon, 16 Aug 2010 07:49:39 +0000 Subject: [PATCH] Added function to reorder nodes after an edge insertion. [r27932] --- optimal.c | 18 ++++++++++++++++++ optimal.h | 1 + 2 files changed, 19 insertions(+) diff --git a/optimal.c b/optimal.c index c4ea1c106..166011495 100644 --- a/optimal.c +++ b/optimal.c @@ -638,6 +638,24 @@ void reorder_node_after_edge_deletion(pbqp_node *node) node_bucket_insert(&node_buckets[degree], node); } +void reorder_node_after_edge_insertion(pbqp_node *node) +{ + unsigned degree = pbqp_node_get_degree(node); + /* Assume node lost one incident edge. */ + unsigned old_degree = degree - 1; + + if (!buckets_filled) return; + + /* Same bucket as before */ + if (old_degree > 2) return; + + /* Delete node from old bucket... */ + node_bucket_remove(&node_buckets[old_degree], node); + + /* ..and add to new one. */ + node_bucket_insert(&node_buckets[degree], node); +} + void simplify_edge(pbqp *pbqp, pbqp_edge *edge) { pbqp_matrix *mat; diff --git a/optimal.h b/optimal.h index 43fd5e7ee..8b4a0d3c6 100644 --- a/optimal.h +++ b/optimal.h @@ -50,6 +50,7 @@ void initial_simplify_edges(pbqp *pbqp); void select_alternative(pbqp_node *node, unsigned selected_index); void simplify_edge(pbqp *pbqp, pbqp_edge *edge); void reorder_node_after_edge_deletion(pbqp_node *node); +void reorder_node_after_edge_insertion(pbqp_node *node); int node_is_reduced(pbqp_node *node); -- 2.20.1