24
24
}
25
25
26
26
/// Turns an iterator of references into a streaming iterator.
27
+ ///
28
+ /// ```
29
+ /// # use streaming_iterator::{StreamingIterator, convert_ref};
30
+ /// let scores = vec![100, 50, 80];
31
+ /// let mut streaming_iter = convert_ref(&scores);
32
+ /// while let Some(score) = streaming_iter.next() {
33
+ /// println!("The score is: {}", score);
34
+ /// }
35
+ /// ```
27
36
#[ inline]
28
37
pub fn convert_ref < ' a , I , T : ?Sized > ( iterator : I ) -> ConvertRef < ' a , I :: IntoIter , T >
29
38
where
36
45
}
37
46
38
47
/// Creates an empty iterator.
48
+ ///
49
+ /// ```
50
+ /// # use streaming_iterator::StreamingIterator;
51
+ /// let mut streaming_iter = streaming_iterator::empty::<i32>();
52
+ /// assert_eq!(streaming_iter.next(), None);
53
+ /// ```
39
54
#[ inline]
40
55
pub fn empty < T > ( ) -> Empty < T > {
41
56
Empty {
@@ -44,12 +59,32 @@ pub fn empty<T>() -> Empty<T> {
44
59
}
45
60
46
61
/// Creates an iterator that returns items from a function call.
62
+ ///
63
+ /// ```
64
+ /// # use streaming_iterator::StreamingIterator;
65
+ /// let mut count = 0;
66
+ /// let mut streaming_iter = streaming_iterator::from_fn(|| {
67
+ /// count += 1;
68
+ /// if count < 4 { Some(count) } else { None }
69
+ /// });
70
+ /// assert_eq!(streaming_iter.next(), Some(&1));
71
+ /// assert_eq!(streaming_iter.next(), Some(&2));
72
+ /// assert_eq!(streaming_iter.next(), Some(&3));
73
+ /// assert_eq!(streaming_iter.next(), None);
74
+ /// ```
47
75
#[ inline]
48
76
pub fn from_fn < T , F : FnMut ( ) -> Option < T > > ( gen : F ) -> FromFn < T , F > {
49
77
FromFn { gen, item : None }
50
78
}
51
79
52
80
/// Creates an iterator that returns exactly one item.
81
+ ///
82
+ /// ```
83
+ /// # use streaming_iterator::StreamingIterator;
84
+ /// let mut streaming_iter = streaming_iterator::once(1);
85
+ /// assert_eq!(streaming_iter.next(), Some(&1));
86
+ /// assert_eq!(streaming_iter.next(), None);
87
+ /// ```
53
88
#[ inline]
54
89
pub fn once < T > ( item : T ) -> Once < T > {
55
90
Once {
@@ -59,6 +94,15 @@ pub fn once<T>(item: T) -> Once<T> {
59
94
}
60
95
61
96
/// Creates an iterator that returns exactly one item from a function call.
97
+ ///
98
+ /// ```
99
+ /// # use streaming_iterator::StreamingIterator;
100
+ /// #[derive(Debug, PartialEq)]
101
+ /// struct Expensive(i32);
102
+ /// let mut streaming_iter = streaming_iterator::once_with(|| Expensive(1));
103
+ /// assert_eq!(streaming_iter.next(), Some(&Expensive(1)));
104
+ /// assert_eq!(streaming_iter.next(), None);
105
+ /// ```
62
106
#[ inline]
63
107
pub fn once_with < T , F : FnOnce ( ) -> T > ( gen : F ) -> OnceWith < T , F > {
64
108
OnceWith {
@@ -68,18 +112,56 @@ pub fn once_with<T, F: FnOnce() -> T>(gen: F) -> OnceWith<T, F> {
68
112
}
69
113
70
114
/// Creates an iterator that returns an item endlessly.
115
+ ///
116
+ /// ```
117
+ /// # use streaming_iterator::StreamingIterator;
118
+ /// let mut streaming_iter = streaming_iterator::repeat(1);
119
+ /// assert_eq!(streaming_iter.next(), Some(&1));
120
+ /// assert_eq!(streaming_iter.next(), Some(&1));
121
+ /// assert_eq!(streaming_iter.next(), Some(&1));
122
+ /// assert_eq!(streaming_iter.next(), Some(&1));
123
+ /// assert_eq!(streaming_iter.next(), Some(&1));
124
+ /// // ...
125
+ /// ```
71
126
#[ inline]
72
127
pub fn repeat < T > ( item : T ) -> Repeat < T > {
73
128
Repeat { item }
74
129
}
75
130
76
131
/// Creates an iterator that endlessly returns items from a function call.
132
+ ///
133
+ /// ```
134
+ /// # use streaming_iterator::StreamingIterator;
135
+ /// let mut count = 0;
136
+ /// let mut streaming_iter = streaming_iterator::repeat_with(|| {
137
+ /// count += 1;
138
+ /// count
139
+ /// });
140
+ /// assert_eq!(streaming_iter.next(), Some(&1));
141
+ /// assert_eq!(streaming_iter.next(), Some(&2));
142
+ /// assert_eq!(streaming_iter.next(), Some(&3));
143
+ /// assert_eq!(streaming_iter.next(), Some(&4));
144
+ /// assert_eq!(streaming_iter.next(), Some(&5));
145
+ /// // ...
146
+ /// ```
77
147
#[ inline]
78
148
pub fn repeat_with < T , F : FnMut ( ) -> T > ( gen : F ) -> RepeatWith < T , F > {
79
149
RepeatWith { gen, item : None }
80
150
}
81
151
82
152
/// Creates an iterator where each successive item is computed from the preceding one.
153
+ ///
154
+ /// ```
155
+ /// # use streaming_iterator::StreamingIterator;
156
+ /// let mut streaming_iter = streaming_iterator::successors(
157
+ /// Some(1),
158
+ /// |count| if count < 3 { Some(count + 1) } else { None },
159
+ /// );
160
+ /// assert_eq!(streaming_iter.next(), Some(&1));
161
+ /// assert_eq!(streaming_iter.next(), Some(&2));
162
+ /// assert_eq!(streaming_iter.next(), Some(&3));
163
+ /// assert_eq!(streaming_iter.next(), None);
164
+ /// ```
83
165
#[ inline]
84
166
pub fn successors < T , F : FnMut ( T ) -> Option < T > > ( first : Option < T > , succ : F ) -> Successors < T , F > {
85
167
Successors {
0 commit comments