use crate::par_thread_pool::ParThreadPool;
use core::num::NonZeroUsize;
use rayon_core::ThreadPool;
impl ParThreadPool for ThreadPool {
type ScopeRef<'s, 'env, 'scope>
= &'s rayon_core::Scope<'scope>
where
'scope: 's,
'env: 'scope + 's;
fn run_in_scope<'s, 'env, 'scope, W>(s: &Self::ScopeRef<'s, 'env, 'scope>, work: W)
where
'scope: 's,
'env: 'scope + 's,
W: Fn() + Send + 'scope + 'env,
{
s.spawn(move |_| work());
}
fn scoped_computation<'env, 'scope, F>(&'env mut self, f: F)
where
'env: 'scope,
for<'s> F: FnOnce(&'s rayon_core::Scope<'scope>) + Send,
{
self.scope(f)
}
fn max_num_threads(&self) -> NonZeroUsize {
NonZeroUsize::new(self.current_num_threads().max(1)).expect(">0")
}
}
impl ParThreadPool for &rayon_core::ThreadPool {
type ScopeRef<'s, 'env, 'scope>
= &'s rayon_core::Scope<'scope>
where
'scope: 's,
'env: 'scope + 's;
fn run_in_scope<'s, 'env, 'scope, W>(s: &Self::ScopeRef<'s, 'env, 'scope>, work: W)
where
'scope: 's,
'env: 'scope + 's,
W: Fn() + Send + 'scope + 'env,
{
s.spawn(move |_| work());
}
fn scoped_computation<'env, 'scope, F>(&'env mut self, f: F)
where
'env: 'scope,
for<'s> F: FnOnce(&'s rayon_core::Scope<'scope>) + Send,
{
self.scope(f)
}
fn max_num_threads(&self) -> NonZeroUsize {
NonZeroUsize::new(self.current_num_threads().max(1)).expect(">0")
}
}