@@ -2,7 +2,7 @@ use core::{fmt, ops, ptr, slice};
22
33use generic_array:: { ArrayLength , GenericArray } ;
44
5- use __core:: mem:: { self , ManuallyDrop } ;
5+ use __core:: mem:: MaybeUninit ;
66
77use core:: iter:: FromIterator ;
88
@@ -39,7 +39,7 @@ pub struct Vec<T, N>
3939where
4040 N : ArrayLength < T > ,
4141{
42- buffer : ManuallyDrop < GenericArray < T , N > > ,
42+ buffer : MaybeUninit < GenericArray < T , N > > ,
4343 len : usize ,
4444}
4545
5252 /// Constructs a new, empty vector with a fixed capacity of `N`
5353 pub const fn new( ) -> Self {
5454 Vec {
55- buffer: ManuallyDrop :: new ( unsafe { mem :: uninitialized( ) } ) ,
55+ buffer: unsafe { MaybeUninit :: uninitialized( ) } ,
5656 len: 0 ,
5757 }
5858 }
@@ -112,7 +112,7 @@ where
112112 pub ( crate ) unsafe fn pop_unchecked ( & mut self ) -> T {
113113 debug_assert ! ( !self . is_empty( ) ) ;
114114
115- let buffer = self . buffer . as_slice ( ) ;
115+ let buffer = self . buffer . get_ref ( ) ;
116116
117117 self . len -= 1 ;
118118 let item = ptr:: read ( buffer. get_unchecked ( self . len ) ) ;
@@ -132,7 +132,7 @@ where
132132 }
133133
134134 pub ( crate ) unsafe fn push_unchecked ( & mut self , item : T ) {
135- let buffer = self . buffer . as_mut_slice ( ) ;
135+ let buffer = self . buffer . get_mut ( ) ;
136136
137137 // NOTE(ptr::write) the memory slot that we are about to write to is uninitialized. We
138138 // use `ptr::write` to avoid running `T`'s destructor on the uninitialized memory
@@ -314,7 +314,6 @@ where
314314 }
315315}
316316
317-
318317impl < T , N > FromIterator < T > for Vec < T , N >
319318where
320319 N : ArrayLength < T > ,
@@ -345,15 +344,15 @@ where
345344 next : usize ,
346345}
347346
348- impl < T , N > Iterator for IntoIter < T , N >
347+ impl < T , N > Iterator for IntoIter < T , N >
349348where
350349 N : ArrayLength < T > ,
351350{
352351 type Item = T ;
353352 fn next ( & mut self ) -> Option < Self :: Item > {
354353 if self . next < self . vec . len ( ) {
355- let buffer = self . vec . buffer . as_slice ( ) ;
356- let item = unsafe { ptr:: read ( buffer. get_unchecked ( self . next ) ) } ;
354+ let buffer = unsafe { self . vec . buffer . get_ref ( ) } ;
355+ let item = unsafe { ptr:: read ( buffer. get_unchecked ( self . next ) ) } ;
357356 self . next += 1 ;
358357 Some ( item)
359358 } else {
@@ -362,7 +361,7 @@ where
362361 }
363362}
364363
365- impl < T , N > Drop for IntoIter < T , N >
364+ impl < T , N > Drop for IntoIter < T , N >
366365where
367366 N : ArrayLength < T > ,
368367{
@@ -376,18 +375,15 @@ where
376375 }
377376}
378377
379- impl < T , N > IntoIterator for Vec < T , N >
378+ impl < T , N > IntoIterator for Vec < T , N >
380379where
381380 N : ArrayLength < T > ,
382381{
383382 type Item = T ;
384383 type IntoIter = IntoIter < T , N > ;
385384
386385 fn into_iter ( self ) -> Self :: IntoIter {
387- IntoIter {
388- vec : self ,
389- next : 0 ,
390- }
386+ IntoIter { vec : self , next : 0 }
391387 }
392388}
393389
@@ -448,7 +444,7 @@ where
448444 type Target = [ T ] ;
449445
450446 fn deref ( & self ) -> & [ T ] {
451- let buffer = self . buffer . as_slice ( ) ;
447+ let buffer = unsafe { self . buffer . get_ref ( ) } ;
452448 // NOTE(unsafe) avoid bound checks in the slicing operation
453449 // &buffer[..self.len]
454450 unsafe { slice:: from_raw_parts ( buffer. as_ptr ( ) , self . len ) }
@@ -461,7 +457,7 @@ where
461457{
462458 fn deref_mut ( & mut self ) -> & mut [ T ] {
463459 let len = self . len ( ) ;
464- let buffer = self . buffer . as_mut_slice ( ) ;
460+ let buffer = unsafe { self . buffer . get_mut ( ) } ;
465461
466462 // NOTE(unsafe) avoid bound checks in the slicing operation
467463 // &mut buffer[..len]
@@ -521,7 +517,7 @@ mod tests {
521517 }
522518
523519 macro_rules! droppable {
524- ( ) => (
520+ ( ) => {
525521 struct Droppable ;
526522 impl Droppable {
527523 fn new( ) -> Self {
@@ -540,12 +536,11 @@ mod tests {
540536 }
541537
542538 static mut COUNT : i32 = 0 ;
543- )
539+ } ;
544540 }
545541
546542 #[ test]
547543 fn drop ( ) {
548-
549544 droppable ! ( ) ;
550545
551546 {
@@ -660,7 +655,6 @@ mod tests {
660655
661656 #[ test]
662657 fn iter_move_drop ( ) {
663-
664658 droppable ! ( ) ;
665659
666660 {
0 commit comments