testudo/src/macros.rs
src/macros.rsRaw
1macro_rules! try_par {
2 ($(let $name:ident = $f:expr),+) => {
3 $(
4 let mut $name = None;
5 )+
6 rayon::scope(|s| {
7 $(
8 let $name = &mut $name;
9 s.spawn(move |_| {
10 *$name = Some($f);
11 });)+
12 });
13 $(
14 let $name = $name.unwrap()?;
15 )+
16 };
17}
18
19macro_rules! par {
20 ($(let $name:ident = $f:expr),+) => {
21 $(
22 let mut $name = None;
23 )+
24 rayon::scope(|s| {
25 $(
26 let $name = &mut $name;
27 s.spawn(move |_| {
28 *$name = Some($f);
29 });)+
30 });
31 $(
32 let $name = $name.unwrap();
33 )+
34 };
35
36 ($(let ($name1:ident, $name2:ident) = $f:block),+) => {
37 $(
38 let mut $name1 = None;
39 let mut $name2 = None;
40 )+
41 rayon::scope(|s| {
42 $(
43 let $name1 = &mut $name1;
44 let $name2 = &mut $name2;
45 s.spawn(move |_| {
46 let (a, b) = $f;
47 *$name1 = Some(a);
48 *$name2 = Some(b);
49 });)+
50 });
51 $(
52 let $name1 = $name1.unwrap();
53 let $name2 = $name2.unwrap();
54 )+
55 }
56}