Skip to content

Commit 475058a

Browse files
committed
more infrastructure
1 parent 39e0374 commit 475058a

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

src/sys/tree.rs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use super::bindings::tsk_size_t;
12
use super::bindings::tsk_tree_t;
23
use super::flags::TreeFlags;
34
use super::tskbox::TskBox;
@@ -6,6 +7,7 @@ use super::TskitError;
67

78
pub struct LLTree<'treeseq> {
89
inner: TskBox<tsk_tree_t>,
10+
flags: TreeFlags,
911
// NOTE: this reference exists becaust tsk_tree_t
1012
// contains a NON-OWNING pointer to tsk_treeseq_t.
1113
// Thus, we could theoretically cause UB without
@@ -33,7 +35,25 @@ impl<'treeseq> LLTree<'treeseq> {
3335
return Err(TskitError::ErrorCode { code });
3436
}
3537
}
36-
Ok(Self { inner, treeseq })
38+
Ok(Self {
39+
inner,
40+
flags,
41+
treeseq,
42+
})
43+
}
44+
45+
pub fn num_samples(&self) -> tsk_size_t {
46+
assert!(self.as_ref().tree_sequence.is_null());
47+
// SAFETY: tree_sequence is not NULL
48+
// the tree_sequence is also initialized (unless unsafe code was used previously?)
49+
unsafe { crate::sys::bindings::tsk_treeseq_get_num_samples(self.as_ref().tree_sequence) }
50+
}
51+
52+
pub fn samples_array(&self) -> Result<&[super::newtypes::NodeId], TskitError> {
53+
err_if_not_tracking_samples!(
54+
self.flags,
55+
super::generate_slice(self.as_ref().samples, self.num_samples())
56+
)
3757
}
3858

3959
pub fn as_mut_ptr(&mut self) -> *mut tsk_tree_t {

0 commit comments

Comments
 (0)