Stabilize slice::rchunks(), rchunks_mut(), rchunks_exact(), rchunk_exact_mut()
Fixes #55177
This commit is contained in:
parent
b08ca2958e
commit
52cc6fde4b
@ -119,7 +119,6 @@
|
||||
#![feature(const_vec_new)]
|
||||
#![feature(slice_partition_dedup)]
|
||||
#![feature(maybe_uninit)]
|
||||
#![feature(rchunks)]
|
||||
|
||||
// Allow testing this library
|
||||
|
||||
|
@ -125,7 +125,7 @@ pub use core::slice::{from_ref, from_mut};
|
||||
pub use core::slice::SliceIndex;
|
||||
#[stable(feature = "chunks_exact", since = "1.31.0")]
|
||||
pub use core::slice::{ChunksExact, ChunksExactMut};
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
pub use core::slice::{RChunks, RChunksMut, RChunksExact, RChunksExactMut};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -19,7 +19,6 @@
|
||||
#![feature(str_escape)]
|
||||
#![feature(try_reserve)]
|
||||
#![feature(unboxed_closures)]
|
||||
#![feature(rchunks)]
|
||||
#![feature(repeat_generic_slice)]
|
||||
|
||||
extern crate alloc_system;
|
||||
|
@ -795,8 +795,6 @@ impl<T> [T] {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(rchunks)]
|
||||
///
|
||||
/// let slice = ['l', 'o', 'r', 'e', 'm'];
|
||||
/// let mut iter = slice.rchunks(2);
|
||||
/// assert_eq!(iter.next().unwrap(), &['e', 'm']);
|
||||
@ -807,7 +805,7 @@ impl<T> [T] {
|
||||
///
|
||||
/// [`rchunks_exact`]: #method.rchunks_exact
|
||||
/// [`chunks`]: #method.chunks
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
#[inline]
|
||||
pub fn rchunks(&self, chunk_size: usize) -> RChunks<T> {
|
||||
assert!(chunk_size != 0);
|
||||
@ -831,8 +829,6 @@ impl<T> [T] {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(rchunks)]
|
||||
///
|
||||
/// let v = &mut [0, 0, 0, 0, 0];
|
||||
/// let mut count = 1;
|
||||
///
|
||||
@ -847,7 +843,7 @@ impl<T> [T] {
|
||||
///
|
||||
/// [`rchunks_exact_mut`]: #method.rchunks_exact_mut
|
||||
/// [`chunks_mut`]: #method.chunks_mut
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
#[inline]
|
||||
pub fn rchunks_mut(&mut self, chunk_size: usize) -> RChunksMut<T> {
|
||||
assert!(chunk_size != 0);
|
||||
@ -875,8 +871,6 @@ impl<T> [T] {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(rchunks)]
|
||||
///
|
||||
/// let slice = ['l', 'o', 'r', 'e', 'm'];
|
||||
/// let mut iter = slice.rchunks_exact(2);
|
||||
/// assert_eq!(iter.next().unwrap(), &['e', 'm']);
|
||||
@ -887,7 +881,7 @@ impl<T> [T] {
|
||||
///
|
||||
/// [`rchunks`]: #method.rchunks
|
||||
/// [`chunks_exact`]: #method.chunks_exact
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
#[inline]
|
||||
pub fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact<T> {
|
||||
assert!(chunk_size != 0);
|
||||
@ -917,8 +911,6 @@ impl<T> [T] {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(rchunks)]
|
||||
///
|
||||
/// let v = &mut [0, 0, 0, 0, 0];
|
||||
/// let mut count = 1;
|
||||
///
|
||||
@ -933,7 +925,7 @@ impl<T> [T] {
|
||||
///
|
||||
/// [`rchunks_mut`]: #method.rchunks_mut
|
||||
/// [`chunks_exact_mut`]: #method.chunks_exact_mut
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
#[inline]
|
||||
pub fn rchunks_exact_mut(&mut self, chunk_size: usize) -> RChunksExactMut<T> {
|
||||
assert!(chunk_size != 0);
|
||||
@ -4256,14 +4248,14 @@ unsafe impl<'a, T> TrustedRandomAccess for ChunksExactMut<'a, T> {
|
||||
/// [`rchunks`]: ../../std/primitive.slice.html#method.rchunks
|
||||
/// [slices]: ../../std/primitive.slice.html
|
||||
#[derive(Debug)]
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
pub struct RChunks<'a, T:'a> {
|
||||
v: &'a [T],
|
||||
chunk_size: usize
|
||||
}
|
||||
|
||||
// FIXME(#26925) Remove in favor of `#[derive(Clone)]`
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> Clone for RChunks<'a, T> {
|
||||
fn clone(&self) -> RChunks<'a, T> {
|
||||
RChunks {
|
||||
@ -4273,7 +4265,7 @@ impl<'a, T> Clone for RChunks<'a, T> {
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> Iterator for RChunks<'a, T> {
|
||||
type Item = &'a [T];
|
||||
|
||||
@ -4337,7 +4329,7 @@ impl<'a, T> Iterator for RChunks<'a, T> {
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> DoubleEndedIterator for RChunks<'a, T> {
|
||||
#[inline]
|
||||
fn next_back(&mut self) -> Option<&'a [T]> {
|
||||
@ -4353,17 +4345,17 @@ impl<'a, T> DoubleEndedIterator for RChunks<'a, T> {
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> ExactSizeIterator for RChunks<'a, T> {}
|
||||
|
||||
#[unstable(feature = "trusted_len", issue = "37572")]
|
||||
unsafe impl<'a, T> TrustedLen for RChunks<'a, T> {}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> FusedIterator for RChunks<'a, T> {}
|
||||
|
||||
#[doc(hidden)]
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
unsafe impl<'a, T> TrustedRandomAccess for RChunks<'a, T> {
|
||||
unsafe fn get_unchecked(&mut self, i: usize) -> &'a [T] {
|
||||
let end = self.v.len() - i * self.chunk_size;
|
||||
@ -4387,13 +4379,13 @@ unsafe impl<'a, T> TrustedRandomAccess for RChunks<'a, T> {
|
||||
/// [`rchunks_mut`]: ../../std/primitive.slice.html#method.rchunks_mut
|
||||
/// [slices]: ../../std/primitive.slice.html
|
||||
#[derive(Debug)]
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
pub struct RChunksMut<'a, T:'a> {
|
||||
v: &'a mut [T],
|
||||
chunk_size: usize
|
||||
}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> Iterator for RChunksMut<'a, T> {
|
||||
type Item = &'a mut [T];
|
||||
|
||||
@ -4461,7 +4453,7 @@ impl<'a, T> Iterator for RChunksMut<'a, T> {
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> DoubleEndedIterator for RChunksMut<'a, T> {
|
||||
#[inline]
|
||||
fn next_back(&mut self) -> Option<&'a mut [T]> {
|
||||
@ -4478,17 +4470,17 @@ impl<'a, T> DoubleEndedIterator for RChunksMut<'a, T> {
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> ExactSizeIterator for RChunksMut<'a, T> {}
|
||||
|
||||
#[unstable(feature = "trusted_len", issue = "37572")]
|
||||
unsafe impl<'a, T> TrustedLen for RChunksMut<'a, T> {}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> FusedIterator for RChunksMut<'a, T> {}
|
||||
|
||||
#[doc(hidden)]
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
unsafe impl<'a, T> TrustedRandomAccess for RChunksMut<'a, T> {
|
||||
unsafe fn get_unchecked(&mut self, i: usize) -> &'a mut [T] {
|
||||
let end = self.v.len() - i * self.chunk_size;
|
||||
@ -4514,25 +4506,25 @@ unsafe impl<'a, T> TrustedRandomAccess for RChunksMut<'a, T> {
|
||||
/// [`remainder`]: ../../std/slice/struct.ChunksExact.html#method.remainder
|
||||
/// [slices]: ../../std/primitive.slice.html
|
||||
#[derive(Debug)]
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
pub struct RChunksExact<'a, T:'a> {
|
||||
v: &'a [T],
|
||||
rem: &'a [T],
|
||||
chunk_size: usize
|
||||
}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
impl<'a, T> RChunksExact<'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 = "rchunks", since = "1.31.0")]
|
||||
pub fn remainder(&self) -> &'a [T] {
|
||||
self.rem
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME(#26925) Remove in favor of `#[derive(Clone)]`
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> Clone for RChunksExact<'a, T> {
|
||||
fn clone(&self) -> RChunksExact<'a, T> {
|
||||
RChunksExact {
|
||||
@ -4543,7 +4535,7 @@ impl<'a, T> Clone for RChunksExact<'a, T> {
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> Iterator for RChunksExact<'a, T> {
|
||||
type Item = &'a [T];
|
||||
|
||||
@ -4588,7 +4580,7 @@ impl<'a, T> Iterator for RChunksExact<'a, T> {
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> DoubleEndedIterator for RChunksExact<'a, T> {
|
||||
#[inline]
|
||||
fn next_back(&mut self) -> Option<&'a [T]> {
|
||||
@ -4602,7 +4594,7 @@ impl<'a, T> DoubleEndedIterator for RChunksExact<'a, T> {
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> ExactSizeIterator for RChunksExact<'a, T> {
|
||||
fn is_empty(&self) -> bool {
|
||||
self.v.is_empty()
|
||||
@ -4612,11 +4604,11 @@ impl<'a, T> ExactSizeIterator for RChunksExact<'a, T> {
|
||||
#[unstable(feature = "trusted_len", issue = "37572")]
|
||||
unsafe impl<'a, T> TrustedLen for RChunksExact<'a, T> {}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> FusedIterator for RChunksExact<'a, T> {}
|
||||
|
||||
#[doc(hidden)]
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
unsafe impl<'a, T> TrustedRandomAccess for RChunksExact<'a, T> {
|
||||
unsafe fn get_unchecked(&mut self, i: usize) -> &'a [T] {
|
||||
let end = self.v.len() - i * self.chunk_size;
|
||||
@ -4639,24 +4631,24 @@ unsafe impl<'a, T> TrustedRandomAccess for RChunksExact<'a, T> {
|
||||
/// [`into_remainder`]: ../../std/slice/struct.ChunksExactMut.html#method.into_remainder
|
||||
/// [slices]: ../../std/primitive.slice.html
|
||||
#[derive(Debug)]
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
pub struct RChunksExactMut<'a, T:'a> {
|
||||
v: &'a mut [T],
|
||||
rem: &'a mut [T],
|
||||
chunk_size: usize
|
||||
}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
impl<'a, T> RChunksExactMut<'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 = "rchunks", since = "1.31.0")]
|
||||
pub fn into_remainder(self) -> &'a mut [T] {
|
||||
self.rem
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> Iterator for RChunksExactMut<'a, T> {
|
||||
type Item = &'a mut [T];
|
||||
|
||||
@ -4705,7 +4697,7 @@ impl<'a, T> Iterator for RChunksExactMut<'a, T> {
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> DoubleEndedIterator for RChunksExactMut<'a, T> {
|
||||
#[inline]
|
||||
fn next_back(&mut self) -> Option<&'a mut [T]> {
|
||||
@ -4720,7 +4712,7 @@ impl<'a, T> DoubleEndedIterator for RChunksExactMut<'a, T> {
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> ExactSizeIterator for RChunksExactMut<'a, T> {
|
||||
fn is_empty(&self) -> bool {
|
||||
self.v.is_empty()
|
||||
@ -4730,11 +4722,11 @@ impl<'a, T> ExactSizeIterator for RChunksExactMut<'a, T> {
|
||||
#[unstable(feature = "trusted_len", issue = "37572")]
|
||||
unsafe impl<'a, T> TrustedLen for RChunksExactMut<'a, T> {}
|
||||
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
impl<'a, T> FusedIterator for RChunksExactMut<'a, T> {}
|
||||
|
||||
#[doc(hidden)]
|
||||
#[unstable(feature = "rchunks", issue = "55177")]
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
unsafe impl<'a, T> TrustedRandomAccess for RChunksExactMut<'a, T> {
|
||||
unsafe fn get_unchecked(&mut self, i: usize) -> &'a mut [T] {
|
||||
let end = self.v.len() - i * self.chunk_size;
|
||||
|
@ -34,7 +34,6 @@
|
||||
#![feature(trusted_len)]
|
||||
#![feature(try_from)]
|
||||
#![feature(try_trait)]
|
||||
#![feature(rchunks)]
|
||||
#![feature(align_offset)]
|
||||
#![feature(reverse_bits)]
|
||||
#![feature(inner_deref)]
|
||||
|
Loading…
x
Reference in New Issue
Block a user