use cranelift_jit::JITBuilder;
use cranelift_jit::JITModule;
use cranelift_module::FuncId;
use std::collections::HashMap;
mod arc_symbols;
mod array_symbols;
mod control_symbols;
mod math_symbols;
mod object_symbols;
mod v2_symbols;
mod data_access; mod helpers;
mod intrinsics;
mod series;
mod simulation; mod vector;
pub use arc_symbols::{declare_arc_functions, register_arc_symbols};
pub use array_symbols::{declare_array_functions, register_array_symbols};
pub use control_symbols::{declare_control_functions, register_control_symbols};
pub use math_symbols::{declare_math_functions, register_math_symbols};
pub use object_symbols::{declare_object_functions, register_object_symbols};
pub use v2_symbols::{declare_v2_functions, register_v2_symbols};
pub fn register_ffi_symbols(builder: &mut JITBuilder) {
register_array_symbols(builder);
register_object_symbols(builder);
register_math_symbols(builder);
register_control_symbols(builder);
register_arc_symbols(builder);
register_v2_symbols(builder);
}
pub fn declare_ffi_functions(module: &mut JITModule) -> HashMap<String, FuncId> {
let mut ffi_funcs = HashMap::new();
declare_array_functions(module, &mut ffi_funcs);
declare_object_functions(module, &mut ffi_funcs);
declare_math_functions(module, &mut ffi_funcs);
declare_control_functions(module, &mut ffi_funcs);
declare_arc_functions(module, &mut ffi_funcs);
declare_v2_functions(module, &mut ffi_funcs);
ffi_funcs
}