#[cfg(feature = "shroud")]
pub mod thread_spawn_bridge {
use core::{num::NonZeroUsize, pin::Pin};
use phylactery::Soul;
use std::thread;
pub fn broadcast<F: Fn(usize) + Send + Sync>(
parallelism: NonZeroUsize,
function: F,
) -> Pin<Box<Soul<F>>> {
let soul = Box::pin(Soul::new(function));
for index in 0..parallelism.get() {
let lich = soul.as_ref().bind::<dyn Fn(usize) + Send + Sync>();
thread::spawn(move || lich(index));
}
soul
}
}
fn main() {
#[cfg(feature = "shroud")]
thread_spawn_bridge::broadcast(
std::thread::available_parallelism().unwrap_or(core::num::NonZeroUsize::MIN),
&|index| println!("{index}"),
);
}