Skip to content

Commit f274fa5

Browse files
committed
more
1 parent 475058a commit f274fa5

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

src/trees/tree.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::sys::bindings as ll_bindings;
22
use crate::sys::{LLTree, TreeSequence};
3+
use crate::NodeId;
34
use crate::Position;
45
use crate::TreeFlags;
56
use 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

66101
impl<'ts> streaming_iterator::StreamingIterator for Tree<'ts> {

0 commit comments

Comments
 (0)