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);
156
156
impl_as_ptr ! ( MaybeUninit <c32>, lapack_sys:: __BindgenComplex<f32 >) ;
157
157
impl_as_ptr ! ( MaybeUninit <c64>, lapack_sys:: __BindgenComplex<f64 >) ;
158
158
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
+
159
183
/// Upper/Lower specification for seveal usages
160
184
#[ derive( Debug , Clone , Copy ) ]
161
185
#[ repr( u8 ) ]
You can’t perform that action at this time.
0 commit comments