@@ -33,18 +33,34 @@ impl_as_ptr!(MaybeUninit<c32>, lapack_sys::__BindgenComplex<f32>);
3333impl_as_ptr ! ( MaybeUninit <c64>, lapack_sys:: __BindgenComplex<f64 >) ;
3434
3535pub ( crate ) trait VecAssumeInit {
36- type Target ;
37- unsafe fn assume_init ( self ) -> Self :: Target ;
36+ type Elem ;
37+ unsafe fn assume_init ( self ) -> Vec < Self :: Elem > ;
38+
39+ /// An replacement of unstable API
40+ /// https://doc.rust-lang.org/std/mem/union.MaybeUninit.html#method.slice_assume_init_ref
41+ unsafe fn slice_assume_init_ref ( & self ) -> & [ Self :: Elem ] ;
42+
43+ /// An replacement of unstable API
44+ /// https://doc.rust-lang.org/std/mem/union.MaybeUninit.html#method.slice_assume_init_mut
45+ unsafe fn slice_assume_init_mut ( & mut self ) -> & mut [ Self :: Elem ] ;
3846}
3947
4048impl < T > VecAssumeInit for Vec < MaybeUninit < T > > {
41- type Target = Vec < T > ;
42- unsafe fn assume_init ( self ) -> Self :: Target {
49+ type Elem = T ;
50+ unsafe fn assume_init ( self ) -> Vec < T > {
4351 // FIXME use Vec::into_raw_parts instead after stablized
4452 // https://doc.rust-lang.org/std/vec/struct.Vec.html#method.into_raw_parts
4553 let mut me = std:: mem:: ManuallyDrop :: new ( self ) ;
4654 Vec :: from_raw_parts ( me. as_mut_ptr ( ) as * mut T , me. len ( ) , me. capacity ( ) )
4755 }
56+
57+ unsafe fn slice_assume_init_ref ( & self ) -> & [ T ] {
58+ std:: slice:: from_raw_parts ( self . as_ptr ( ) as * const T , self . len ( ) )
59+ }
60+
61+ unsafe fn slice_assume_init_mut ( & mut self ) -> & mut [ T ] {
62+ std:: slice:: from_raw_parts_mut ( self . as_mut_ptr ( ) as * mut T , self . len ( ) )
63+ }
4864}
4965
5066/// Create a vector without initialization
0 commit comments