use ffi_helpers::null_pointer_check;
use nalgebra::Quaternion;
use crate::spatialmath::utils::AxisAngle;
fn to_raw_pointer(aa: &AxisAngle) -> *mut AxisAngle {
Box::into_raw(Box::new(*aa))
}
#[no_mangle]
pub unsafe extern "C" fn viam_free_axis_angles_memory(ptr: *mut AxisAngle) {
if ptr.is_null() {
return;
}
let _ = Box::from_raw(ptr);
}
#[no_mangle]
#[deprecated]
pub unsafe extern "C" fn free_axis_angles_memory(ptr: *mut AxisAngle) {
viam_free_axis_angles_memory(ptr)
}
#[no_mangle]
pub extern "C" fn viam_new_axis_angle(x: f64, y: f64, z: f64, theta: f64) -> *mut AxisAngle {
to_raw_pointer(&AxisAngle::new(x, y, z, theta))
}
#[no_mangle]
#[deprecated]
pub extern "C" fn new_axis_angle(x: f64, y: f64, z: f64, theta: f64) -> *mut AxisAngle {
viam_new_axis_angle(x, y, z, theta)
}
#[no_mangle]
pub unsafe extern "C" fn viam_axis_angle_from_quaternion(
quat: *const Quaternion<f64>,
) -> *mut AxisAngle {
null_pointer_check!(quat);
let axis_angle = match (*quat).try_into() {
Ok(aa) => aa,
Err(_err) => AxisAngle::new(0.0, 0.0, 0.0, 0.0),
};
to_raw_pointer(&axis_angle)
}
#[no_mangle]
#[deprecated]
pub unsafe extern "C" fn axis_angle_from_quaternion(
quat: *const Quaternion<f64>,
) -> *mut AxisAngle {
viam_axis_angle_from_quaternion(quat)
}