mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-01 15:01:51 +00:00
make slice::{split_at,split_at_unchecked} const functions
This commit is contained in:
parent
06f4950cbd
commit
97c963d081
@ -137,6 +137,7 @@
|
||||
#![feature(const_size_of_val)]
|
||||
#![feature(const_slice_from_raw_parts_mut)]
|
||||
#![feature(const_slice_ptr_len)]
|
||||
#![feature(const_slice_split_at_not_mut)]
|
||||
#![feature(const_str_from_utf8_unchecked_mut)]
|
||||
#![feature(const_swap)]
|
||||
#![feature(const_trait_impl)]
|
||||
|
@ -1538,13 +1538,14 @@ impl<T> [T] {
|
||||
/// }
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_slice_split_at_not_mut", issue = "none")]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
#[must_use]
|
||||
pub fn split_at(&self, mid: usize) -> (&[T], &[T]) {
|
||||
pub const fn split_at(&self, mid: usize) -> (&[T], &[T]) {
|
||||
assert!(mid <= self.len());
|
||||
// SAFETY: `[ptr; mid]` and `[mid; len]` are inside `self`, which
|
||||
// fulfills the requirements of `from_raw_parts_mut`.
|
||||
// fulfills the requirements of `split_at_unchecked`.
|
||||
unsafe { self.split_at_unchecked(mid) }
|
||||
}
|
||||
|
||||
@ -1623,11 +1624,15 @@ impl<T> [T] {
|
||||
/// }
|
||||
/// ```
|
||||
#[unstable(feature = "slice_split_at_unchecked", reason = "new API", issue = "76014")]
|
||||
#[rustc_const_unstable(feature = "const_slice_split_at_not_mut", issue = "none")]
|
||||
#[inline]
|
||||
#[must_use]
|
||||
pub unsafe fn split_at_unchecked(&self, mid: usize) -> (&[T], &[T]) {
|
||||
pub const unsafe fn split_at_unchecked(&self, mid: usize) -> (&[T], &[T]) {
|
||||
let len = self.len();
|
||||
let ptr = self.as_ptr();
|
||||
|
||||
// SAFETY: Caller has to check that `0 <= mid <= self.len()`
|
||||
unsafe { (self.get_unchecked(..mid), self.get_unchecked(mid..)) }
|
||||
unsafe { (from_raw_parts(ptr, mid), from_raw_parts(ptr.add(mid), len - mid)) }
|
||||
}
|
||||
|
||||
/// Divides one mutable slice into two at an index, without doing bounds checking.
|
||||
|
Loading…
Reference in New Issue
Block a user