1
1
use crate :: raw:: Bucket ;
2
- use crate :: raw:: { RawIterRange , RawTable } ;
2
+ use crate :: raw:: { Alloc , RawIterRange , RawTable } ;
3
3
use crate :: scopeguard:: guard;
4
4
use alloc:: alloc:: dealloc;
5
5
use core:: marker:: PhantomData ;
@@ -54,11 +54,11 @@ impl<T> UnindexedProducer for ParIterProducer<T> {
54
54
}
55
55
56
56
/// Parallel iterator which consumes a table and returns elements.
57
- pub struct RawIntoParIter < T > {
58
- table : RawTable < T > ,
57
+ pub struct RawIntoParIter < T , A : Alloc + Clone > {
58
+ table : RawTable < T , A > ,
59
59
}
60
60
61
- impl < T : Send > ParallelIterator for RawIntoParIter < T > {
61
+ impl < T : Send , A : Alloc + Clone > ParallelIterator for RawIntoParIter < T , A > {
62
62
type Item = T ;
63
63
64
64
#[ cfg_attr( feature = "inline-more" , inline) ]
@@ -80,16 +80,16 @@ impl<T: Send> ParallelIterator for RawIntoParIter<T> {
80
80
}
81
81
82
82
/// Parallel iterator which consumes elements without freeing the table storage.
83
- pub struct RawParDrain < ' a , T > {
83
+ pub struct RawParDrain < ' a , T , A : Alloc + Clone > {
84
84
// We don't use a &'a mut RawTable<T> because we want RawParDrain to be
85
85
// covariant over T.
86
- table : NonNull < RawTable < T > > ,
87
- marker : PhantomData < & ' a RawTable < T > > ,
86
+ table : NonNull < RawTable < T , A > > ,
87
+ marker : PhantomData < & ' a RawTable < T , A > > ,
88
88
}
89
89
90
- unsafe impl < T > Send for RawParDrain < ' _ , T > { }
90
+ unsafe impl < T , A : Alloc + Clone > Send for RawParDrain < ' _ , T , A > { }
91
91
92
- impl < T : Send > ParallelIterator for RawParDrain < ' _ , T > {
92
+ impl < T : Send , A : Alloc + Clone > ParallelIterator for RawParDrain < ' _ , T , A > {
93
93
type Item = T ;
94
94
95
95
#[ cfg_attr( feature = "inline-more" , inline) ]
@@ -107,7 +107,7 @@ impl<T: Send> ParallelIterator for RawParDrain<'_, T> {
107
107
}
108
108
}
109
109
110
- impl < T > Drop for RawParDrain < ' _ , T > {
110
+ impl < T , A : Alloc + Clone > Drop for RawParDrain < ' _ , T , A > {
111
111
fn drop ( & mut self ) {
112
112
// If drive_unindexed is not called then simply clear the table.
113
113
unsafe { self . table . as_mut ( ) . clear ( ) }
@@ -166,7 +166,7 @@ impl<T> Drop for ParDrainProducer<T> {
166
166
}
167
167
}
168
168
169
- impl < T > RawTable < T > {
169
+ impl < T , A : Alloc + Clone > RawTable < T , A > {
170
170
/// Returns a parallel iterator over the elements in a `RawTable`.
171
171
#[ cfg_attr( feature = "inline-more" , inline) ]
172
172
pub fn par_iter ( & self ) -> RawParIter < T > {
@@ -177,14 +177,14 @@ impl<T> RawTable<T> {
177
177
178
178
/// Returns a parallel iterator over the elements in a `RawTable`.
179
179
#[ cfg_attr( feature = "inline-more" , inline) ]
180
- pub fn into_par_iter ( self ) -> RawIntoParIter < T > {
180
+ pub fn into_par_iter ( self ) -> RawIntoParIter < T , A > {
181
181
RawIntoParIter { table : self }
182
182
}
183
183
184
184
/// Returns a parallel iterator which consumes all elements of a `RawTable`
185
185
/// without freeing its memory allocation.
186
186
#[ cfg_attr( feature = "inline-more" , inline) ]
187
- pub fn par_drain ( & mut self ) -> RawParDrain < ' _ , T > {
187
+ pub fn par_drain ( & mut self ) -> RawParDrain < ' _ , T , A > {
188
188
RawParDrain {
189
189
table : NonNull :: from ( self ) ,
190
190
marker : PhantomData ,
0 commit comments