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 = { git = " https://github.com/Zoxc/rayon.git" , branch = " fiber" }
20
+ rustc-rayon-core = { git = " https://github.com/Zoxc/rayon.git" , branch = " fiber" }
20
21
21
22
[dependencies .parking_lot ]
22
23
version = " 0.5"
Original file line number Diff line number Diff line change @@ -45,6 +45,7 @@ extern crate parking_lot;
45
45
extern crate cfg_if;
46
46
extern crate stable_deref_trait;
47
47
extern crate rustc_rayon as rayon;
48
+ extern crate rustc_rayon_core as rayon_core;
48
49
49
50
// See librustc_cratesio_shim/Cargo.toml for a comment explaining this.
50
51
#[ allow( unused_extern_crates) ]
Original file line number Diff line number Diff line change @@ -100,6 +100,33 @@ cfg_if! {
100
100
101
101
use std:: cell:: Cell ;
102
102
103
+ #[ derive( Debug ) ]
104
+ pub struct WorkerLocal <T >( OneThread <T >) ;
105
+
106
+ impl <T > WorkerLocal <T > {
107
+ /// Creates a new worker local where the `initial` closure computes the
108
+ /// value this worker local should take for each thread in the thread pool.
109
+ #[ inline]
110
+ pub fn new<F : FnMut ( usize ) -> T >( mut initial: F ) -> WorkerLocal <T > {
111
+ WorkerLocal ( OneThread :: new( f( 0 ) ) )
112
+ }
113
+
114
+ /// Returns the worker-local value for each thread
115
+ #[ inline]
116
+ pub fn into_inner( self ) -> Vec <T > {
117
+ vec![ self . 0 . into_inner( ) ]
118
+ }
119
+ }
120
+
121
+ impl <T > Deref for WorkerLocal <T > {
122
+ type Target = T ;
123
+
124
+ #[ inline( always) ]
125
+ fn deref( & self ) -> & T {
126
+ & * self . 0
127
+ }
128
+ }
129
+
103
130
#[ derive( Debug ) ]
104
131
pub struct MTLock <T >( T ) ;
105
132
@@ -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