use super::registry::{get_compiled, get_node, register_node, remove_node};
use super::types::*;
use std::ffi::{c_char, CString};
#[no_mangle]
pub extern "C" fn alice_sdf_free(node: SdfHandle) {
if !node.is_null() {
remove_node(node);
}
}
#[no_mangle]
pub extern "C" fn alice_sdf_free_string(s: *mut c_char) {
if !s.is_null() {
unsafe {
let _ = CString::from_raw(s);
}
}
}
#[no_mangle]
pub extern "C" fn alice_sdf_clone(node: SdfHandle) -> SdfHandle {
let sdf_node = match get_node(node) {
Some(n) => n,
None => return SDF_HANDLE_NULL,
};
register_node((*sdf_node).clone())
}
#[no_mangle]
pub extern "C" fn alice_sdf_node_count(node: SdfHandle) -> u32 {
let sdf_node = match get_node(node) {
Some(n) => n,
None => return 0,
};
sdf_node.node_count()
}
#[no_mangle]
pub extern "C" fn alice_sdf_is_valid(node: SdfHandle) -> bool {
get_node(node).is_some()
}
#[no_mangle]
pub extern "C" fn alice_sdf_is_compiled_valid(compiled: CompiledHandle) -> bool {
get_compiled(compiled).is_some()
}