@@ -2,6 +2,8 @@ use core::iter::FusedIterator;
2
2
use core:: ptr:: { self , NonNull } ;
3
3
use core:: { fmt, mem} ;
4
4
5
+ use crate :: alloc:: { Allocator , Global } ;
6
+
5
7
use super :: { count, Iter , VecDeque } ;
6
8
7
9
/// A draining iterator over the elements of a `VecDeque`.
@@ -11,15 +13,15 @@ use super::{count, Iter, VecDeque};
11
13
///
12
14
/// [`drain`]: VecDeque::drain
13
15
#[ stable( feature = "drain" , since = "1.6.0" ) ]
14
- pub struct Drain < ' a , T : ' a > {
16
+ pub struct Drain < ' a , T : ' a , A : Allocator = Global > {
15
17
pub ( crate ) after_tail : usize ,
16
18
pub ( crate ) after_head : usize ,
17
19
pub ( crate ) iter : Iter < ' a , T > ,
18
- pub ( crate ) deque : NonNull < VecDeque < T > > ,
20
+ pub ( crate ) deque : NonNull < VecDeque < T , A > > ,
19
21
}
20
22
21
23
#[ stable( feature = "collection_debug" , since = "1.17.0" ) ]
22
- impl < T : fmt:: Debug > fmt:: Debug for Drain < ' _ , T > {
24
+ impl < T : fmt:: Debug , A : Allocator > fmt:: Debug for Drain < ' _ , T , A > {
23
25
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
24
26
f. debug_tuple ( "Drain" )
25
27
. field ( & self . after_tail )
@@ -30,16 +32,16 @@ impl<T: fmt::Debug> fmt::Debug for Drain<'_, T> {
30
32
}
31
33
32
34
#[ stable( feature = "drain" , since = "1.6.0" ) ]
33
- unsafe impl < T : Sync > Sync for Drain < ' _ , T > { }
35
+ unsafe impl < T : Sync , A : Allocator + Sync > Sync for Drain < ' _ , T , A > { }
34
36
#[ stable( feature = "drain" , since = "1.6.0" ) ]
35
- unsafe impl < T : Send > Send for Drain < ' _ , T > { }
37
+ unsafe impl < T : Send , A : Allocator + Send > Send for Drain < ' _ , T , A > { }
36
38
37
39
#[ stable( feature = "drain" , since = "1.6.0" ) ]
38
- impl < T > Drop for Drain < ' _ , T > {
40
+ impl < T , A : Allocator > Drop for Drain < ' _ , T , A > {
39
41
fn drop ( & mut self ) {
40
- struct DropGuard < ' r , ' a , T > ( & ' r mut Drain < ' a , T > ) ;
42
+ struct DropGuard < ' r , ' a , T , A : Allocator > ( & ' r mut Drain < ' a , T , A > ) ;
41
43
42
- impl < ' r , ' a , T > Drop for DropGuard < ' r , ' a , T > {
44
+ impl < ' r , ' a , T , A : Allocator > Drop for DropGuard < ' r , ' a , T , A > {
43
45
fn drop ( & mut self ) {
44
46
self . 0 . for_each ( drop) ;
45
47
@@ -96,7 +98,7 @@ impl<T> Drop for Drain<'_, T> {
96
98
}
97
99
98
100
#[ stable( feature = "drain" , since = "1.6.0" ) ]
99
- impl < T > Iterator for Drain < ' _ , T > {
101
+ impl < T , A : Allocator > Iterator for Drain < ' _ , T , A > {
100
102
type Item = T ;
101
103
102
104
#[ inline]
@@ -111,15 +113,15 @@ impl<T> Iterator for Drain<'_, T> {
111
113
}
112
114
113
115
#[ stable( feature = "drain" , since = "1.6.0" ) ]
114
- impl < T > DoubleEndedIterator for Drain < ' _ , T > {
116
+ impl < T , A : Allocator > DoubleEndedIterator for Drain < ' _ , T , A > {
115
117
#[ inline]
116
118
fn next_back ( & mut self ) -> Option < T > {
117
119
self . iter . next_back ( ) . map ( |elt| unsafe { ptr:: read ( elt) } )
118
120
}
119
121
}
120
122
121
123
#[ stable( feature = "drain" , since = "1.6.0" ) ]
122
- impl < T > ExactSizeIterator for Drain < ' _ , T > { }
124
+ impl < T , A : Allocator > ExactSizeIterator for Drain < ' _ , T , A > { }
123
125
124
126
#[ stable( feature = "fused" , since = "1.26.0" ) ]
125
- impl < T > FusedIterator for Drain < ' _ , T > { }
127
+ impl < T , A : Allocator > FusedIterator for Drain < ' _ , T , A > { }
0 commit comments