forest/shim/machine/
mod.rs1mod manifest;
5pub use manifest::{BuiltinActor, BuiltinActorManifest};
6
7use fvm2::machine::MultiEngine as MultiEngine_v2;
8use fvm3::engine::MultiEngine as MultiEngine_v3;
9use fvm4::engine::MultiEngine as MultiEngine_v4;
10use std::sync::{Arc, LazyLock};
11
12pub static GLOBAL_MULTI_ENGINE: LazyLock<Arc<MultiEngine>> = LazyLock::new(Default::default);
13
14pub struct MultiEngine {
15 pub v2: MultiEngine_v2,
16 pub v3: MultiEngine_v3,
17 pub v4: MultiEngine_v4,
18}
19
20impl Default for MultiEngine {
21 fn default() -> MultiEngine {
22 MultiEngine::new(std::thread::available_parallelism().map(|x| x.get() as u32))
23 }
24}
25
26impl MultiEngine {
27 pub fn new(concurrency: Result<u32, std::io::Error>) -> MultiEngine {
28 let concurrency = concurrency.ok();
29 MultiEngine {
30 v2: Default::default(),
31 v3: concurrency.map_or_else(Default::default, MultiEngine_v3::new),
32 v4: concurrency.map_or_else(Default::default, MultiEngine_v4::new),
33 }
34 }
35}