Skip to content

Commit 7a97808

Browse files
bors[bot]phimuemue
andauthored
Merge #439
439: Uniform type of `next` r=jswrenn a=phimuemue Yesterday I tried to play around and change the `Item` types of some iterators. I realized that we sometimes repeat these types (i.e. we have `type Item=X` and `fn next(&mut self) -> Option<X>`), requiring changes in two places if we want to change `Item`. We could avoid this and make implementations more uniform by changing the return type of `next` to `Self::Item`, which is done in this PR. Co-authored-by: philipp <[email protected]>
2 parents 448bbcf + 54c8864 commit 7a97808

14 files changed

+31
-31
lines changed

benches/fold_specialization.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ where I: Iterator
99
type Item = I::Item;
1010

1111
#[inline(always)]
12-
fn next(&mut self) -> Option<I::Item> {
12+
fn next(&mut self) -> Option<Self::Item> {
1313
self.0.next()
1414
}
1515

src/adaptors/mod.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ impl<I, J> Iterator for Interleave<I, J>
5656
{
5757
type Item = I::Item;
5858
#[inline]
59-
fn next(&mut self) -> Option<I::Item> {
59+
fn next(&mut self) -> Option<Self::Item> {
6060
self.flag = !self.flag;
6161
if self.flag {
6262
match self.a.next() {
@@ -113,7 +113,7 @@ impl<I, J> Iterator for InterleaveShortest<I, J>
113113
type Item = I::Item;
114114

115115
#[inline]
116-
fn next(&mut self) -> Option<I::Item> {
116+
fn next(&mut self) -> Option<Self::Item> {
117117
match self.phase {
118118
false => match self.it0.next() {
119119
None => None,
@@ -221,7 +221,7 @@ impl<I> Iterator for PutBack<I>
221221
{
222222
type Item = I::Item;
223223
#[inline]
224-
fn next(&mut self) -> Option<I::Item> {
224+
fn next(&mut self) -> Option<Self::Item> {
225225
match self.top {
226226
None => self.iter.next(),
227227
ref mut some => some.take(),
@@ -317,7 +317,7 @@ impl<I, J> Iterator for Product<I, J>
317317
{
318318
type Item = (I::Item, J::Item);
319319

320-
fn next(&mut self) -> Option<(I::Item, J::Item)> {
320+
fn next(&mut self) -> Option<Self::Item> {
321321
let elt_b = match self.b.next() {
322322
None => {
323323
self.b = self.b_orig.clone();
@@ -401,7 +401,7 @@ impl<B, F, I> Iterator for Batching<I, F>
401401
{
402402
type Item = B;
403403
#[inline]
404-
fn next(&mut self) -> Option<B> {
404+
fn next(&mut self) -> Option<Self::Item> {
405405
(self.f)(&mut self.iter)
406406
}
407407

@@ -448,7 +448,7 @@ impl<I> Iterator for Step<I>
448448
{
449449
type Item = I::Item;
450450
#[inline]
451-
fn next(&mut self) -> Option<I::Item> {
451+
fn next(&mut self) -> Option<Self::Item> {
452452
let elt = self.iter.next();
453453
if self.skip > 0 {
454454
self.iter.nth(self.skip - 1);
@@ -577,7 +577,7 @@ impl<I, J, F> Iterator for MergeBy<I, J, F>
577577
{
578578
type Item = I::Item;
579579

580-
fn next(&mut self) -> Option<I::Item> {
580+
fn next(&mut self) -> Option<Self::Item> {
581581
let less_than = match self.fused {
582582
Some(lt) => lt,
583583
None => match (self.a.peek(), self.b.peek()) {
@@ -689,7 +689,7 @@ impl<I, F> Iterator for Coalesce<I, F>
689689
{
690690
type Item = I::Item;
691691

692-
fn next(&mut self) -> Option<I::Item> {
692+
fn next(&mut self) -> Option<Self::Item> {
693693
self.iter.next_with(&mut self.f)
694694
}
695695

@@ -773,7 +773,7 @@ impl<I, Pred> Iterator for DedupBy<I, Pred>
773773
{
774774
type Item = I::Item;
775775

776-
fn next(&mut self) -> Option<I::Item> {
776+
fn next(&mut self) -> Option<Self::Item> {
777777
let ref mut dedup_pred = self.dedup_pred;
778778
self.iter.next_with(|x, y| {
779779
if dedup_pred.dedup_pair(&x, &y) { Ok(x) } else { Err((x, y)) }
@@ -905,7 +905,7 @@ impl<'a, I, F> Iterator for TakeWhileRef<'a, I, F>
905905
{
906906
type Item = I::Item;
907907

908-
fn next(&mut self) -> Option<I::Item> {
908+
fn next(&mut self) -> Option<Self::Item> {
909909
let old = self.iter.clone();
910910
match self.iter.next() {
911911
None => None,
@@ -946,7 +946,7 @@ impl<I, A> Iterator for WhileSome<I>
946946
{
947947
type Item = A;
948948

949-
fn next(&mut self) -> Option<A> {
949+
fn next(&mut self) -> Option<Self::Item> {
950950
match self.iter.next() {
951951
None | Some(None) => None,
952952
Some(elt) => elt,
@@ -1113,7 +1113,7 @@ impl<I, R> Iterator for MapInto<I, R>
11131113
{
11141114
type Item = R;
11151115

1116-
fn next(&mut self) -> Option<R> {
1116+
fn next(&mut self) -> Option<Self::Item> {
11171117
self.iter
11181118
.next()
11191119
.map(|i| i.into())

src/intersperse.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ impl<I> Iterator for Intersperse<I>
3838
{
3939
type Item = I::Item;
4040
#[inline]
41-
fn next(&mut self) -> Option<I::Item> {
41+
fn next(&mut self) -> Option<Self::Item> {
4242
if self.peek.is_some() {
4343
self.peek.take()
4444
} else {

src/multipeek_impl.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ impl<I> Iterator for MultiPeek<I>
8080
{
8181
type Item = I::Item;
8282

83-
fn next(&mut self) -> Option<I::Item> {
83+
fn next(&mut self) -> Option<Self::Item> {
8484
self.index = 0;
8585
self.buf.pop_front().or_else(|| self.iter.next())
8686
}

src/pad_tail.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ impl<I, F> Iterator for PadUsing<I, F>
3636
type Item = I::Item;
3737

3838
#[inline]
39-
fn next(&mut self) -> Option<I::Item> {
39+
fn next(&mut self) -> Option<Self::Item> {
4040
match self.iter.next() {
4141
None => {
4242
if self.pos < self.min {
@@ -64,7 +64,7 @@ impl<I, F> DoubleEndedIterator for PadUsing<I, F>
6464
where I: DoubleEndedIterator + ExactSizeIterator,
6565
F: FnMut(usize) -> I::Item
6666
{
67-
fn next_back(&mut self) -> Option<I::Item> {
67+
fn next_back(&mut self) -> Option<Self::Item> {
6868
if self.min == 0 {
6969
self.iter.next_back()
7070
} else if self.iter.len() >= self.min {

src/peek_nth.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ where
7777
{
7878
type Item = I::Item;
7979

80-
fn next(&mut self) -> Option<I::Item> {
80+
fn next(&mut self) -> Option<Self::Item> {
8181
self.buf.pop_front().or_else(|| self.iter.next())
8282
}
8383

src/put_back_n_impl.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ impl<I: Iterator> PutBackN<I> {
4747
impl<I: Iterator> Iterator for PutBackN<I> {
4848
type Item = I::Item;
4949
#[inline]
50-
fn next(&mut self) -> Option<I::Item> {
50+
fn next(&mut self) -> Option<Self::Item> {
5151
self.top.pop().or_else(|| self.iter.next())
5252
}
5353

src/rciter_impl.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ impl<A, I> Iterator for RcIter<I>
6060
{
6161
type Item = A;
6262
#[inline]
63-
fn next(&mut self) -> Option<A> {
63+
fn next(&mut self) -> Option<Self::Item> {
6464
self.rciter.borrow_mut().next()
6565
}
6666

@@ -78,7 +78,7 @@ impl<I> DoubleEndedIterator for RcIter<I>
7878
where I: DoubleEndedIterator
7979
{
8080
#[inline]
81-
fn next_back(&mut self) -> Option<I::Item> {
81+
fn next_back(&mut self) -> Option<Self::Item> {
8282
self.rciter.borrow_mut().next_back()
8383
}
8484
}

src/sources.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ impl<A, F> Iterator for RepeatCall<F>
5252
type Item = A;
5353

5454
#[inline]
55-
fn next(&mut self) -> Option<A> {
55+
fn next(&mut self) -> Option<Self::Item> {
5656
Some((self.f)())
5757
}
5858

@@ -128,7 +128,7 @@ impl<A, St, F> Iterator for Unfold<St, F>
128128
type Item = A;
129129

130130
#[inline]
131-
fn next(&mut self) -> Option<A> {
131+
fn next(&mut self) -> Option<Self::Item> {
132132
(self.f)(&mut self.state)
133133
}
134134

src/tee.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ impl<I> Iterator for Tee<I>
3939
I::Item: Clone
4040
{
4141
type Item = I::Item;
42-
fn next(&mut self) -> Option<I::Item> {
42+
fn next(&mut self) -> Option<Self::Item> {
4343
// .borrow_mut may fail here -- but only if the user has tied some kind of weird
4444
// knot where the iterator refers back to itself.
4545
let mut buffer = self.rcbuffer.borrow_mut();

src/tuple_impl.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ impl<I, T> Iterator for Tuples<I, T>
103103
{
104104
type Item = T;
105105

106-
fn next(&mut self) -> Option<T> {
106+
fn next(&mut self) -> Option<Self::Item> {
107107
T::collect_from_iter(&mut self.iter, &mut self.buf)
108108
}
109109
}
@@ -173,7 +173,7 @@ impl<I, T> Iterator for TupleWindows<I, T>
173173
{
174174
type Item = T;
175175

176-
fn next(&mut self) -> Option<T> {
176+
fn next(&mut self) -> Option<Self::Item> {
177177
if T::num_items() == 1 {
178178
return T::collect_from_iter_no_buf(&mut self.iter)
179179
}
@@ -224,7 +224,7 @@ impl<I, T> Iterator for CircularTupleWindows<I, T>
224224
{
225225
type Item = T;
226226

227-
fn next(&mut self) -> Option<T> {
227+
fn next(&mut self) -> Option<Self::Item> {
228228
self.iter.next()
229229
}
230230
}

src/unique_impl.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ impl<I, V, F> Iterator for UniqueBy<I, V, F>
5454
{
5555
type Item = I::Item;
5656

57-
fn next(&mut self) -> Option<I::Item> {
57+
fn next(&mut self) -> Option<Self::Item> {
5858
while let Some(v) = self.iter.next() {
5959
let key = (self.f)(&v);
6060
if self.used.insert(key, ()).is_none() {
@@ -98,7 +98,7 @@ impl<I> Iterator for Unique<I>
9898
{
9999
type Item = I::Item;
100100

101-
fn next(&mut self) -> Option<I::Item> {
101+
fn next(&mut self) -> Option<Self::Item> {
102102
while let Some(v) = self.iter.iter.next() {
103103
if let Entry::Vacant(entry) = self.iter.used.entry(v) {
104104
let elt = entry.key().clone();

tests/specializations.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ where
1111
type Item = I::Item;
1212

1313
#[inline(always)]
14-
fn next(&mut self) -> Option<I::Item> {
14+
fn next(&mut self) -> Option<Self::Item> {
1515
self.0.next()
1616
}
1717

tests/test_std.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ fn trait_pointers() {
230230
I: 'r + Iterator<Item=X>
231231
{
232232
type Item = X;
233-
fn next(&mut self) -> Option<X>
233+
fn next(&mut self) -> Option<Self::Item>
234234
{
235235
self.0.next()
236236
}

0 commit comments

Comments
 (0)