Skip to content

Commit 440e22b

Browse files
committed
try to bring back branch length calcs
1 parent 59054b6 commit 440e22b

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

src/tree_interface.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ pub struct TreeInterface {
1515
num_nodes: tsk_size_t,
1616
array_len: tsk_size_t,
1717
flags: TreeFlags,
18+
nodes: crate::NodeTable,
1819
}
1920

2021
impl TreeInterface {
@@ -24,11 +25,16 @@ impl TreeInterface {
2425
array_len: tsk_size_t,
2526
flags: TreeFlags,
2627
) -> Self {
28+
let nodes = crate::NodeTable::new_from_table(
29+
&mut unsafe { *(*non_owned_pointer.as_ref().tree_sequence).tables }.nodes,
30+
)
31+
.expect("null pointer to tsk_node_table_t");
2732
Self {
2833
non_owned_pointer,
2934
num_nodes,
3035
array_len,
3136
flags,
37+
nodes,
3238
}
3339
}
3440

@@ -340,7 +346,7 @@ impl TreeInterface {
340346
/// Get the parent of node `u`.
341347
///
342348
/// Returns `None` if `u` is out of range.
343-
pub fn parent<N: Into<NodeId> + Copy>(&self, u: N) -> Option<NodeId> {
349+
pub fn parent<N: Into<NodeId> + Copy + std::fmt::Debug>(&self, u: N) -> Option<NodeId> {
344350
sys::tsk_column_access::<NodeId, _, _, _>(u.into(), self.as_ref().parent, self.array_len)
345351
}
346352

@@ -489,11 +495,8 @@ impl TreeInterface {
489495
/// (and the tree sequence from which it came).
490496
///
491497
/// This is a convenience function for accessing node times, etc..
492-
pub fn node_table(&self) -> crate::NodeTable {
493-
unimplemented!("this needs to return &NodeTable");
494-
// crate::NodeTable::new_from_table(unsafe {
495-
// &(*(*(*self.as_ptr()).tree_sequence).tables).nodes
496-
// })
498+
fn node_table(&self) -> &crate::NodeTable {
499+
&self.nodes
497500
}
498501

499502
/// Calculate the total length of the tree via a preorder traversal.

tests/book_trees.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,12 @@ fn initialize_from_table_collection() {
143143
}
144144
// ANCHOR_END: iterate_node_siblings_via_array_getters
145145

146+
let mut tree_iterator = treeseq.tree_iterator(TreeFlags::default()).unwrap();
147+
let mut total_branch_lengths = vec![];
148+
while let Some(tree) = tree_iterator.next() {
149+
total_branch_lengths.push(tree.total_branch_length(false).unwrap());
150+
}
151+
146152
// ANCHOR: iterate_edge_differences
147153
if let Ok(mut edge_diff_iterator) = treeseq.edge_differences_iter() {
148154
while let Some(diffs) = edge_diff_iterator.next() {

0 commit comments

Comments
 (0)