1
1
use core:: ops:: { Deref , DerefMut } ;
2
2
3
3
use super :: Vec ;
4
+ use crate :: alloc:: Allocator ;
4
5
use crate :: fmt;
5
6
6
7
/// Structure wrapping a mutable reference to the last item in a
@@ -11,19 +12,19 @@ use crate::fmt;
11
12
///
12
13
/// [`peek_mut`]: Vec::peek_mut
13
14
#[ 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 > ,
16
17
}
17
18
18
19
#[ 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 > {
20
21
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
21
22
f. debug_tuple ( "PeekMut" ) . field ( self . deref ( ) ) . finish ( )
22
23
}
23
24
}
24
25
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 > {
27
28
if vec. is_empty ( ) { None } else { Some ( Self { vec } ) }
28
29
}
29
30
@@ -36,17 +37,18 @@ impl<'a, T> PeekMut<'a, T> {
36
37
}
37
38
38
39
#[ 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 > {
40
41
type Target = T ;
41
42
42
43
fn deref ( & self ) -> & Self :: Target {
44
+ let idx = self . vec . len ( ) - 1 ;
43
45
// 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 ) }
45
47
}
46
48
}
47
49
48
50
#[ 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 > {
50
52
fn deref_mut ( & mut self ) -> & mut Self :: Target {
51
53
let idx = self . vec . len ( ) - 1 ;
52
54
// SAFETY: PeekMut is only constructed if the vec is non-empty
0 commit comments