@@ -2,6 +2,8 @@ use core::iter::FusedIterator;
22use core:: ptr:: { self , NonNull } ;
33use core:: { fmt, mem} ;
44
5+ use crate :: alloc:: { Allocator , Global } ;
6+
57use super :: { count, Iter , VecDeque } ;
68
79/// A draining iterator over the elements of a `VecDeque`.
@@ -11,15 +13,19 @@ use super::{count, Iter, VecDeque};
1113///
1214/// [`drain`]: VecDeque::drain
1315#[ stable( feature = "drain" , since = "1.6.0" ) ]
14- pub struct Drain < ' a , T : ' a > {
16+ pub struct Drain <
17+ ' a ,
18+ T : ' a ,
19+ #[ unstable( feature = "allocator_api" , issue = "32838" ) ] A : Allocator = Global ,
20+ > {
1521 pub ( crate ) after_tail : usize ,
1622 pub ( crate ) after_head : usize ,
1723 pub ( crate ) iter : Iter < ' a , T > ,
18- pub ( crate ) deque : NonNull < VecDeque < T > > ,
24+ pub ( crate ) deque : NonNull < VecDeque < T , A > > ,
1925}
2026
2127#[ stable( feature = "collection_debug" , since = "1.17.0" ) ]
22- impl < T : fmt:: Debug > fmt:: Debug for Drain < ' _ , T > {
28+ impl < T : fmt:: Debug , A : Allocator > fmt:: Debug for Drain < ' _ , T , A > {
2329 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
2430 f. debug_tuple ( "Drain" )
2531 . field ( & self . after_tail )
@@ -30,16 +36,16 @@ impl<T: fmt::Debug> fmt::Debug for Drain<'_, T> {
3036}
3137
3238#[ stable( feature = "drain" , since = "1.6.0" ) ]
33- unsafe impl < T : Sync > Sync for Drain < ' _ , T > { }
39+ unsafe impl < T : Sync , A : Allocator + Sync > Sync for Drain < ' _ , T , A > { }
3440#[ stable( feature = "drain" , since = "1.6.0" ) ]
35- unsafe impl < T : Send > Send for Drain < ' _ , T > { }
41+ unsafe impl < T : Send , A : Allocator + Send > Send for Drain < ' _ , T , A > { }
3642
3743#[ stable( feature = "drain" , since = "1.6.0" ) ]
38- impl < T > Drop for Drain < ' _ , T > {
44+ impl < T , A : Allocator > Drop for Drain < ' _ , T , A > {
3945 fn drop ( & mut self ) {
40- struct DropGuard < ' r , ' a , T > ( & ' r mut Drain < ' a , T > ) ;
46+ struct DropGuard < ' r , ' a , T , A : Allocator > ( & ' r mut Drain < ' a , T , A > ) ;
4147
42- impl < ' r , ' a , T > Drop for DropGuard < ' r , ' a , T > {
48+ impl < ' r , ' a , T , A : Allocator > Drop for DropGuard < ' r , ' a , T , A > {
4349 fn drop ( & mut self ) {
4450 self . 0 . for_each ( drop) ;
4551
@@ -96,7 +102,7 @@ impl<T> Drop for Drain<'_, T> {
96102}
97103
98104#[ stable( feature = "drain" , since = "1.6.0" ) ]
99- impl < T > Iterator for Drain < ' _ , T > {
105+ impl < T , A : Allocator > Iterator for Drain < ' _ , T , A > {
100106 type Item = T ;
101107
102108 #[ inline]
@@ -111,15 +117,15 @@ impl<T> Iterator for Drain<'_, T> {
111117}
112118
113119#[ stable( feature = "drain" , since = "1.6.0" ) ]
114- impl < T > DoubleEndedIterator for Drain < ' _ , T > {
120+ impl < T , A : Allocator > DoubleEndedIterator for Drain < ' _ , T , A > {
115121 #[ inline]
116122 fn next_back ( & mut self ) -> Option < T > {
117123 self . iter . next_back ( ) . map ( |elt| unsafe { ptr:: read ( elt) } )
118124 }
119125}
120126
121127#[ stable( feature = "drain" , since = "1.6.0" ) ]
122- impl < T > ExactSizeIterator for Drain < ' _ , T > { }
128+ impl < T , A : Allocator > ExactSizeIterator for Drain < ' _ , T , A > { }
123129
124130#[ stable( feature = "fused" , since = "1.26.0" ) ]
125- impl < T > FusedIterator for Drain < ' _ , T > { }
131+ impl < T , A : Allocator > FusedIterator for Drain < ' _ , T , A > { }
0 commit comments