1+ use super :: bindings:: tsk_size_t;
12use super :: bindings:: tsk_tree_t;
23use super :: flags:: TreeFlags ;
34use super :: tskbox:: TskBox ;
@@ -6,6 +7,7 @@ use super::TskitError;
67
78pub 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