@@ -795,6 +795,37 @@ impl<T> VecView<T> {
795795        // All item are processed. This can be optimized to `set_len` by LLVM. 
796796        drop ( g) ; 
797797    } 
798+ 
799+     /// Returns the remaining spare capacity of the vector as a slice of `MaybeUninit<T>`. 
800+ /// 
801+ /// The returned slice can be used to fill the vector with data before marking the data as 
802+ /// initialized using the `set_len` method. 
803+ /// 
804+ /// # Examples 
805+ /// 
806+ /// ``` 
807+ /// use heapless::{Vec, VecView}; 
808+ /// 
809+ /// // Allocate vector big enough for 10 elements. 
810+ /// let mut v: Vec<_, 10> = Vec::new(); 
811+ /// let view: &mut VecView<_> = &mut v; 
812+ /// 
813+ /// // Fill in the first 3 elements. 
814+ /// let uninit = view.spare_capacity_mut(); 
815+ /// uninit[0].write(0); 
816+ /// uninit[1].write(1); 
817+ /// uninit[2].write(2); 
818+ /// 
819+ /// // Mark the first 3 elements of the vector as being initialized. 
820+ /// unsafe { 
821+ ///     view.set_len(3); 
822+ /// } 
823+ /// 
824+ /// assert_eq!(view, &[0, 1, 2]); 
825+ /// ``` 
826+ pub  fn  spare_capacity_mut ( & mut  self )  -> & mut  [ MaybeUninit < T > ]  { 
827+         & mut  self . buffer [ self . len ..] 
828+     } 
798829} 
799830
800831impl < T ,  const  N :  usize >  Vec < T ,  N >  { 
@@ -1453,7 +1484,7 @@ impl<T, const N: usize> Vec<T, N> {
14531484/// assert_eq!(&v, &[0, 1, 2]); 
14541485/// ``` 
14551486pub  fn  spare_capacity_mut ( & mut  self )  -> & mut  [ MaybeUninit < T > ]  { 
1456-         & mut   self . buffer [ self . len .. ] 
1487+         self . as_mut_view ( ) . spare_capacity_mut ( ) 
14571488    } 
14581489} 
14591490
0 commit comments