Skip to content

Commit 9347756

Browse files
committed
Remove deprecated Range::step_by (use Iterator::step_by instead)
Follow-up to rust-lang#41439 (comment) While doing so, remove the now-unused `step`, `steps_between`, and `is_negative` methods from `Step`. Mostly simple, but needed two interesting changes: * Override `Iterator::size_hint` for `iter::StepBy` (so hints aren't lost) * Override `Iterator::size_hint` for `ops::RangeFrom` (so `(0..).size_hint()` returns what `(0..).step_by(1).size_hint()` used to) (It turns out that `(0..).step_by(d)` is used in a bunch of tests, from `cycle` to `vec_deque`.) Incidentally fixes rust-lang#41477
1 parent 0bd9e1f commit 9347756

File tree

12 files changed

+95
-350
lines changed

12 files changed

+95
-350
lines changed

src/doc/unstable-book/src/SUMMARY.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,6 @@
199199
- [sort_internals](library-features/sort-internals.md)
200200
- [sort_unstable](library-features/sort-unstable.md)
201201
- [splice](library-features/splice.md)
202-
- [step_by](library-features/step-by.md)
203202
- [step_trait](library-features/step-trait.md)
204203
- [str_checked_slicing](library-features/str-checked-slicing.md)
205204
- [str_escape](library-features/str-escape.md)

src/doc/unstable-book/src/library-features/step-by.md

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/libcollections/tests/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#![feature(placement_in_syntax)]
2222
#![feature(rand)]
2323
#![feature(splice)]
24-
#![feature(step_by)]
24+
#![feature(iterator_step_by)]
2525
#![feature(str_escape)]
2626
#![feature(test)]
2727
#![feature(unboxed_closures)]

src/libcore/iter/iterator.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,10 @@ pub trait Iterator {
130130
///
131131
/// ```
132132
/// // an infinite iterator has no upper bound
133+
/// // and the maximum possible lower bound
133134
/// let iter = 0..;
134135
///
135-
/// assert_eq!((0, None), iter.size_hint());
136+
/// assert_eq!((usize::max_value(), None), iter.size_hint());
136137
/// ```
137138
#[inline]
138139
#[stable(feature = "rust1", since = "1.0.0")]

src/libcore/iter/mod.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -311,9 +311,6 @@ pub use self::iterator::Iterator;
311311
reason = "likely to be replaced by finer-grained traits",
312312
issue = "27741")]
313313
pub use self::range::Step;
314-
#[unstable(feature = "step_by", reason = "recent addition",
315-
issue = "27741")]
316-
pub use self::range::StepBy as DeprecatedStepBy;
317314

318315
#[stable(feature = "rust1", since = "1.0.0")]
319316
pub use self::sources::{Repeat, repeat};
@@ -553,6 +550,19 @@ impl<I> Iterator for StepBy<I> where I: Iterator {
553550
self.iter.nth(self.step)
554551
}
555552
}
553+
554+
#[inline]
555+
fn size_hint(&self) -> (usize, Option<usize>) {
556+
let inner_hint = self.iter.size_hint();
557+
558+
if self.first_take {
559+
let f = |n| if n == 0 { 0 } else { 1 + (n-1)/(self.step+1) };
560+
(f(inner_hint.0), inner_hint.1.map(f))
561+
} else {
562+
let f = |n| n / (self.step+1);
563+
(f(inner_hint.0), inner_hint.1.map(f))
564+
}
565+
}
556566
}
557567

558568
/// An iterator that strings two iterators together.

0 commit comments

Comments
 (0)