use ffi_helpers::null_pointer_check;
use nalgebra::Quaternion;
use crate::spatialmath::utils::EulerAngles;
fn to_raw_pointer(ea: &EulerAngles) -> *mut EulerAngles {
Box::into_raw(Box::new(*ea))
}
#[no_mangle]
pub unsafe extern "C" fn viam_free_euler_angles_memory(ptr: *mut EulerAngles) {
if ptr.is_null() {
return;
}
let _ = Box::from_raw(ptr);
}
#[no_mangle]
#[deprecated]
pub unsafe extern "C" fn free_euler_angles_memory(ptr: *mut EulerAngles) {
viam_free_euler_angles_memory(ptr)
}
#[no_mangle]
pub extern "C" fn viam_new_euler_angles(roll: f64, pitch: f64, yaw: f64) -> *mut EulerAngles {
to_raw_pointer(&EulerAngles::new(roll, pitch, yaw))
}
#[no_mangle]
#[deprecated]
pub extern "C" fn new_euler_angles(roll: f64, pitch: f64, yaw: f64) -> *mut EulerAngles {
viam_new_euler_angles(roll, pitch, yaw)
}
#[no_mangle]
pub unsafe extern "C" fn viam_euler_angles_from_quaternion(
quat_ptr: *const Quaternion<f64>,
) -> *mut EulerAngles {
null_pointer_check!(quat_ptr);
let euler_angles: EulerAngles = (*quat_ptr).into();
to_raw_pointer(&euler_angles)
}
#[no_mangle]
#[deprecated]
pub unsafe extern "C" fn euler_angles_from_quaternion(
quat_ptr: *const Quaternion<f64>,
) -> *mut EulerAngles {
viam_euler_angles_from_quaternion(quat_ptr)
}