11use core:: ops:: { Deref , DerefMut } ;
22
33use super :: Vec ;
4+ use crate :: alloc:: Allocator ;
45use crate :: fmt;
56
67/// Structure wrapping a mutable reference to the last item in a
@@ -11,19 +12,19 @@ use crate::fmt;
1112///
1213/// [`peek_mut`]: Vec::peek_mut
1314#[ unstable( feature = "vec_peek_mut" , issue = "122742" ) ]
14- pub struct PeekMut < ' a , T > {
15- vec : & ' a mut Vec < T > ,
15+ pub struct PeekMut < ' a , T , A : Allocator > {
16+ vec : & ' a mut Vec < T , A > ,
1617}
1718
1819#[ unstable( feature = "vec_peek_mut" , issue = "122742" ) ]
19- impl < T : fmt:: Debug > fmt:: Debug for PeekMut < ' _ , T > {
20+ impl < T : fmt:: Debug , A : Allocator > fmt:: Debug for PeekMut < ' _ , T , A > {
2021 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
2122 f. debug_tuple ( "PeekMut" ) . field ( self . deref ( ) ) . finish ( )
2223 }
2324}
2425
25- impl < ' a , T > PeekMut < ' a , T > {
26- pub ( crate ) fn new ( vec : & ' a mut Vec < T > ) -> Option < Self > {
26+ impl < ' a , T , A : Allocator > PeekMut < ' a , T , A > {
27+ pub ( super ) fn new ( vec : & ' a mut Vec < T , A > ) -> Option < Self > {
2728 if vec. is_empty ( ) { None } else { Some ( Self { vec } ) }
2829 }
2930
@@ -36,17 +37,18 @@ impl<'a, T> PeekMut<'a, T> {
3637}
3738
3839#[ unstable( feature = "vec_peek_mut" , issue = "122742" ) ]
39- impl < ' a , T > Deref for PeekMut < ' a , T > {
40+ impl < ' a , T , A : Allocator > Deref for PeekMut < ' a , T , A > {
4041 type Target = T ;
4142
4243 fn deref ( & self ) -> & Self :: Target {
44+ let idx = self . vec . len ( ) - 1 ;
4345 // SAFETY: PeekMut is only constructed if the vec is non-empty
44- unsafe { self . vec . get_unchecked ( self . vec . len ( ) - 1 ) }
46+ unsafe { self . vec . get_unchecked ( idx ) }
4547 }
4648}
4749
4850#[ unstable( feature = "vec_peek_mut" , issue = "122742" ) ]
49- impl < ' a , T > DerefMut for PeekMut < ' a , T > {
51+ impl < ' a , T , A : Allocator > DerefMut for PeekMut < ' a , T , A > {
5052 fn deref_mut ( & mut self ) -> & mut Self :: Target {
5153 let idx = self . vec . len ( ) - 1 ;
5254 // SAFETY: PeekMut is only constructed if the vec is non-empty
0 commit comments