@@ -557,6 +557,32 @@ impl<T> Vec<T> {
557557 /// assert_eq!(rebuilt, [4, 5, 6]);
558558 /// }
559559 /// ```
560+ ///
561+ /// Using memory that was allocated elsewhere:
562+ ///
563+ /// ```rust
564+ /// #![feature(allocator_api)]
565+ ///
566+ /// use std::alloc::{AllocError, Allocator, Global, Layout};
567+ ///
568+ /// fn main() {
569+ /// let layout = Layout::array::<u32>(16).expect("overflow cannot happen");
570+ ///
571+ /// let vec = unsafe {
572+ /// let mem = match Global.allocate(layout) {
573+ /// Ok(mem) => mem.cast::<u32>().as_ptr(),
574+ /// Err(AllocError) => return,
575+ /// };
576+ ///
577+ /// mem.write(1_000_000);
578+ ///
579+ /// Vec::from_raw_parts_in(mem, 1, 16, Global)
580+ /// };
581+ ///
582+ /// assert_eq!(vec, &[1_000_000]);
583+ /// assert_eq!(vec.capacity(), 16);
584+ /// }
585+ /// ```
560586 #[ inline]
561587 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
562588 pub unsafe fn from_raw_parts ( ptr : * mut T , length : usize , capacity : usize ) -> Self {
@@ -669,7 +695,7 @@ impl<T, A: Allocator> Vec<T, A> {
669695 /// See the safety documentation of [`pointer::offset`].
670696 ///
671697 /// These requirements are always upheld by any `ptr` that has been allocated
672- /// via `Vec<T>`. Other allocation sources are allowed if the invariants are
698+ /// via `Vec<T, A >`. Other allocation sources are allowed if the invariants are
673699 /// upheld.
674700 ///
675701 /// Violating these may cause problems like corrupting the allocator's
@@ -727,6 +753,29 @@ impl<T, A: Allocator> Vec<T, A> {
727753 /// assert_eq!(rebuilt, [4, 5, 6]);
728754 /// }
729755 /// ```
756+ ///
757+ /// Using memory that was allocated elsewhere:
758+ ///
759+ /// ```rust
760+ /// use std::alloc::{alloc, Layout};
761+ ///
762+ /// fn main() {
763+ /// let layout = Layout::array::<u32>(16).expect("overflow cannot happen");
764+ /// let vec = unsafe {
765+ /// let mem = alloc(layout).cast::<u32>();
766+ /// if mem.is_null() {
767+ /// return;
768+ /// }
769+ ///
770+ /// mem.write(1_000_000);
771+ ///
772+ /// Vec::from_raw_parts(mem, 1, 16)
773+ /// };
774+ ///
775+ /// assert_eq!(vec, &[1_000_000]);
776+ /// assert_eq!(vec.capacity(), 16);
777+ /// }
778+ /// ```
730779 #[ inline]
731780 #[ unstable( feature = "allocator_api" , issue = "32838" ) ]
732781 pub unsafe fn from_raw_parts_in ( ptr : * mut T , length : usize , capacity : usize , alloc : A ) -> Self {
0 commit comments