Skip to content

Commit

Permalink
Trial changes to tree positioning
Browse files Browse the repository at this point in the history
  • Loading branch information
duncanMR committed Feb 8, 2024
1 parent 10858fa commit 6f7e74b
Show file tree
Hide file tree
Showing 2 changed files with 0 additions and 144 deletions.
140 changes: 0 additions & 140 deletions c/tskit/trees.c
Original file line number Diff line number Diff line change
Expand Up @@ -5708,146 +5708,6 @@ tsk_tree_prev(tsk_tree_t *self)
return ret;
}

static int
tsk_tree_advance_tree_pos(tsk_tree_t *self, int direction)
{
int ret = 0;
tsk_id_t e, j;
const tsk_table_collection_t *tables = self->tree_sequence->tables;
const tsk_id_t *restrict edge_parent = tables->edges.parent;
const tsk_id_t *restrict edge_child = tables->edges.child;
bool valid;

valid = tsk_tree_position_step(&self->tree_pos, direction);

if (valid) {
for (j = self->tree_pos.out.start; j != self->tree_pos.out.stop;
j += direction) {
e = self->tree_pos.out.order[j];
tsk_tree_remove_edge(self, edge_parent[e], edge_child[e]);
}

for (j = self->tree_pos.in.start; j != self->tree_pos.in.stop; j += direction) {
e = self->tree_pos.in.order[j];
tsk_tree_insert_edge(self, edge_parent[e], edge_child[e], e);
}
}

self->index = self->tree_pos.index;
if (tables->sites.num_rows > 0) {
self->sites = self->tree_sequence->tree_sites[self->index];
self->sites_length = self->tree_sequence->tree_sites_length[self->index];
}
self->direction = direction;
self->interval.left = self->tree_pos.interval.left;
self->interval.right = self->tree_pos.interval.right;
self->index = self->tree_pos.index;

tsk_bug_assert(self->interval.left < self->interval.right);
ret = TSK_TREE_OK;
return ret;
}

int TSK_WARN_UNUSED
tsk_tree_first_tree_pos(tsk_tree_t *self)
{
int ret = TSK_TREE_OK;
tsk_table_collection_t *tables = self->tree_sequence->tables;

self->interval.left = 0;
self->index = 0;
self->interval.right = tables->sequence_length;
self->sites = self->tree_sequence->tree_sites[0];
self->sites_length = self->tree_sequence->tree_sites_length[0];

if (tables->edges.num_rows > 0) {
/* TODO this is redundant if this is the first usage of the tree. We
* should add a state machine here so we know what state the tree is
* in and can take the appropriate actions.
*/
ret = tsk_tree_clear(self);
if (ret != 0) {
goto out;
}
self->index = -1;
self->left_index = 0;
self->right_index = 0;
self->direction = TSK_DIR_FORWARD;
self->interval.right = 0;

ret = tsk_tree_advance_tree_pos(self, TSK_DIR_FORWARD);
}
out:
return ret;
}

int TSK_WARN_UNUSED
tsk_tree_last_tree_pos(tsk_tree_t *self)
{
int ret = TSK_TREE_OK;
const tsk_treeseq_t *ts = self->tree_sequence;
const tsk_table_collection_t *tables = ts->tables;

self->interval.left = 0;
self->interval.right = tables->sequence_length;
self->index = 0;
self->sites = ts->tree_sites[0];
self->sites_length = ts->tree_sites_length[0];

if (tables->edges.num_rows > 0) {
/* TODO this is redundant if this is the first usage of the tree. We
* should add a state machine here so we know what state the tree is
* in and can take the appropriate actions.
*/
ret = tsk_tree_clear(self);
if (ret != 0) {
goto out;
}
self->index = (tsk_id_t) tsk_treeseq_get_num_trees(ts);
self->left_index = (tsk_id_t) tables->edges.num_rows - 1;
self->right_index = (tsk_id_t) tables->edges.num_rows - 1;
self->direction = TSK_DIR_REVERSE;
self->interval.left = tables->sequence_length;
self->interval.right = 0;

ret = tsk_tree_advance_tree_pos(self, TSK_DIR_REVERSE);
}
out:
return ret;
}

int TSK_WARN_UNUSED
tsk_tree_next_tree_pos(tsk_tree_t *self)
{
int ret = 0;
const tsk_treeseq_t *ts = self->tree_sequence;
tsk_id_t num_trees = (tsk_id_t) tsk_treeseq_get_num_trees(ts);

if (self->index == -1) {
ret = tsk_tree_first_tree_pos(self);
} else if (self->index < num_trees - 1) {
ret = tsk_tree_advance_tree_pos(self, TSK_DIR_FORWARD);
} else {
ret = tsk_tree_clear(self);
}
return ret;
}

int TSK_WARN_UNUSED
tsk_tree_prev_tree_pos(tsk_tree_t *self)
{
int ret = 0;

if (self->index == -1) {
ret = tsk_tree_last_tree_pos(self);
} else if (self->index > 0) {
ret = tsk_tree_advance_tree_pos(self, TSK_DIR_REVERSE);
} else {
ret = tsk_tree_clear(self);
}
return ret;
}

static inline bool
tsk_tree_position_in_interval(const tsk_tree_t *self, double x)
{
Expand Down
4 changes: 0 additions & 4 deletions c/tskit/trees.h
Original file line number Diff line number Diff line change
Expand Up @@ -1853,10 +1853,6 @@ bool tsk_tree_position_prev(tsk_tree_position_t *self);
bool tsk_tree_position_step(tsk_tree_position_t *self, int direction);
int tsk_tree_position_seek_forward(tsk_tree_position_t *self, tsk_id_t index);
int tsk_tree_position_seek_backward(tsk_tree_position_t *self, tsk_id_t index);
int tsk_tree_next_tree_pos(tsk_tree_t *self);
int tsk_tree_prev_tree_pos(tsk_tree_t *self);
int tsk_tree_first_tree_pos(tsk_tree_t *self);
int tsk_tree_last_tree_pos(tsk_tree_t *self);

#ifdef __cplusplus
}
Expand Down

0 comments on commit 6f7e74b

Please sign in to comment.