5
5
//! are not required to be copyable, and the queue will be sendable if the
6
6
//! contained type is sendable.
7
7
8
- #![ stable ( feature = "rust1" , since = "1.0.0" ) ]
8
+ #![ feature( global_co_alloc ) ]
9
9
10
+ #![ stable( feature = "rust1" , since = "1.0.0" ) ]
11
+ use core:: alloc;
10
12
use core:: cmp:: { self , Ordering } ;
11
13
use core:: fmt;
12
14
use core:: hash:: { Hash , Hasher } ;
@@ -91,10 +93,13 @@ mod tests;
91
93
#[ cfg_attr( not( test) , rustc_diagnostic_item = "VecDeque" ) ]
92
94
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
93
95
#[ rustc_insignificant_dtor]
96
+ // @TODO
94
97
pub struct VecDeque <
95
98
T ,
96
99
#[ unstable( feature = "allocator_api" , issue = "32838" ) ] A : Allocator = Global ,
97
- > {
100
+ >
101
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] :
102
+ {
98
103
// `self[0]`, if it exists, is `buf[head]`.
99
104
// `head < buf.capacity()`, unless `buf.capacity() == 0` when `head == 0`.
100
105
head : usize ,
@@ -106,7 +111,8 @@ pub struct VecDeque<
106
111
}
107
112
108
113
#[ 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 > ( ) ] : {
110
116
fn clone ( & self ) -> Self {
111
117
let mut deq = Self :: with_capacity_in ( self . len ( ) , self . allocator ( ) . clone ( ) ) ;
112
118
deq. extend ( self . iter ( ) . cloned ( ) ) ;
@@ -120,7 +126,8 @@ impl<T: Clone, A: Allocator + Clone> Clone for VecDeque<T, A> {
120
126
}
121
127
122
128
#[ 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 > ( ) ] : {
124
131
fn drop ( & mut self ) {
125
132
/// Runs the destructor for all items in the slice when it gets dropped (normally or
126
133
/// during unwinding).
@@ -153,7 +160,8 @@ impl<T> Default for VecDeque<T> {
153
160
}
154
161
}
155
162
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 > ( ) ] : {
157
165
/// Marginally more convenient
158
166
#[ inline]
159
167
fn ptr ( & self ) -> * mut T {
@@ -442,7 +450,8 @@ impl<T, A: Allocator> VecDeque<T, A> {
442
450
mut iter : impl Iterator < Item = T > ,
443
451
len : usize ,
444
452
) -> usize {
445
- struct Guard < ' a , T , A : Allocator > {
453
+ struct Guard < ' a , T , A : Allocator >
454
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
446
455
deque : & ' a mut VecDeque < T , A > ,
447
456
written : usize ,
448
457
}
@@ -560,7 +569,8 @@ impl<T> VecDeque<T> {
560
569
}
561
570
}
562
571
563
- impl < T , A : Allocator > VecDeque < T , A > {
572
+ impl < T , A : Allocator > VecDeque < T , A >
573
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
564
574
/// Creates an empty deque.
565
575
///
566
576
/// # Examples
@@ -2593,7 +2603,8 @@ impl<T, A: Allocator> VecDeque<T, A> {
2593
2603
}
2594
2604
}
2595
2605
2596
- impl < T : Clone , A : Allocator > VecDeque < T , A > {
2606
+ impl < T : Clone , A : Allocator > VecDeque < T , A >
2607
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2597
2608
/// Modifies the deque in-place so that `len()` is equal to new_len,
2598
2609
/// either by removing excess elements from the back or by appending clones of `value`
2599
2610
/// to the back.
@@ -2638,7 +2649,8 @@ fn wrap_index(logical_index: usize, capacity: usize) -> usize {
2638
2649
}
2639
2650
2640
2651
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2641
- impl < T : PartialEq , A : Allocator > PartialEq for VecDeque < T , A > {
2652
+ impl < T : PartialEq , A : Allocator > PartialEq for VecDeque < T , A >
2653
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2642
2654
fn eq ( & self , other : & Self ) -> bool {
2643
2655
if self . len != other. len ( ) {
2644
2656
return false ;
@@ -2677,7 +2689,8 @@ impl<T: PartialEq, A: Allocator> PartialEq for VecDeque<T, A> {
2677
2689
}
2678
2690
2679
2691
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2680
- impl < T : Eq , A : Allocator > Eq for VecDeque < T , A > { }
2692
+ impl < T : Eq , A : Allocator > Eq for VecDeque < T , A >
2693
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : { }
2681
2694
2682
2695
__impl_slice_eq1 ! { [ ] VecDeque <T , A >, Vec <U , A >, }
2683
2696
__impl_slice_eq1 ! { [ ] VecDeque <T , A >, & [ U ] , }
@@ -2687,22 +2700,25 @@ __impl_slice_eq1! { [const N: usize] VecDeque<T, A>, &[U; N], }
2687
2700
__impl_slice_eq1 ! { [ const N : usize ] VecDeque <T , A >, & mut [ U ; N ] , }
2688
2701
2689
2702
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2690
- impl < T : PartialOrd , A : Allocator > PartialOrd for VecDeque < T , A > {
2703
+ impl < T : PartialOrd , A : Allocator > PartialOrd for VecDeque < T , A >
2704
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2691
2705
fn partial_cmp ( & self , other : & Self ) -> Option < Ordering > {
2692
2706
self . iter ( ) . partial_cmp ( other. iter ( ) )
2693
2707
}
2694
2708
}
2695
2709
2696
2710
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2697
- impl < T : Ord , A : Allocator > Ord for VecDeque < T , A > {
2711
+ impl < T : Ord , A : Allocator > Ord for VecDeque < T , A >
2712
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2698
2713
#[ inline]
2699
2714
fn cmp ( & self , other : & Self ) -> Ordering {
2700
2715
self . iter ( ) . cmp ( other. iter ( ) )
2701
2716
}
2702
2717
}
2703
2718
2704
2719
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2705
- impl < T : Hash , A : Allocator > Hash for VecDeque < T , A > {
2720
+ impl < T : Hash , A : Allocator > Hash for VecDeque < T , A >
2721
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2706
2722
fn hash < H : Hasher > ( & self , state : & mut H ) {
2707
2723
state. write_length_prefix ( self . len ) ;
2708
2724
// It's not possible to use Hash::hash_slice on slices
@@ -2716,7 +2732,8 @@ impl<T: Hash, A: Allocator> Hash for VecDeque<T, A> {
2716
2732
}
2717
2733
2718
2734
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2719
- impl < T , A : Allocator > Index < usize > for VecDeque < T , A > {
2735
+ impl < T , A : Allocator > Index < usize > for VecDeque < T , A >
2736
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2720
2737
type Output = T ;
2721
2738
2722
2739
#[ inline]
@@ -2726,7 +2743,8 @@ impl<T, A: Allocator> Index<usize> for VecDeque<T, A> {
2726
2743
}
2727
2744
2728
2745
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2729
- impl < T , A : Allocator > IndexMut < usize > for VecDeque < T , A > {
2746
+ impl < T , A : Allocator > IndexMut < usize > for VecDeque < T , A >
2747
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2730
2748
#[ inline]
2731
2749
fn index_mut ( & mut self , index : usize ) -> & mut T {
2732
2750
self . get_mut ( index) . expect ( "Out of bounds access" )
@@ -2741,7 +2759,8 @@ impl<T> FromIterator<T> for VecDeque<T> {
2741
2759
}
2742
2760
2743
2761
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2744
- impl < T , A : Allocator > IntoIterator for VecDeque < T , A > {
2762
+ impl < T , A : Allocator > IntoIterator for VecDeque < T , A >
2763
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2745
2764
type Item = T ;
2746
2765
type IntoIter = IntoIter < T , A > ;
2747
2766
@@ -2753,7 +2772,8 @@ impl<T, A: Allocator> IntoIterator for VecDeque<T, A> {
2753
2772
}
2754
2773
2755
2774
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2756
- impl < ' a , T , A : Allocator > IntoIterator for & ' a VecDeque < T , A > {
2775
+ impl < ' a , T , A : Allocator > IntoIterator for & ' a VecDeque < T , A >
2776
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2757
2777
type Item = & ' a T ;
2758
2778
type IntoIter = Iter < ' a , T > ;
2759
2779
@@ -2763,7 +2783,8 @@ impl<'a, T, A: Allocator> IntoIterator for &'a VecDeque<T, A> {
2763
2783
}
2764
2784
2765
2785
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2766
- impl < ' a , T , A : Allocator > IntoIterator for & ' a mut VecDeque < T , A > {
2786
+ impl < ' a , T , A : Allocator > IntoIterator for & ' a mut VecDeque < T , A >
2787
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2767
2788
type Item = & ' a mut T ;
2768
2789
type IntoIter = IterMut < ' a , T > ;
2769
2790
@@ -2773,7 +2794,8 @@ impl<'a, T, A: Allocator> IntoIterator for &'a mut VecDeque<T, A> {
2773
2794
}
2774
2795
2775
2796
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2776
- impl < T , A : Allocator > Extend < T > for VecDeque < T , A > {
2797
+ impl < T , A : Allocator > Extend < T > for VecDeque < T , A >
2798
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2777
2799
fn extend < I : IntoIterator < Item = T > > ( & mut self , iter : I ) {
2778
2800
<Self as SpecExtend < T , I :: IntoIter > >:: spec_extend ( self , iter. into_iter ( ) ) ;
2779
2801
}
@@ -2790,7 +2812,8 @@ impl<T, A: Allocator> Extend<T> for VecDeque<T, A> {
2790
2812
}
2791
2813
2792
2814
#[ stable( feature = "extend_ref" , since = "1.2.0" ) ]
2793
- impl < ' a , T : ' a + Copy , A : Allocator > Extend < & ' a T > for VecDeque < T , A > {
2815
+ impl < ' a , T : ' a + Copy , A : Allocator > Extend < & ' a T > for VecDeque < T , A >
2816
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2794
2817
fn extend < I : IntoIterator < Item = & ' a T > > ( & mut self , iter : I ) {
2795
2818
self . spec_extend ( iter. into_iter ( ) ) ;
2796
2819
}
@@ -2807,14 +2830,16 @@ impl<'a, T: 'a + Copy, A: Allocator> Extend<&'a T> for VecDeque<T, A> {
2807
2830
}
2808
2831
2809
2832
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2810
- impl < T : fmt:: Debug , A : Allocator > fmt:: Debug for VecDeque < T , A > {
2833
+ impl < T : fmt:: Debug , A : Allocator > fmt:: Debug for VecDeque < T , A >
2834
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2811
2835
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
2812
2836
f. debug_list ( ) . entries ( self . iter ( ) ) . finish ( )
2813
2837
}
2814
2838
}
2815
2839
2816
2840
#[ stable( feature = "vecdeque_vec_conversions" , since = "1.10.0" ) ]
2817
- impl < T , A : Allocator > From < Vec < T , A > > for VecDeque < T , A > {
2841
+ impl < T , A : Allocator > From < Vec < T , A > > for VecDeque < T , A >
2842
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2818
2843
/// Turn a [`Vec<T>`] into a [`VecDeque<T>`].
2819
2844
///
2820
2845
/// [`Vec<T>`]: crate::vec::Vec
@@ -2831,7 +2856,8 @@ impl<T, A: Allocator> From<Vec<T, A>> for VecDeque<T, A> {
2831
2856
}
2832
2857
2833
2858
#[ stable( feature = "vecdeque_vec_conversions" , since = "1.10.0" ) ]
2834
- impl < T , A : Allocator > From < VecDeque < T , A > > for Vec < T , A > {
2859
+ impl < T , A : Allocator > From < VecDeque < T , A > > for Vec < T , A >
2860
+ where [ ( ) ; alloc:: co_alloc_metadata_num_slots :: < A > ( ) ] : {
2835
2861
/// Turn a [`VecDeque<T>`] into a [`Vec<T>`].
2836
2862
///
2837
2863
/// [`Vec<T>`]: crate::vec::Vec
0 commit comments