From 7a9aac1ae3f7b836ddb314636d6f50d8ad7ec5d2 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 1 Aug 2023 12:05:22 -0600 Subject: [PATCH] [graph] Fixes to parent handling --- src/graph/graph.hh | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/graph/graph.hh b/src/graph/graph.hh index 2b89b9996..e464d1746 100644 --- a/src/graph/graph.hh +++ b/src/graph/graph.hh @@ -199,6 +199,7 @@ struct graph_t void add_parent (unsigned parent_index) { + assert (parent_index != (unsigned) -1); if (incoming_edges_ == 0) { single_parent = parent_index; @@ -207,12 +208,19 @@ struct graph_t } else if (single_parent != (unsigned) -1) { + assert (incoming_edges_ == 1); if (!parents.set (single_parent, 1)) return; single_parent = (unsigned) -1; } - if (parents.set (parent_index, parents[parent_index] + 1)) + unsigned *v; + if (parents.has (parent_index, &v)) + { + (*v)++; + incoming_edges_++; + } + else if (parents.set (parent_index, 1)) incoming_edges_++; } @@ -230,7 +238,7 @@ struct graph_t { incoming_edges_--; if (*v > 1) - *v -= 1; + (*v)--; else parents.del (parent_index); @@ -284,10 +292,11 @@ struct graph_t return; } - if (parents.has (old_index)) + unsigned *v; + if (parents.has (old_index, &v)) { - remove_parent (old_index); - add_parent (new_index); + if (parents.set (new_index, *v)) + parents.del (old_index); } }