Skip to content

Commit

Permalink
factor out append
Browse files Browse the repository at this point in the history
  • Loading branch information
petrelharp committed Aug 4, 2023
1 parent 8a7c84f commit eb1fe32
Showing 1 changed file with 20 additions and 23 deletions.
43 changes: 20 additions & 23 deletions c/tskit/tables.c
Original file line number Diff line number Diff line change
Expand Up @@ -12893,22 +12893,31 @@ typedef struct _edge_list_t {
struct _edge_list_t *next;
} edge_list_t;

static edge_list_t *TSK_WARN_UNUSED
extend_edges_alloc_entry(tsk_blkalloc_t *heap, tsk_id_t edge)
static int
extend_edges_append_entry(
edge_list_t **head, edge_list_t **tail, tsk_blkalloc_t *heap, tsk_id_t edge)
{
int ret = 0;
edge_list_t *x = NULL;

x = tsk_blkalloc_get(heap, sizeof(*x));
if (x == NULL) {
ret = TSK_ERR_NO_MEMORY;
goto out;
}
tsk_bug_assert(edge >= 0);

x->edge = edge;
x->extended = false;
x->next = NULL;

if (*tail == NULL) {
*head = x;
} else {
(*tail)->next = x;
}
*tail = x;
out:
return x;
return ret;
}

static void
Expand Down Expand Up @@ -12953,7 +12962,7 @@ forward_extend(tsk_table_collection_t *self, int direction)
tsk_blkalloc_t edge_list_heap;
edge_list_t *edges_in_head, *edges_in_tail;
edge_list_t *edges_out_head, *edges_out_tail;
edge_list_t *x, *y, *ex1, *ex2, *ex_in;
edge_list_t *ex1, *ex2, *ex_in;
tsk_edge_table_t edges;
tsk_edge_t edge;
double sign, here, there;
Expand Down Expand Up @@ -13021,36 +13030,24 @@ forward_extend(tsk_table_collection_t *self, int direction)

while (((tk < M) && (tk >= 0)) && (far_side[O[tk]] == here)) {
// add edge tk to pending_out
x = extend_edges_alloc_entry(&edge_list_heap, O[tk]);
if (x == NULL) {
ret = extend_edges_append_entry(
&edges_out_head, &edges_out_tail, &edge_list_heap, O[tk]);
if (ret != 0) {
ret = TSK_ERR_NO_MEMORY;
goto out;
}
if (edges_out_tail == NULL) {
edges_out_head = x;
} else {
y = edges_out_tail;
y->next = x;
}
edges_out_tail = x;
num_children[edges.parent[O[tk]]] -= 1;
num_children[edges.child[O[tk]]] -= 1;
tk += sign_int;
}
while (((tj < M) && (tj >= 0)) && (near_side[I[tj]] == here)) {
// add edge tj to pending_in
x = extend_edges_alloc_entry(&edge_list_heap, I[tj]);
if (x == NULL) {
ret = extend_edges_append_entry(
&edges_in_head, &edges_in_tail, &edge_list_heap, I[tj]);
if (ret != 0) {
ret = TSK_ERR_NO_MEMORY;
goto out;
}
if (edges_in_tail == NULL) {
edges_in_head = x;
} else {
y = edges_in_tail;
y->next = x;
}
edges_in_tail = x;
num_children[edges.parent[I[tj]]] += 1;
num_children[edges.child[I[tj]]] += 1;
tj += sign_int;
Expand Down

0 comments on commit eb1fe32

Please sign in to comment.