Skip to content

Commit 2f02352

Browse files
committed
cool
1 parent 26f3af8 commit 2f02352

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

src/sys/tree.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,16 @@ impl<'treeseq> LLTree<'treeseq> {
265265
)
266266
}
267267

268+
pub fn next_sample_array(&self) -> Result<&[NodeId], TskitError> {
269+
err_if_not_tracking_samples!(
270+
self.flags,
271+
super::generate_slice(
272+
self.as_ll_ref().next_sample,
273+
self.treeseq.num_nodes_raw() + 1
274+
)
275+
)
276+
}
277+
268278
pub fn kc_distance(&self, other: &Self, lambda: f64) -> Result<f64, TskitError> {
269279
let mut kc = f64::NAN;
270280
let kcp: *mut f64 = &mut kc;

src/trees/tree.rs

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,8 +335,38 @@ impl<'treeseq> Tree<'treeseq> {
335335
self.inner.as_ll_ref()
336336
}
337337

338-
pub fn next_sample_array(&self) {
339-
X
338+
/// # Failing examples
339+
///
340+
/// An error will be returned if ['crate::TreeFlags::SAMPLE_LISTS`] is not used:
341+
///
342+
/// ```should_panic
343+
/// use streaming_iterator::StreamingIterator;
344+
/// let tables = tskit::TableCollection::new(1.).unwrap();
345+
/// let treeseq =
346+
/// tables.tree_sequence(tskit::TreeSequenceFlags::BUILD_INDEXES).unwrap();
347+
/// let mut tree_iter = treeseq.tree_iterator(tskit::TreeFlags::default()).unwrap(); // ERROR
348+
/// while let Some(tree) = tree_iter.next() {
349+
/// let n = tree.next_sample_array().unwrap();
350+
/// for _ in n {}
351+
/// }
352+
/// ```
353+
///
354+
/// The lifetime of the slice is tied to the parent object:
355+
///
356+
/// ```compile_fail
357+
/// use streaming_iterator::StreamingIterator;
358+
/// let tables = tskit::TableCollection::new(1.).unwrap();
359+
/// let treeseq =
360+
/// tables.tree_sequence(tskit::TreeSequenceFlags::BUILD_INDEXES).unwrap();
361+
/// let mut tree_iter = treeseq.tree_iterator(tskit::TreeFlags::SAMPLE_LISTS).unwrap();
362+
/// while let Some(tree) = tree_iter.next() {
363+
/// let n = tree.next_sample_array().unwrap();
364+
/// drop(tree_iter);
365+
/// for _ in n {} // ERROR
366+
/// }
367+
/// ```
368+
pub fn next_sample_array(&self) -> Result<&[NodeId], TskitError> {
369+
self.inner.next_sample_array()
340370
}
341371

342372
/// # Failing examples

0 commit comments

Comments
 (0)