File tree Expand file tree Collapse file tree 1 file changed +35
-0
lines changed
Expand file tree Collapse file tree 1 file changed +35
-0
lines changed Original file line number Diff line number Diff line change 11use crate :: sys:: bindings as ll_bindings;
22use crate :: sys:: { LLTree , TreeSequence } ;
3+ use crate :: NodeId ;
34use crate :: Position ;
45use crate :: TreeFlags ;
56use crate :: TskitError ;
@@ -61,6 +62,40 @@ impl<'treeseq> Tree<'treeseq> {
6162 self . inner . as_ref ( ) . interval . right . into ( ) ,
6263 )
6364 }
65+
66+ /// # Failing examples
67+ ///
68+ /// An error will be returned if ['crate::TreeFlags::SAMPLE_LISTS`] is not used:
69+ ///
70+ /// ```should_panic
71+ /// use streaming_iterator::StreamingIterator;
72+ /// let tables = tskit::TableCollection::new(1.).unwrap();
73+ /// let treeseq =
74+ /// tables.tree_sequence(tskit::TreeSequenceFlags::BUILD_INDEXES).unwrap();
75+ /// let mut tree_iter = treeseq.tree_iterator(tskit::TreeFlags::default()).unwrap(); // ERROR
76+ /// while let Some(tree) = tree_iter.next() {
77+ /// let s = tree.samples_array().unwrap();
78+ /// for _ in s {}
79+ /// }
80+ /// ```
81+ ///
82+ /// The lifetime of the slice is tied to the parent object:
83+ ///
84+ /// ```compile_fail
85+ /// use streaming_iterator::StreamingIterator;
86+ /// let tables = tskit::TableCollection::new(1.).unwrap();
87+ /// let treeseq =
88+ /// tables.tree_sequence(tskit::TreeSequenceFlags::BUILD_INDEXES).unwrap();
89+ /// let mut tree_iter = treeseq.tree_iterator(tskit::TreeFlags::SAMPLE_LISTS).unwrap();
90+ /// while let Some(tree) = tree_iter.next() {
91+ /// let s = tree.samples_array().unwrap();
92+ /// drop(tree_iter);
93+ /// for _ in s {} // ERROR
94+ /// }
95+ /// ```
96+ pub fn samples_array ( & self ) -> Result < & [ NodeId ] , TskitError > {
97+ self . inner . samples_array ( )
98+ }
6499}
65100
66101impl < ' ts > streaming_iterator:: StreamingIterator for Tree < ' ts > {
You can’t perform that action at this time.
0 commit comments