File tree Expand file tree Collapse file tree 1 file changed +24
-0
lines changed Expand file tree Collapse file tree 1 file changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -156,6 +156,30 @@ impl_as_ptr!(MaybeUninit<f64>, f64);
156156impl_as_ptr ! ( MaybeUninit <c32>, lapack_sys:: __BindgenComplex<f32 >) ;
157157impl_as_ptr ! ( MaybeUninit <c64>, lapack_sys:: __BindgenComplex<f64 >) ;
158158
159+ pub ( crate ) trait VecAssumeInit {
160+ type Target ;
161+ unsafe fn assume_init ( self ) -> Self :: Target ;
162+ }
163+
164+ macro_rules! impl_vec_assume_init {
165+ ( $e: ty) => {
166+ impl VecAssumeInit for Vec <MaybeUninit <$e>> {
167+ type Target = Vec <$e>;
168+ unsafe fn assume_init( self ) -> Self :: Target {
169+ // FIXME use Vec::into_raw_parts instead after stablized
170+ // https://doc.rust-lang.org/std/vec/struct.Vec.html#method.into_raw_parts
171+ let mut me = std:: mem:: ManuallyDrop :: new( self ) ;
172+ Vec :: from_raw_parts( me. as_mut_ptr( ) as * mut $e, me. len( ) , me. capacity( ) )
173+ }
174+ }
175+ } ;
176+ }
177+
178+ impl_vec_assume_init ! ( f32 ) ;
179+ impl_vec_assume_init ! ( f64 ) ;
180+ impl_vec_assume_init ! ( c32) ;
181+ impl_vec_assume_init ! ( c64) ;
182+
159183/// Upper/Lower specification for seveal usages
160184#[ derive( Debug , Clone , Copy ) ]
161185#[ repr( u8 ) ]
You can’t perform that action at this time.
0 commit comments