From 811453d2fb29f5d584f1c2a31ccca9e2f8135e36 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 2 Aug 2023 22:11:23 -0700 Subject: [PATCH] only have one edge table around --- c/tskit/tables.c | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/c/tskit/tables.c b/c/tskit/tables.c index c6107fb9ba..202c283c7d 100644 --- a/c/tskit/tables.c +++ b/c/tskit/tables.c @@ -12420,6 +12420,10 @@ forward_extend(tsk_table_collection_t *self, int direction) if (ret != 0) { goto out; } + ret = tsk_edge_table_clear(&self->edges); + if (ret != 0) { + goto out; + } ret = tsk_blkalloc_init(&edge_list_heap, 8192); if (ret != 0) { @@ -12431,8 +12435,8 @@ forward_extend(tsk_table_collection_t *self, int direction) here = 0; sign = 1; sign_int = 1; - near_side = self->edges.left; - far_side = self->edges.right; + near_side = edges.left; + far_side = edges.right; tj = 0; tk = 0; } else { @@ -12441,12 +12445,11 @@ forward_extend(tsk_table_collection_t *self, int direction) here = self->sequence_length; sign = -1; sign_int = -1; - near_side = self->edges.right; - far_side = self->edges.left; + near_side = edges.right; + far_side = edges.left; tj = M - 1; tk = M - 1; } - left = 0; edges_in_head = NULL; edges_in_tail = NULL; edges_out_head = NULL; @@ -12470,8 +12473,8 @@ forward_extend(tsk_table_collection_t *self, int direction) y->next = x; } edges_out_tail = x; - num_edges[self->edges.parent[O[tk]]] -= 1; - num_edges[self->edges.child[O[tk]]] -= 1; + num_edges[edges.parent[O[tk]]] -= 1; + num_edges[edges.child[O[tk]]] -= 1; tk += sign_int; } while (((tj < M) && (tj >= 0)) && (near_side[I[tj]] == here)) { @@ -12488,8 +12491,8 @@ forward_extend(tsk_table_collection_t *self, int direction) y->next = x; } edges_in_tail = x; - num_edges[self->edges.parent[I[tj]]] += 1; - num_edges[self->edges.child[I[tj]]] += 1; + num_edges[edges.parent[I[tj]]] += 1; + num_edges[edges.child[I[tj]]] += 1; tj += sign_int; } there = forwards ? self->sequence_length : 0; @@ -12516,16 +12519,14 @@ forward_extend(tsk_table_collection_t *self, int direction) for (ex2 = edges_out_head; ex2 != NULL; ex2 = ex2->next) { if (!ex2->extended) { e2 = ex2->edge; - if ((self->edges.parent[e1] == self->edges.child[e2]) - && (num_edges[self->edges.child[e2]] == 0)) { + if ((edges.parent[e1] == edges.child[e2]) + && (num_edges[edges.child[e2]] == 0)) { for (ex_in = edges_in_head; ex_in != NULL; ex_in = ex_in->next) { e_in = ex_in->edge; if (sign * far_side[e_in] > sign * here) { - if ((self->edges.child[e1] - == self->edges.child[e_in]) - && (self->edges.parent[e2] - == self->edges.parent[e_in])) { + if ((edges.child[e1] == edges.child[e_in]) + && (edges.parent[e2] == edges.parent[e_in])) { ex1->extended = true; ex2->extended = true; ex_in->extended = true; @@ -12538,7 +12539,7 @@ forward_extend(tsk_table_collection_t *self, int direction) edges.left[e2] = there; edges.right[e_in] = there; } - num_edges[self->edges.parent[e1]] += 2; + num_edges[edges.parent[e1]] += 2; } } } @@ -12552,10 +12553,6 @@ forward_extend(tsk_table_collection_t *self, int direction) } // done! write out new edge tables - ret = tsk_edge_table_clear(&self->edges); - if (ret != 0) { - goto out; - } for (tj = 0; tj < (tsk_id_t) edges.num_rows; tj++) { tsk_edge_table_get_row_unsafe(&edges, tj, &edge); if (edge.left < edge.right) {