File tree Expand file tree Collapse file tree 2 files changed +42
-2
lines changed
Expand file tree Collapse file tree 2 files changed +42
-2
lines changed Original file line number Diff line number Diff 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;
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments