use super::guard::ffi_guard;
use super::registry::{get_compiled, get_node, register_compiled, remove_compiled};
use super::types::*;
use crate::compiled::CompiledSdf;
#[no_mangle]
pub extern "C" fn alice_sdf_compile(node: SdfHandle) -> CompiledHandle {
ffi_guard(COMPILED_HANDLE_NULL, || {
let sdf_node = match get_node(node) {
Some(n) => n,
None => return COMPILED_HANDLE_NULL,
};
let compiled = CompiledSdf::compile(&sdf_node);
register_compiled(compiled)
})
}
#[no_mangle]
pub extern "C" fn alice_sdf_free_compiled(compiled: CompiledHandle) {
ffi_guard((), || {
if !compiled.is_null() {
remove_compiled(compiled);
}
});
}
#[no_mangle]
pub extern "C" fn alice_sdf_compiled_instruction_count(compiled: CompiledHandle) -> u32 {
ffi_guard(0, || {
get_compiled(compiled).map_or(0, |c| c.instruction_count() as u32)
})
}