Commit graph

44 commits

Author SHA1 Message Date
Josh Stone
741dc2bad5 Track iterator_for_each in #42986 2017-06-30 10:21:46 -07:00
Josh Stone
e72ee6e4ad Use a little more compelling example of for_each 2017-06-27 16:31:31 -07:00
Josh Stone
4a8ddac99e Use fold to implement Iterator::for_each
The benefit of using internal iteration is shown in new benchmarks:

    test iter::bench_for_each_chain_fold     ... bench:     635,110 ns/iter (+/- 5,135)
    test iter::bench_for_each_chain_loop     ... bench:   2,249,983 ns/iter (+/- 42,001)
    test iter::bench_for_each_chain_ref_fold ... bench:   2,248,061 ns/iter (+/- 51,940)
2017-06-21 13:22:27 -07:00
Josh Stone
b4038977a3 Add Iterator::for_each
This works like a `for` loop in functional style, applying a closure to
every item in the `Iterator`.  It doesn't allow `break`/`continue` like
a `for` loop, nor any other control flow outside the closure, but it may
be a more legible style for tying up the end of a long iterator chain.

This was tried before in #14911, but nobody made the case for using it
with longer iterators.  There was also `Iterator::advance` at that time
which was more capable than `for_each`, but that no longer exists.

The `itertools` crate has `Itertools::foreach` with the same behavior,
but thankfully the names won't collide.  The `rayon` crate also has a
`ParallelIterator::for_each` where simple `for` loops aren't possible.

> I really wish we had `for_each` on seq iterators. Having to use a
> dummy operation is annoying.  - [@nikomatsakis][1]

[1]: https://github.com/nikomatsakis/rayon/pull/367#issuecomment-308455185
2017-06-20 15:25:51 -07:00
Matt Brubeck
b6193f3c00 Update docs to say iterator instead of range 2017-06-07 09:24:35 -07:00
Scott McMurray
265dce66b6 RangeFrom should have an infinite size_hint
This makes the size_hint from things like `take` more precise.
2017-05-30 09:15:25 -07:00
bors
543691d0eb Auto merge of #41439 - ivandardi:master, r=BurntSushi
Stabilize step_by by adding it to Iterator (issue #27741)

Inspired by itertools' `take()` method. See issue #27741
2017-05-19 17:42:28 +00:00
Ivan Dardi
c5a35f4a8d Update documentation 2017-05-15 16:59:43 -03:00
Ivan Dardi
fa01372555 Fix commit derp and update implementations and documentation 2017-05-12 15:11:15 -03:00
Martin Glagla
641d05353a Fix typo in size_hint example comment 2017-05-11 20:38:15 +02:00
steveklabnik
696df71d0c Clarify "side effect" in peek's docs
Fixes #33269
2017-04-25 05:38:26 -04:00
king6cong
7c8ca80c81 code format 2017-04-15 11:43:35 +08:00
Sebastian Hahn
316af6082c Clarify Iterator::position doc
Extend the example a little bit to show behaviour better.
2017-04-11 19:39:58 +02:00
Guillaume Gomez
ed5702fc58 Fix invalid linking in iter docs 2017-03-21 16:18:36 -04:00
steveklabnik
d1d9626e75 Fix up various links
The unstable book, libstd, libcore, and liballoc all needed some
adjustment.
2017-03-20 10:10:16 -04:00
Corey Farwell
e7b0f2badf Remove function invokation parens from documentation links.
This was never established as a convention we should follow in the 'More
API Documentation Conventions' RFC:

https://github.com/rust-lang/rfcs/blob/master/text/1574-more-api-documentation-conventions.md
2017-03-13 21:43:18 -04:00
Mikhail Pak
eee6752b97 Docs: Better explanation of return values for min, max functions
Explain that a None is returned if the iterator is empty.
2017-02-19 11:01:02 +01:00
king6cong
860900cfc3 code order tweak 2017-02-17 09:47:37 +08:00
Rob Speer
11d36aec83 iterator docs: Move paragraph about discarding; clarify "consumed" 2017-02-10 01:35:29 -05:00
Rob Speer
ebf29ef073 Rephrase my proposed edit ("objects" -> "elements") 2017-02-10 01:31:14 -05:00
Rob Speer
5cc5e0851e Fix a misleading statement in Iterator.nth()
The `Iterator.nth()` documentation says "Note that all preceding elements will be consumed". I assumed from that that the preceding elements would be the *only* ones that were consumed, but in fact the returned element is consumed as well.

The way I read the documentation, I assumed that `nth(0)` would not discard anything (as there are 0 preceding elements), so I added a sentence clarifying that it does. I also rephrased it to avoid the stunted "i.e." phrasing.
2017-02-10 01:31:14 -05:00
Oliver Middleton
09b3903aec Fix a few links in the docs 2017-01-27 18:08:51 +00:00
Vadim Petrochenkov
bf02534750 Fix docs for min/max algorithms 2017-01-11 19:02:30 +03:00
Aaron Turon
9a5cef4de5 Address fallout 2016-12-16 19:42:17 -08:00
Aaron Turon
95373cd5d8 Stabilize Iterator::{min_by, max_by} 2016-12-15 10:56:55 -08:00
Ulrik Sverdrup
bc3618e5c0 core: Remove Self: Sized from Iterator::nth
It is an unnecessary restriction; nth neither needs self to be sized
nor needs to be exempted from the trait object.

It increases the utility of the nth method, because type specific
implementations are available through `&mut I` or through an iterator
trait object.

It is a backwards compatible change due to the special cases of the
`where Self: Sized` bound; it was already optional to include this bound
in `Iterator` implementations.
2016-12-02 21:20:41 +01:00
Guillaume Gomez
f2ff9857cd Add missing urls and few local rewrites 2016-11-08 21:30:17 +01:00
Tshepang Lekhonkhobe
3e26a93a36 doc: a more simple description of Iterator::nth 2016-10-21 00:38:00 +02:00
Steven Fackler
63fecad2e7 Inherit overflow checks for sum and product 2016-09-10 10:06:33 -07:00
bors
d128e6bc74 Auto merge of #35856 - phimuemue:master, r=brson
Introduce max_by/min_by on iterators

See https://github.com/rust-lang/rfcs/issues/1722 for reference.

It seems that there is `min`, `max` (simple computation of min/max), `min_by_key`, `max_by_key` (min/max by comparing mapped values) but no `min_by` and `max_by` (min/max according to comparison function). However, e.g. on vectors or slices there is `sort`, `sort_by_key` and `sort_by`.
2016-09-02 21:02:41 -07:00
philipp
5928be1d9b Changed issue number to 36105 2016-08-29 19:43:18 +02:00
Jeffrey Seyfried
e2ad3be178 Use #[prelude_import] in libcore. 2016-08-24 22:12:23 +00:00
philipp
dfeb20ce60 Added #![feature] declarations 2016-08-21 13:23:39 +02:00
philipp
4b87c7e3b4 Introduce max_by/min_by on iterators 2016-08-20 17:30:48 +02:00
Alex Crichton
3016626c3a std: Stabilize APIs for the 1.11.0 release
Although the set of APIs being stabilized this release is relatively small, the
trains keep going! Listed below are the APIs in the standard library which have
either transitioned from unstable to stable or those from unstable to
deprecated.

Stable

* `BTreeMap::{append, split_off}`
* `BTreeSet::{append, split_off}`
* `Cell::get_mut`
* `RefCell::get_mut`
* `BinaryHeap::append`
* `{f32, f64}::{to_degrees, to_radians}` - libcore stabilizations mirroring past
  libstd stabilizations
* `Iterator::sum`
* `Iterator::product`

Deprecated

* `{f32, f64}::next_after`
* `{f32, f64}::integer_decode`
* `{f32, f64}::ldexp`
* `{f32, f64}::frexp`
* `num::One`
* `num::Zero`

Added APIs (all unstable)

* `iter::Sum`
* `iter::Product`
* `iter::Step` - a few methods were added to accomodate deprecation of One/Zero

Removed APIs

* `From<Range<T>> for RangeInclusive<T>` - everything about `RangeInclusive` is
  unstable

Closes #27739
Closes #27752
Closes #32526
Closes #33444
Closes #34152
cc #34529 (new tracking issue)
2016-07-03 10:49:01 -07:00
bors
fe96928d7d Auto merge of #34155 - ollie27:unzip, r=alexcrichton
Remove unzip() SizeHint hack

This was using an invalid iterator so is likely to end with buggy
behaviour.

It also doesn't even benefit many type in std including Vec so removing it
shouldn't cause any problems.

Fixes: #33468
2016-06-21 02:18:42 -07:00
Ulrik Sverdrup
a8f2e9b359 specialize zip: Specialize .zip() for TrustedRandomAccess iterators
This allows common iterator compositions like a.zip(b) where a, b
are slice::{Iter, IterMut} compile to *much* better code.
2016-06-14 15:51:49 +02:00
Oliver Middleton
02f9be8524 Remove unzip() SizeHint hack
This was using an invalid iterator so is likely to end with buggy
behaviour.

It also doesn't even benefit many type in std including Vec so removing it
shouldn't cause any problems.
2016-06-07 22:32:48 +01:00
Eduard Burtescu
702c47baae core: mark relevant functions with #[rustc_inherit_overflow_checks]. 2016-06-05 14:41:03 +03:00
Kaiyin Zhong
16219deb5c Update iterator.rs 2016-05-04 23:29:28 +02:00
Kaiyin Zhong
2ca31205f3 errors in the doc 2016-05-04 21:50:51 +02:00
Nick Fitzgerald
e078667b05 Make the Iterator::enumerate doc example more clear
The example uses integers for the value being iterated over, but the indices
added by `enumerate` are also integers, so I always end up double taking and
thinking harder than I should when parsing the documentation. I also always
forget which order the index and value are in the tuple so I frequently hit this
stumbling block. This commit changes the documentation to iterate over
characters so that it is immediately obvious which part of the tuple is the
index and which is the value.
2016-04-22 10:21:12 -07:00
Ulrik Sverdrup
085fddac50 core::iter: break long lines 2016-04-18 20:21:17 +02:00
Ulrik Sverdrup
84654fa4bf Split core::iter module implementation into parts
split iter.rs into a directory of (implementation private) modules.

+ mod Adaptor structs
  - Private fields need to be available both for them and Iterator
+ iterator (Iterator trait)
+ traits (FromIterator, traits but Iterator itself)
+ range (range related)
+ sources (Repeat, Once, Empty)
2016-04-18 20:08:27 +02:00