use crate::{Scope, ThreadPool};
use core::num::NonZeroUsize;
#[derive(Default, Clone, Copy, Debug)]
pub struct SequentialPool;
#[derive(Clone, Copy)]
pub struct SequentialScope;
impl<'s, 'env, 'scope> Scope<'s, 'env, 'scope> for SequentialScope {
fn run<W>(self, work: W)
where
'scope: 's,
'env: 'scope + 's,
W: FnOnce() + Send + 'scope + 'env,
{
work();
}
}
impl ThreadPool for SequentialPool {
type ScopeRef<'s, 'env, 'scope>
= SequentialScope
where
'scope: 's,
'env: 'scope + 's;
fn scope<'env, 'scope, F>(&'env self, f: F)
where
'env: 'scope,
for<'s> F: FnOnce(SequentialScope) + Send,
{
f(SequentialScope)
}
fn max_num_threads(&self) -> NonZeroUsize {
NonZeroUsize::MIN
}
}
impl ThreadPool for &SequentialPool {
type ScopeRef<'s, 'env, 'scope>
= SequentialScope
where
'scope: 's,
'env: 'scope + 's;
fn scope<'env, 'scope, F>(&'env self, f: F)
where
'env: 'scope,
for<'s> F: FnOnce(SequentialScope) + Send,
{
f(SequentialScope)
}
fn max_num_threads(&self) -> NonZeroUsize {
NonZeroUsize::MIN
}
}