@@ -557,6 +557,32 @@ impl<T> Vec<T> {
557
557
/// assert_eq!(rebuilt, [4, 5, 6]);
558
558
/// }
559
559
/// ```
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
+ /// ```
560
586
#[ inline]
561
587
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
562
588
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> {
669
695
/// See the safety documentation of [`pointer::offset`].
670
696
///
671
697
/// 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
673
699
/// upheld.
674
700
///
675
701
/// Violating these may cause problems like corrupting the allocator's
@@ -727,6 +753,29 @@ impl<T, A: Allocator> Vec<T, A> {
727
753
/// assert_eq!(rebuilt, [4, 5, 6]);
728
754
/// }
729
755
/// ```
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
+ /// ```
730
779
#[ inline]
731
780
#[ unstable( feature = "allocator_api" , issue = "32838" ) ]
732
781
pub unsafe fn from_raw_parts_in ( ptr : * mut T , length : usize , capacity : usize , alloc : A ) -> Self {
0 commit comments