arnaucube
arnaucube/testudoPublic Self-hosted repository
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}