Skip to content

Commit efdd43d

Browse files
committed
Make into_parts methods on Vec associated functions
This is more consistent with `Box::into_raw()` and clears out potential confusion about whether the method acts on a vector or on a slice.
1 parent e3e6bc6 commit efdd43d

File tree

5 files changed

+20
-20
lines changed

5 files changed

+20
-20
lines changed

library/alloc/src/collections/vec_deque/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3140,7 +3140,7 @@ impl<T, A: Allocator> From<Vec<T, A>> for VecDeque<T, A> {
31403140
/// any additional memory.
31413141
#[inline]
31423142
fn from(other: Vec<T, A>) -> Self {
3143-
let (ptr, len, cap, alloc) = other.into_raw_parts_with_alloc();
3143+
let (ptr, len, cap, alloc) = Vec::into_raw_parts_with_alloc(other);
31443144
Self { head: 0, len, buf: unsafe { RawVec::from_raw_parts_in(ptr, cap, alloc) } }
31453145
}
31463146
}

library/alloc/src/rc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2811,7 +2811,7 @@ impl<T, A: Allocator> From<Vec<T, A>> for Rc<[T], A> {
28112811
#[inline]
28122812
fn from(v: Vec<T, A>) -> Rc<[T], A> {
28132813
unsafe {
2814-
let (vec_ptr, len, cap, alloc) = v.into_raw_parts_with_alloc();
2814+
let (vec_ptr, len, cap, alloc) = Vec::into_raw_parts_with_alloc(v);
28152815

28162816
let rc_ptr = Self::allocate_for_slice_in(len, &alloc);
28172817
ptr::copy_nonoverlapping(vec_ptr, (&raw mut (*rc_ptr).value) as *mut T, len);

library/alloc/src/string.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -935,15 +935,15 @@ impl String {
935935
/// #![feature(vec_into_raw_parts)]
936936
/// let s = String::from("hello");
937937
///
938-
/// let (ptr, len, cap) = s.into_raw_parts();
938+
/// let (ptr, len, cap) = String::into_raw_parts(s);
939939
///
940940
/// let rebuilt = unsafe { String::from_raw_parts(ptr, len, cap) };
941941
/// assert_eq!(rebuilt, "hello");
942942
/// ```
943943
#[must_use = "losing the pointer will leak memory"]
944944
#[unstable(feature = "vec_into_raw_parts", reason = "new API", issue = "65816")]
945-
pub fn into_raw_parts(self) -> (*mut u8, usize, usize) {
946-
self.vec.into_raw_parts()
945+
pub fn into_raw_parts(string: Self) -> (*mut u8, usize, usize) {
946+
Vec::into_raw_parts(string.vec)
947947
}
948948

949949
/// Creates a new `String` from a pointer, a length and a capacity.

library/alloc/src/sync.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3837,7 +3837,7 @@ impl<T, A: Allocator + Clone> From<Vec<T, A>> for Arc<[T], A> {
38373837
#[inline]
38383838
fn from(v: Vec<T, A>) -> Arc<[T], A> {
38393839
unsafe {
3840-
let (vec_ptr, len, cap, alloc) = v.into_raw_parts_with_alloc();
3840+
let (vec_ptr, len, cap, alloc) = Vec::into_raw_parts_with_alloc(v);
38413841

38423842
let rc_ptr = Self::allocate_for_slice_in(len, &alloc);
38433843
ptr::copy_nonoverlapping(vec_ptr, (&raw mut (*rc_ptr).data) as *mut T, len);

library/alloc/src/vec/mod.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//! A contiguous growable array type with heap-allocated contents, written
1+
//! A contiguous growable array type with heap-allocated contents, writtenalloc/vec/
22
//! `Vec<T>`.
33
//!
44
//! Vectors have *O*(1) indexing, amortized *O*(1) push (to the end) and
@@ -1092,7 +1092,7 @@ impl<T, A: Allocator> Vec<T, A> {
10921092
/// #![feature(vec_into_raw_parts)]
10931093
/// let v: Vec<i32> = vec![-1, 0, 1];
10941094
///
1095-
/// let (ptr, len, cap) = v.into_raw_parts();
1095+
/// let (ptr, len, cap) = Vec::into_raw_parts(v);
10961096
///
10971097
/// let rebuilt = unsafe {
10981098
/// // We can now make changes to the components, such as
@@ -1105,8 +1105,8 @@ impl<T, A: Allocator> Vec<T, A> {
11051105
/// ```
11061106
#[must_use = "losing the pointer will leak memory"]
11071107
#[unstable(feature = "vec_into_raw_parts", reason = "new API", issue = "65816")]
1108-
pub fn into_raw_parts(self) -> (*mut T, usize, usize) {
1109-
let mut me = ManuallyDrop::new(self);
1108+
pub fn into_raw_parts(vec: Self) -> (*mut T, usize, usize) {
1109+
let mut me = ManuallyDrop::new(vec);
11101110
(me.as_mut_ptr(), me.len(), me.capacity())
11111111
}
11121112

@@ -1133,7 +1133,7 @@ impl<T, A: Allocator> Vec<T, A> {
11331133
///
11341134
/// let v: Vec<i32> = vec![-1, 0, 1];
11351135
///
1136-
/// let (ptr, len, cap) = v.into_parts();
1136+
/// let (ptr, len, cap) = Vec::into_parts(v);
11371137
///
11381138
/// let rebuilt = unsafe {
11391139
/// // We can now make changes to the components, such as
@@ -1147,8 +1147,8 @@ impl<T, A: Allocator> Vec<T, A> {
11471147
#[must_use = "losing the pointer will leak memory"]
11481148
#[unstable(feature = "box_vec_non_null", reason = "new API", issue = "130364")]
11491149
// #[unstable(feature = "vec_into_raw_parts", reason = "new API", issue = "65816")]
1150-
pub fn into_parts(self) -> (NonNull<T>, usize, usize) {
1151-
let (ptr, len, capacity) = self.into_raw_parts();
1150+
pub fn into_parts(vec: Self) -> (NonNull<T>, usize, usize) {
1151+
let (ptr, len, capacity) = Self::into_raw_parts(vec);
11521152
// SAFETY: A `Vec` always has a non-null pointer.
11531153
(unsafe { NonNull::new_unchecked(ptr) }, len, capacity)
11541154
}
@@ -1179,7 +1179,7 @@ impl<T, A: Allocator> Vec<T, A> {
11791179
/// v.push(0);
11801180
/// v.push(1);
11811181
///
1182-
/// let (ptr, len, cap, alloc) = v.into_raw_parts_with_alloc();
1182+
/// let (ptr, len, cap, alloc) = Vec::into_raw_parts_with_alloc(v);
11831183
///
11841184
/// let rebuilt = unsafe {
11851185
/// // We can now make changes to the components, such as
@@ -1193,8 +1193,8 @@ impl<T, A: Allocator> Vec<T, A> {
11931193
#[must_use = "losing the pointer will leak memory"]
11941194
#[unstable(feature = "allocator_api", issue = "32838")]
11951195
// #[unstable(feature = "vec_into_raw_parts", reason = "new API", issue = "65816")]
1196-
pub fn into_raw_parts_with_alloc(self) -> (*mut T, usize, usize, A) {
1197-
let mut me = ManuallyDrop::new(self);
1196+
pub fn into_raw_parts_with_alloc(vec: Self) -> (*mut T, usize, usize, A) {
1197+
let mut me = ManuallyDrop::new(vec);
11981198
let len = me.len();
11991199
let capacity = me.capacity();
12001200
let ptr = me.as_mut_ptr();
@@ -1229,7 +1229,7 @@ impl<T, A: Allocator> Vec<T, A> {
12291229
/// v.push(0);
12301230
/// v.push(1);
12311231
///
1232-
/// let (ptr, len, cap, alloc) = v.into_parts_with_alloc();
1232+
/// let (ptr, len, cap, alloc) = Vec::into_parts_with_alloc(v);
12331233
///
12341234
/// let rebuilt = unsafe {
12351235
/// // We can now make changes to the components, such as
@@ -1244,8 +1244,8 @@ impl<T, A: Allocator> Vec<T, A> {
12441244
#[unstable(feature = "allocator_api", issue = "32838")]
12451245
// #[unstable(feature = "box_vec_non_null", reason = "new API", issue = "130364")]
12461246
// #[unstable(feature = "vec_into_raw_parts", reason = "new API", issue = "65816")]
1247-
pub fn into_parts_with_alloc(self) -> (NonNull<T>, usize, usize, A) {
1248-
let (ptr, len, capacity, alloc) = self.into_raw_parts_with_alloc();
1247+
pub fn into_parts_with_alloc(vec: Self) -> (NonNull<T>, usize, usize, A) {
1248+
let (ptr, len, capacity, alloc) = Vec::into_raw_parts_with_alloc(vec);
12491249
// SAFETY: A `Vec` always has a non-null pointer.
12501250
(unsafe { NonNull::new_unchecked(ptr) }, len, capacity, alloc)
12511251
}
@@ -3139,7 +3139,7 @@ impl<T, A: Allocator, const N: usize> Vec<[T; N], A> {
31393139
/// ```
31403140
#[stable(feature = "slice_flatten", since = "1.80.0")]
31413141
pub fn into_flattened(self) -> Vec<T, A> {
3142-
let (ptr, len, cap, alloc) = self.into_raw_parts_with_alloc();
3142+
let (ptr, len, cap, alloc) = Vec::into_raw_parts_with_alloc(self);
31433143
let (new_len, new_cap) = if T::IS_ZST {
31443144
(len.checked_mul(N).expect("vec len overflow"), usize::MAX)
31453145
} else {

0 commit comments

Comments
 (0)