rust/src/libcore
bors b32267f2c1 Auto merge of #45595 - scottmcm:iter-try-fold, r=dtolnay
Short-circuiting internal iteration with Iterator::try_fold & try_rfold

These are the core methods in terms of which the other methods (`fold`, `all`, `any`, `find`, `position`, `nth`, ...) can be implemented, allowing Iterator implementors to get the full goodness of internal iteration by only overriding one method (per direction).

Based off the `Try` trait, so works with both `Result` and `Option` (🎉 https://github.com/rust-lang/rust/pull/42526).  The `try_fold` rustdoc examples use `Option` and the `try_rfold` ones use `Result`.

AKA continuing in the vein of PRs https://github.com/rust-lang/rust/pull/44682 & https://github.com/rust-lang/rust/pull/44856 for more of `Iterator`.

New bench following the pattern from the latter of those:
```
test iter::bench_take_while_chain_ref_sum          ... bench:   1,130,843 ns/iter (+/- 25,110)
test iter::bench_take_while_chain_sum              ... bench:     362,530 ns/iter (+/- 391)
```

I also ran the benches without the `fold` & `rfold` overrides to test their new default impls, with basically no change.  I left them there, though, to take advantage of existing overrides and because `AlwaysOk` has some sub-optimality due to https://github.com/rust-lang/rust/issues/43278 (which 45225 should fix).

If you're wondering why there are three type parameters, see issue https://github.com/rust-lang/rust/issues/45462

Thanks for @bluss for the [original IRLO thread](https://internals.rust-lang.org/t/pre-rfc-fold-ok-is-composable-internal-iteration/4434) and the rfold PR and to @cuviper for adding so many folds, [encouraging me](https://github.com/rust-lang/rust/pull/45379#issuecomment-339424670) to make this PR, and finding a catastrophic bug in a pre-review.
2017-11-17 07:43:08 +00:00
..
benches Auto merge of #45595 - scottmcm:iter-try-fold, r=dtolnay 2017-11-17 07:43:08 +00:00
fmt Add missing example for Debug trait 2017-11-08 14:11:27 +01:00
hash Fix broken link markup in Hasher::finish docs 2017-11-10 20:58:03 +01:00
iter CR feedback 2017-11-04 22:52:45 -07:00
num Fixed several pulldown warnings when documenting libstd. 2017-11-14 17:22:57 +08:00
ops Fix typo 2017-11-02 20:07:22 +08:00
prelude Run rustfmt on libcore/prelude folder 2016-10-16 22:13:04 +05:30
slice Auto merge of #45595 - scottmcm:iter-try-fold, r=dtolnay 2017-11-17 07:43:08 +00:00
str Add missing links in FromStr docs 2017-11-13 23:25:52 +01:00
sync fix core for targets with max-atomic-width = 0 2017-11-09 00:20:55 +01:00
tests Auto merge of #45595 - scottmcm:iter-try-fold, r=dtolnay 2017-11-17 07:43:08 +00:00
any.rs Various fixes to wording consistency in the docs 2017-03-22 17:19:52 +01:00
array.rs Pass formatter in TryFromSliceError Display impl 2017-09-29 11:26:19 -04:00
borrow.rs Update older URLs pointing to the first edition of the Book 2017-06-15 00:04:00 +09:00
Cargo.toml std: Remove rand crate and module 2017-11-08 20:41:17 -08:00
cell.rs Bump to 1.23 and update bootstrap 2017-10-26 13:59:18 -07:00
char.rs std: Stabilize char_escape_debug 2017-07-25 07:09:31 -07:00
char_private.rs regenerate libcore/char_private.rs 2017-10-26 22:32:24 -07:00
clone.rs Update bootstrap compiler 2017-08-31 06:58:58 -07:00
cmp.rs Auto merge of #44943 - nivkner:fixme_fixup, r=dtolnay 2017-10-05 19:52:00 +00:00
convert.rs Simplify implementation of Display and Error for convert::Infallible. 2017-09-23 17:27:02 -07:00
default.rs Fix "Quasi-quoting is inefficient" warning in incremental rustbuild. 2017-07-18 01:49:40 +08:00
internal_macros.rs fix version number 2017-09-21 15:46:17 -04:00
intrinsics.rs Add link to stablized version of an intrinsic 2017-10-29 22:53:07 -04:00
iter_private.rs Various fixes to wording consistency in the docs 2017-03-22 17:19:52 +01:00
lib.rs Auto merge of #45379 - cuviper:unit_from_iter, r=alexcrichton 2017-11-08 01:32:12 +00:00
macros.rs Allow a trailing comma in assert_eq/ne macro 2017-11-09 14:14:49 +01:00
marker.rs Remove send lang item. 2017-11-07 10:39:17 -02:00
mem.rs Bump to 1.23 and update bootstrap 2017-10-26 13:59:18 -07:00
nonzero.rs Bump to 1.23 and update bootstrap 2017-10-26 13:59:18 -07:00
option.rs Refactor Option::filter method 2017-11-11 17:32:29 +03:00
panicking.rs Bump master to 1.21.0 2017-07-25 07:03:19 -07:00
ptr.rs Auto merge of #44932 - cuviper:unsized-ptr-is_null, r=alexcrichton 2017-11-07 20:55:01 +00:00
raw.rs Fix up various links 2017-03-20 10:10:16 -04:00
result.rs core: derive Clone for result::IntoIter 2017-10-10 10:18:34 -07:00
tuple.rs Update bootstrap compiler 2017-08-31 06:58:58 -07:00
unit.rs impl FromIterator<()> for () 2017-10-18 23:12:37 -07:00