macro_rules! try_par {
|
|
($(let $name:ident = $f:expr),+) => {
|
|
$(
|
|
let mut $name = None;
|
|
)+
|
|
rayon::scope(|s| {
|
|
$(
|
|
let $name = &mut $name;
|
|
s.spawn(move |_| {
|
|
*$name = Some($f);
|
|
});)+
|
|
});
|
|
$(
|
|
let $name = $name.unwrap()?;
|
|
)+
|
|
};
|
|
}
|
|
|
|
macro_rules! par {
|
|
($(let $name:ident = $f:expr),+) => {
|
|
$(
|
|
let mut $name = None;
|
|
)+
|
|
rayon::scope(|s| {
|
|
$(
|
|
let $name = &mut $name;
|
|
s.spawn(move |_| {
|
|
*$name = Some($f);
|
|
});)+
|
|
});
|
|
$(
|
|
let $name = $name.unwrap();
|
|
)+
|
|
};
|
|
|
|
($(let ($name1:ident, $name2:ident) = $f:block),+) => {
|
|
$(
|
|
let mut $name1 = None;
|
|
let mut $name2 = None;
|
|
)+
|
|
rayon::scope(|s| {
|
|
$(
|
|
let $name1 = &mut $name1;
|
|
let $name2 = &mut $name2;
|
|
s.spawn(move |_| {
|
|
let (a, b) = $f;
|
|
*$name1 = Some(a);
|
|
*$name2 = Some(b);
|
|
});)+
|
|
});
|
|
$(
|
|
let $name1 = $name1.unwrap();
|
|
let $name2 = $name2.unwrap();
|
|
)+
|
|
}
|
|
}
|