55//! are not required to be copyable, and the queue will be sendable if the
66//! contained type is sendable.
77
8- #![ stable ( feature = "rust1" , since = "1.0.0" ) ]
8+ #![ feature( global_co_alloc ) ]
99
10+ #![ stable( feature = "rust1" , since = "1.0.0" ) ]
11+ use core:: alloc;
1012use core:: cmp:: { self , Ordering } ;
1113use core:: fmt;
1214use core:: hash:: { Hash , Hasher } ;
@@ -91,10 +93,13 @@ mod tests;
9193#[ cfg_attr( not( test) , rustc_diagnostic_item = "VecDeque" ) ]
9294#[ stable( feature = "rust1" , since = "1.0.0" ) ]
9395#[ rustc_insignificant_dtor]
96+ // @TODO
9497pub struct VecDeque <
9598 T ,
9699 #[ unstable( feature = "allocator_api" , issue = "32838" ) ] A : Allocator = Global ,
97- > {
100+ >
101+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] :
102+ {
98103 // `self[0]`, if it exists, is `buf[head]`.
99104 // `head < buf.capacity()`, unless `buf.capacity() == 0` when `head == 0`.
100105 head : usize ,
@@ -106,7 +111,8 @@ pub struct VecDeque<
106111}
107112
108113#[ stable( feature = "rust1" , since = "1.0.0" ) ]
109- impl < T : Clone , A : Allocator + Clone > Clone for VecDeque < T , A > {
114+ impl < T : Clone , A : Allocator + Clone > Clone for VecDeque < T , A >
115+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
110116 fn clone ( & self ) -> Self {
111117 let mut deq = Self :: with_capacity_in ( self . len ( ) , self . allocator ( ) . clone ( ) ) ;
112118 deq. extend ( self . iter ( ) . cloned ( ) ) ;
@@ -120,7 +126,8 @@ impl<T: Clone, A: Allocator + Clone> Clone for VecDeque<T, A> {
120126}
121127
122128#[ stable( feature = "rust1" , since = "1.0.0" ) ]
123- unsafe impl < #[ may_dangle] T , A : Allocator > Drop for VecDeque < T , A > {
129+ unsafe impl < #[ may_dangle] T , A : Allocator > Drop for VecDeque < T , A >
130+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
124131 fn drop ( & mut self ) {
125132 /// Runs the destructor for all items in the slice when it gets dropped (normally or
126133 /// during unwinding).
@@ -153,7 +160,8 @@ impl<T> Default for VecDeque<T> {
153160 }
154161}
155162
156- impl < T , A : Allocator > VecDeque < T , A > {
163+ impl < T , A : Allocator > VecDeque < T , A >
164+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
157165 /// Marginally more convenient
158166 #[ inline]
159167 fn ptr ( & self ) -> * mut T {
@@ -442,7 +450,8 @@ impl<T, A: Allocator> VecDeque<T, A> {
442450 mut iter : impl Iterator < Item = T > ,
443451 len : usize ,
444452 ) -> usize {
445- struct Guard < ' a , T , A : Allocator > {
453+ struct Guard < ' a , T , A : Allocator >
454+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
446455 deque : & ' a mut VecDeque < T , A > ,
447456 written : usize ,
448457 }
@@ -561,7 +570,8 @@ impl<T> VecDeque<T> {
561570 }
562571}
563572
564- impl < T , A : Allocator > VecDeque < T , A > {
573+ impl < T , A : Allocator > VecDeque < T , A >
574+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
565575 /// Creates an empty deque.
566576 ///
567577 /// # Examples
@@ -2594,7 +2604,8 @@ impl<T, A: Allocator> VecDeque<T, A> {
25942604 }
25952605}
25962606
2597- impl < T : Clone , A : Allocator > VecDeque < T , A > {
2607+ impl < T : Clone , A : Allocator > VecDeque < T , A >
2608+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
25982609 /// Modifies the deque in-place so that `len()` is equal to new_len,
25992610 /// either by removing excess elements from the back or by appending clones of `value`
26002611 /// to the back.
@@ -2639,7 +2650,8 @@ fn wrap_index(logical_index: usize, capacity: usize) -> usize {
26392650}
26402651
26412652#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2642- impl < T : PartialEq , A : Allocator > PartialEq for VecDeque < T , A > {
2653+ impl < T : PartialEq , A : Allocator > PartialEq for VecDeque < T , A >
2654+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
26432655 fn eq ( & self , other : & Self ) -> bool {
26442656 if self . len != other. len ( ) {
26452657 return false ;
@@ -2678,7 +2690,8 @@ impl<T: PartialEq, A: Allocator> PartialEq for VecDeque<T, A> {
26782690}
26792691
26802692#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2681- impl < T : Eq , A : Allocator > Eq for VecDeque < T , A > { }
2693+ impl < T : Eq , A : Allocator > Eq for VecDeque < T , A >
2694+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : { }
26822695
26832696__impl_slice_eq1 ! { [ ] VecDeque <T , A >, Vec <U , A >, }
26842697__impl_slice_eq1 ! { [ ] VecDeque <T , A >, & [ U ] , }
@@ -2688,22 +2701,25 @@ __impl_slice_eq1! { [const N: usize] VecDeque<T, A>, &[U; N], }
26882701__impl_slice_eq1 ! { [ const N : usize ] VecDeque <T , A >, & mut [ U ; N ] , }
26892702
26902703#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2691- impl < T : PartialOrd , A : Allocator > PartialOrd for VecDeque < T , A > {
2704+ impl < T : PartialOrd , A : Allocator > PartialOrd for VecDeque < T , A >
2705+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
26922706 fn partial_cmp ( & self , other : & Self ) -> Option < Ordering > {
26932707 self . iter ( ) . partial_cmp ( other. iter ( ) )
26942708 }
26952709}
26962710
26972711#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2698- impl < T : Ord , A : Allocator > Ord for VecDeque < T , A > {
2712+ impl < T : Ord , A : Allocator > Ord for VecDeque < T , A >
2713+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
26992714 #[ inline]
27002715 fn cmp ( & self , other : & Self ) -> Ordering {
27012716 self . iter ( ) . cmp ( other. iter ( ) )
27022717 }
27032718}
27042719
27052720#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2706- impl < T : Hash , A : Allocator > Hash for VecDeque < T , A > {
2721+ impl < T : Hash , A : Allocator > Hash for VecDeque < T , A >
2722+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
27072723 fn hash < H : Hasher > ( & self , state : & mut H ) {
27082724 state. write_length_prefix ( self . len ) ;
27092725 // It's not possible to use Hash::hash_slice on slices
@@ -2717,7 +2733,8 @@ impl<T: Hash, A: Allocator> Hash for VecDeque<T, A> {
27172733}
27182734
27192735#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2720- impl < T , A : Allocator > Index < usize > for VecDeque < T , A > {
2736+ impl < T , A : Allocator > Index < usize > for VecDeque < T , A >
2737+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
27212738 type Output = T ;
27222739
27232740 #[ inline]
@@ -2727,7 +2744,8 @@ impl<T, A: Allocator> Index<usize> for VecDeque<T, A> {
27272744}
27282745
27292746#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2730- impl < T , A : Allocator > IndexMut < usize > for VecDeque < T , A > {
2747+ impl < T , A : Allocator > IndexMut < usize > for VecDeque < T , A >
2748+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
27312749 #[ inline]
27322750 fn index_mut ( & mut self , index : usize ) -> & mut T {
27332751 self . get_mut ( index) . expect ( "Out of bounds access" )
@@ -2742,7 +2760,8 @@ impl<T> FromIterator<T> for VecDeque<T> {
27422760}
27432761
27442762#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2745- impl < T , A : Allocator > IntoIterator for VecDeque < T , A > {
2763+ impl < T , A : Allocator > IntoIterator for VecDeque < T , A >
2764+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
27462765 type Item = T ;
27472766 type IntoIter = IntoIter < T , A > ;
27482767
@@ -2754,7 +2773,8 @@ impl<T, A: Allocator> IntoIterator for VecDeque<T, A> {
27542773}
27552774
27562775#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2757- impl < ' a , T , A : Allocator > IntoIterator for & ' a VecDeque < T , A > {
2776+ impl < ' a , T , A : Allocator > IntoIterator for & ' a VecDeque < T , A >
2777+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
27582778 type Item = & ' a T ;
27592779 type IntoIter = Iter < ' a , T > ;
27602780
@@ -2764,7 +2784,8 @@ impl<'a, T, A: Allocator> IntoIterator for &'a VecDeque<T, A> {
27642784}
27652785
27662786#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2767- impl < ' a , T , A : Allocator > IntoIterator for & ' a mut VecDeque < T , A > {
2787+ impl < ' a , T , A : Allocator > IntoIterator for & ' a mut VecDeque < T , A >
2788+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
27682789 type Item = & ' a mut T ;
27692790 type IntoIter = IterMut < ' a , T > ;
27702791
@@ -2774,7 +2795,8 @@ impl<'a, T, A: Allocator> IntoIterator for &'a mut VecDeque<T, A> {
27742795}
27752796
27762797#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2777- impl < T , A : Allocator > Extend < T > for VecDeque < T , A > {
2798+ impl < T , A : Allocator > Extend < T > for VecDeque < T , A >
2799+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
27782800 fn extend < I : IntoIterator < Item = T > > ( & mut self , iter : I ) {
27792801 <Self as SpecExtend < T , I :: IntoIter > >:: spec_extend ( self , iter. into_iter ( ) ) ;
27802802 }
@@ -2791,7 +2813,8 @@ impl<T, A: Allocator> Extend<T> for VecDeque<T, A> {
27912813}
27922814
27932815#[ stable( feature = "extend_ref" , since = "1.2.0" ) ]
2794- impl < ' a , T : ' a + Copy , A : Allocator > Extend < & ' a T > for VecDeque < T , A > {
2816+ impl < ' a , T : ' a + Copy , A : Allocator > Extend < & ' a T > for VecDeque < T , A >
2817+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
27952818 fn extend < I : IntoIterator < Item = & ' a T > > ( & mut self , iter : I ) {
27962819 self . spec_extend ( iter. into_iter ( ) ) ;
27972820 }
@@ -2808,14 +2831,16 @@ impl<'a, T: 'a + Copy, A: Allocator> Extend<&'a T> for VecDeque<T, A> {
28082831}
28092832
28102833#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2811- impl < T : fmt:: Debug , A : Allocator > fmt:: Debug for VecDeque < T , A > {
2834+ impl < T : fmt:: Debug , A : Allocator > fmt:: Debug for VecDeque < T , A >
2835+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
28122836 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
28132837 f. debug_list ( ) . entries ( self . iter ( ) ) . finish ( )
28142838 }
28152839}
28162840
28172841#[ stable( feature = "vecdeque_vec_conversions" , since = "1.10.0" ) ]
2818- impl < T , A : Allocator > From < Vec < T , A > > for VecDeque < T , A > {
2842+ impl < T , A : Allocator > From < Vec < T , A > > for VecDeque < T , A >
2843+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
28192844 /// Turn a [`Vec<T>`] into a [`VecDeque<T>`].
28202845 ///
28212846 /// [`Vec<T>`]: crate::vec::Vec
@@ -2832,7 +2857,8 @@ impl<T, A: Allocator> From<Vec<T, A>> for VecDeque<T, A> {
28322857}
28332858
28342859#[ stable( feature = "vecdeque_vec_conversions" , since = "1.10.0" ) ]
2835- impl < T , A : Allocator > From < VecDeque < T , A > > for Vec < T , A > {
2860+ impl < T , A : Allocator > From < VecDeque < T , A > > for Vec < T , A >
2861+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
28362862 /// Turn a [`VecDeque<T>`] into a [`Vec<T>`].
28372863 ///
28382864 /// [`Vec<T>`]: crate::vec::Vec
0 commit comments