diff options
| author | bors <bors@rust-lang.org> | 2019-08-20 15:01:24 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-08-20 15:01:24 +0000 |
| commit | 5a56e05abd34e1936df74625c1f40cb6fee0cd4a (patch) | |
| tree | 33d5f0b1aec0faad29a18e8d9e40271486d8c59d /src/libcore/slice/mod.rs | |
| parent | 51879c3abaedb926739095d19a2af638ee6a07d8 (diff) | |
| parent | 218bcf2e01146eb87afbef608f00c8df1e54b415 (diff) | |
| download | rust-5a56e05abd34e1936df74625c1f40cb6fee0cd4a.tar.gz rust-5a56e05abd34e1936df74625c1f40cb6fee0cd4a.zip | |
Auto merge of #63744 - Centril:rollup-g4l3ra9, r=Centril
Rollup of 7 pull requests Successful merges: - #63216 (avoid unnecessary reservations in std::io::Take::read_to_end) - #63265 (Implement `nth_back` for ChunksExactMut) - #63691 (Fix bug in iter::Chain::size_hint) - #63722 (Don't use stage naming in RUSTFLAGS environment variables) - #63723 (Consolidate sigemptyset workarounds) - #63736 (Restore the rustc_plugin crate in the sysroot) - #63743 (Allow git to merge `Cargo.lock`) Failed merges: r? @ghost
Diffstat (limited to 'src/libcore/slice/mod.rs')
| -rw-r--r-- | src/libcore/slice/mod.rs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/libcore/slice/mod.rs b/src/libcore/slice/mod.rs index ce5af13d4ca..bfbbb15c8d4 100644 --- a/src/libcore/slice/mod.rs +++ b/src/libcore/slice/mod.rs @@ -4637,6 +4637,22 @@ impl<'a, T> DoubleEndedIterator for ChunksExactMut<'a, T> { Some(tail) } } + + #[inline] + fn nth_back(&mut self, n: usize) -> Option<Self::Item> { + let len = self.len(); + if n >= len { + self.v = &mut []; + None + } else { + let start = (len - 1 - n) * self.chunk_size; + let end = start + self.chunk_size; + let (temp, _tail) = mem::replace(&mut self.v, &mut []).split_at_mut(end); + let (head, nth_back) = temp.split_at_mut(start); + self.v = head; + Some(nth_back) + } + } } #[stable(feature = "chunks_exact", since = "1.31.0")] |
