File tree 3 files changed +31
-0
lines changed
src/librustc_data_structures
3 files changed +31
-0
lines changed Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ cfg-if = "0.1.2"
17
17
stable_deref_trait = " 1.0.0"
18
18
parking_lot_core = " 0.2.8"
19
19
rustc-rayon = " 0.1.0"
20
+ rustc-rayon-core = " 0.1.0"
20
21
rustc-hash = " 1.0.1"
21
22
22
23
[dependencies .parking_lot ]
Original file line number Diff line number Diff line change @@ -44,6 +44,7 @@ extern crate parking_lot;
44
44
extern crate cfg_if;
45
45
extern crate stable_deref_trait;
46
46
extern crate rustc_rayon as rayon;
47
+ extern crate rustc_rayon_core as rayon_core;
47
48
extern crate rustc_hash;
48
49
49
50
// See librustc_cratesio_shim/Cargo.toml for a comment explaining this.
Original file line number Diff line number Diff line change @@ -99,6 +99,33 @@ cfg_if! {
99
99
100
100
use std:: cell:: Cell ;
101
101
102
+ #[ derive( Debug ) ]
103
+ pub struct WorkerLocal <T >( OneThread <T >) ;
104
+
105
+ impl <T > WorkerLocal <T > {
106
+ /// Creates a new worker local where the `initial` closure computes the
107
+ /// value this worker local should take for each thread in the thread pool.
108
+ #[ inline]
109
+ pub fn new<F : FnMut ( usize ) -> T >( mut f: F ) -> WorkerLocal <T > {
110
+ WorkerLocal ( OneThread :: new( f( 0 ) ) )
111
+ }
112
+
113
+ /// Returns the worker-local value for each thread
114
+ #[ inline]
115
+ pub fn into_inner( self ) -> Vec <T > {
116
+ vec![ OneThread :: into_inner( self . 0 ) ]
117
+ }
118
+ }
119
+
120
+ impl <T > Deref for WorkerLocal <T > {
121
+ type Target = T ;
122
+
123
+ #[ inline( always) ]
124
+ fn deref( & self ) -> & T {
125
+ & * self . 0
126
+ }
127
+ }
128
+
102
129
#[ derive( Debug ) ]
103
130
pub struct MTLock <T >( T ) ;
104
131
@@ -203,6 +230,8 @@ cfg_if! {
203
230
use std:: thread;
204
231
pub use rayon:: { join, scope} ;
205
232
233
+ pub use rayon_core:: WorkerLocal ;
234
+
206
235
pub use rayon:: iter:: ParallelIterator ;
207
236
use rayon:: iter:: IntoParallelIterator ;
208
237
You can’t perform that action at this time.
0 commit comments