Added function to reorder nodes after an edge insertion.
authorSebastian Buchwald <Sebastian.Buchwald@kit.edu>
Mon, 16 Aug 2010 07:49:39 +0000 (07:49 +0000)
committerSebastian Buchwald <Sebastian.Buchwald@kit.edu>
Mon, 16 Aug 2010 07:49:39 +0000 (07:49 +0000)
[r27932]

optimal.c
optimal.h

index c4ea1c1..1660114 100644 (file)
--- 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;
index 43fd5e7..8b4a0d3 100644 (file)
--- 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);