diff --git a/nested/src/sequence/mod.rs b/nested/src/sequence/mod.rs index 42f7f9e..7bc8849 100644 --- a/nested/src/sequence/mod.rs +++ b/nested/src/sequence/mod.rs @@ -19,6 +19,40 @@ pub trait SequenceView : View { //<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>> +pub trait SequenceViewExt : SequenceView { + fn iter<'a>(&'a self) -> SequenceViewIter<'a, Self> { + SequenceViewIter { + view: self, + cur: 0 + } + } +} + +impl SequenceViewExt for V {} + +//<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>> + +pub struct SequenceViewIter<'a, V> +where V: SequenceView + ?Sized +{ + view: &'a V, + cur: usize +} + +impl<'a, V> Iterator for SequenceViewIter<'a, V> +where V: SequenceView + ?Sized +{ + type Item = V::Item; + + fn next(&mut self) -> Option { + let i = self.cur; + self.cur += 1; + self.view.get(&i) + } +} + +//<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>> + use std::{ sync::Arc, ops::{Deref}