use std::ptr;
use crate::physics::physics_fem;
#[unsafe(no_mangle)]
pub extern "C" fn rssn_physics_fem_solve_poisson_1d(
n_elements: usize,
domain_length: f64,
out_size: *mut usize,
) -> *mut f64 {
match physics_fem::solve_poisson_1d(n_elements, domain_length, |_| 2.0) {
| Ok(res) => {
unsafe {
*out_size = res.len();
}
let mut res = res.into_boxed_slice();
let ptr = res.as_mut_ptr();
std::mem::forget(res);
ptr
},
| Err(_) => {
unsafe {
*out_size = 0;
}
ptr::null_mut()
},
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rssn_free_f64_array(
ptr: *mut f64,
size: usize,
) {
unsafe {
if !ptr.is_null() {
let _ = Box::from_raw(std::ptr::slice_from_raw_parts_mut(ptr, size));
}
}
}