From b08ca2958e1b92c67c3ac0e76455f51742b95d23 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 18 Oct 2018 10:22:34 +0300 Subject: [PATCH] Stabilize slice::chunks_exact() and slice::chunks_exact_mut() Fixes #47115 --- src/liballoc/lib.rs | 1 - src/liballoc/slice.rs | 2 +- src/liballoc/tests/lib.rs | 1 - src/libcore/slice/mod.rs | 38 +++++++++++++++++--------------------- src/libcore/tests/lib.rs | 1 - 5 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/liballoc/lib.rs b/src/liballoc/lib.rs index 0cad471d9a1..540a17774e5 100644 --- a/src/liballoc/lib.rs +++ b/src/liballoc/lib.rs @@ -115,7 +115,6 @@ #![feature(unsize)] #![feature(allocator_internals)] #![feature(on_unimplemented)] -#![feature(chunks_exact)] #![feature(rustc_const_unstable)] #![feature(const_vec_new)] #![feature(slice_partition_dedup)] diff --git a/src/liballoc/slice.rs b/src/liballoc/slice.rs index 2628757b503..8ffc043d816 100644 --- a/src/liballoc/slice.rs +++ b/src/liballoc/slice.rs @@ -123,7 +123,7 @@ pub use core::slice::{from_ref, from_mut}; #[stable(feature = "slice_get_slice", since = "1.28.0")] pub use core::slice::SliceIndex; -#[unstable(feature = "chunks_exact", issue = "47115")] +#[stable(feature = "chunks_exact", since = "1.31.0")] pub use core::slice::{ChunksExact, ChunksExactMut}; #[unstable(feature = "rchunks", issue = "55177")] pub use core::slice::{RChunks, RChunksMut, RChunksExact, RChunksExactMut}; diff --git a/src/liballoc/tests/lib.rs b/src/liballoc/tests/lib.rs index 62c84c9e086..5a21976d75d 100644 --- a/src/liballoc/tests/lib.rs +++ b/src/liballoc/tests/lib.rs @@ -19,7 +19,6 @@ #![feature(str_escape)] #![feature(try_reserve)] #![feature(unboxed_closures)] -#![feature(chunks_exact)] #![feature(rchunks)] #![feature(repeat_generic_slice)] diff --git a/src/libcore/slice/mod.rs b/src/libcore/slice/mod.rs index 62f60034352..628d5542ac0 100644 --- a/src/libcore/slice/mod.rs +++ b/src/libcore/slice/mod.rs @@ -713,8 +713,6 @@ pub fn chunks_mut(&mut self, chunk_size: usize) -> ChunksMut { /// # Examples /// /// ``` - /// #![feature(chunks_exact)] - /// /// let slice = ['l', 'o', 'r', 'e', 'm']; /// let mut iter = slice.chunks_exact(2); /// assert_eq!(iter.next().unwrap(), &['l', 'o']); @@ -725,7 +723,7 @@ pub fn chunks_mut(&mut self, chunk_size: usize) -> ChunksMut { /// /// [`chunks`]: #method.chunks /// [`rchunks_exact`]: #method.rchunks_exact - #[unstable(feature = "chunks_exact", issue = "47115")] + #[stable(feature = "chunks_exact", since = "1.31.0")] #[inline] pub fn chunks_exact(&self, chunk_size: usize) -> ChunksExact { assert!(chunk_size != 0); @@ -756,8 +754,6 @@ pub fn chunks_exact(&self, chunk_size: usize) -> ChunksExact { /// # Examples /// /// ``` - /// #![feature(chunks_exact)] - /// /// let v = &mut [0, 0, 0, 0, 0]; /// let mut count = 1; /// @@ -772,7 +768,7 @@ pub fn chunks_exact(&self, chunk_size: usize) -> ChunksExact { /// /// [`chunks_mut`]: #method.chunks_mut /// [`rchunks_exact_mut`]: #method.rchunks_exact_mut - #[unstable(feature = "chunks_exact", issue = "47115")] + #[stable(feature = "chunks_exact", since = "1.31.0")] #[inline] pub fn chunks_exact_mut(&mut self, chunk_size: usize) -> ChunksExactMut { assert!(chunk_size != 0); @@ -4022,25 +4018,25 @@ fn may_have_side_effect() -> bool { false } /// [`remainder`]: ../../std/slice/struct.ChunksExact.html#method.remainder /// [slices]: ../../std/primitive.slice.html #[derive(Debug)] -#[unstable(feature = "chunks_exact", issue = "47115")] +#[stable(feature = "chunks_exact", since = "1.31.0")] pub struct ChunksExact<'a, T:'a> { v: &'a [T], rem: &'a [T], chunk_size: usize } -#[unstable(feature = "chunks_exact", issue = "47115")] impl<'a, T> ChunksExact<'a, T> { /// Return the remainder of the original slice that is not going to be /// returned by the iterator. The returned slice has at most `chunk_size-1` /// elements. + #[stable(feature = "chunks_exact", since = "1.31.0")] pub fn remainder(&self) -> &'a [T] { self.rem } } // FIXME(#26925) Remove in favor of `#[derive(Clone)]` -#[unstable(feature = "chunks_exact", issue = "47115")] +#[stable(feature = "chunks_exact", since = "1.31.0")] impl Clone for ChunksExact<'_, T> { fn clone(&self) -> Self { ChunksExact { @@ -4051,7 +4047,7 @@ fn clone(&self) -> Self { } } -#[unstable(feature = "chunks_exact", issue = "47115")] +#[stable(feature = "chunks_exact", since = "1.31.0")] impl<'a, T> Iterator for ChunksExact<'a, T> { type Item = &'a [T]; @@ -4096,7 +4092,7 @@ fn last(mut self) -> Option { } } -#[unstable(feature = "chunks_exact", issue = "47115")] +#[stable(feature = "chunks_exact", since = "1.31.0")] impl<'a, T> DoubleEndedIterator for ChunksExact<'a, T> { #[inline] fn next_back(&mut self) -> Option<&'a [T]> { @@ -4110,7 +4106,7 @@ fn next_back(&mut self) -> Option<&'a [T]> { } } -#[unstable(feature = "chunks_exact", issue = "47115")] +#[stable(feature = "chunks_exact", since = "1.31.0")] impl ExactSizeIterator for ChunksExact<'_, T> { fn is_empty(&self) -> bool { self.v.is_empty() @@ -4120,11 +4116,11 @@ fn is_empty(&self) -> bool { #[unstable(feature = "trusted_len", issue = "37572")] unsafe impl TrustedLen for ChunksExact<'_, T> {} -#[unstable(feature = "chunks_exact", issue = "47115")] +#[stable(feature = "chunks_exact", since = "1.31.0")] impl FusedIterator for ChunksExact<'_, T> {} #[doc(hidden)] -#[unstable(feature = "chunks_exact", issue = "47115")] +#[stable(feature = "chunks_exact", since = "1.31.0")] unsafe impl<'a, T> TrustedRandomAccess for ChunksExact<'a, T> { unsafe fn get_unchecked(&mut self, i: usize) -> &'a [T] { let start = i * self.chunk_size; @@ -4146,24 +4142,24 @@ fn may_have_side_effect() -> bool { false } /// [`into_remainder`]: ../../std/slice/struct.ChunksExactMut.html#method.into_remainder /// [slices]: ../../std/primitive.slice.html #[derive(Debug)] -#[unstable(feature = "chunks_exact", issue = "47115")] +#[stable(feature = "chunks_exact", since = "1.31.0")] pub struct ChunksExactMut<'a, T:'a> { v: &'a mut [T], rem: &'a mut [T], chunk_size: usize } -#[unstable(feature = "chunks_exact", issue = "47115")] impl<'a, T> ChunksExactMut<'a, T> { /// Return the remainder of the original slice that is not going to be /// returned by the iterator. The returned slice has at most `chunk_size-1` /// elements. + #[stable(feature = "chunks_exact", since = "1.31.0")] pub fn into_remainder(self) -> &'a mut [T] { self.rem } } -#[unstable(feature = "chunks_exact", issue = "47115")] +#[stable(feature = "chunks_exact", since = "1.31.0")] impl<'a, T> Iterator for ChunksExactMut<'a, T> { type Item = &'a mut [T]; @@ -4210,7 +4206,7 @@ fn last(mut self) -> Option { } } -#[unstable(feature = "chunks_exact", issue = "47115")] +#[stable(feature = "chunks_exact", since = "1.31.0")] impl<'a, T> DoubleEndedIterator for ChunksExactMut<'a, T> { #[inline] fn next_back(&mut self) -> Option<&'a mut [T]> { @@ -4226,7 +4222,7 @@ fn next_back(&mut self) -> Option<&'a mut [T]> { } } -#[unstable(feature = "chunks_exact", issue = "47115")] +#[stable(feature = "chunks_exact", since = "1.31.0")] impl ExactSizeIterator for ChunksExactMut<'_, T> { fn is_empty(&self) -> bool { self.v.is_empty() @@ -4236,11 +4232,11 @@ fn is_empty(&self) -> bool { #[unstable(feature = "trusted_len", issue = "37572")] unsafe impl TrustedLen for ChunksExactMut<'_, T> {} -#[unstable(feature = "chunks_exact", issue = "47115")] +#[stable(feature = "chunks_exact", since = "1.31.0")] impl FusedIterator for ChunksExactMut<'_, T> {} #[doc(hidden)] -#[unstable(feature = "chunks_exact", issue = "47115")] +#[stable(feature = "chunks_exact", since = "1.31.0")] unsafe impl<'a, T> TrustedRandomAccess for ChunksExactMut<'a, T> { unsafe fn get_unchecked(&mut self, i: usize) -> &'a mut [T] { let start = i * self.chunk_size; diff --git a/src/libcore/tests/lib.rs b/src/libcore/tests/lib.rs index e889d484353..affcdbea9d3 100644 --- a/src/libcore/tests/lib.rs +++ b/src/libcore/tests/lib.rs @@ -34,7 +34,6 @@ #![feature(trusted_len)] #![feature(try_from)] #![feature(try_trait)] -#![feature(chunks_exact)] #![feature(rchunks)] #![feature(align_offset)] #![feature(reverse_bits)] -- 2.44.0