use crate::Value;
use std::mem::MaybeUninit;
use types;
pub trait Trigonometric {
fn sin(&self) -> Self;
fn sin_e(&self) -> Result<types::Result, Value>;
fn cos(&self) -> Self;
fn cos_e(&self) -> Result<types::Result, Value>;
fn sf_hypot(&self, y: f64) -> Self;
fn sf_hypot_e(&self, y: f64) -> Result<types::Result, Value>;
fn sinc(&self) -> Self;
fn sinc_e(&self) -> Result<types::Result, Value>;
fn complex_sin_e(&self, zi: f64) -> Result<(types::Result, types::Result), Value>;
fn complex_cos_e(&self, zi: f64) -> Result<(types::Result, types::Result), Value>;
fn complex_logsin_e(&self, zi: f64) -> Result<(types::Result, types::Result), Value>;
fn lnsinh(&self) -> Self;
fn lnsinh_e(&self) -> Result<types::Result, Value>;
fn lncosh(&self) -> Self;
fn lncosh_e(&self) -> Result<types::Result, Value>;
fn polar_to_rect(&self, theta: f64) -> Result<(types::Result, types::Result), Value>;
fn rect_to_polar(&self, y: f64) -> Result<(types::Result, types::Result), Value>;
fn angle_restrict_symm(&self) -> Self;
fn angle_restrict_symm_e(&mut self) -> Result<(), Value>;
fn angle_restrict_pos(&self) -> Self;
fn angle_restrict_pos_e(&mut self) -> Result<(), Value>;
fn sin_err_e(&self, dx: f64) -> Result<types::Result, Value>;
fn cos_err_e(&self, dx: f64) -> Result<types::Result, Value>;
}
impl Trigonometric for f64 {
#[doc(alias = "gsl_sf_sin")]
fn sin(&self) -> f64 {
unsafe { ::sys::gsl_sf_sin(*self) }
}
#[doc(alias = "gsl_sf_sin_e")]
fn sin_e(&self) -> Result<types::Result, Value> {
let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
let ret = unsafe { ::sys::gsl_sf_sin_e(*self, result.as_mut_ptr()) };
result_handler!(ret, unsafe { result.assume_init() }.into())
}
#[doc(alias = "gsl_sf_cos")]
fn cos(&self) -> f64 {
unsafe { ::sys::gsl_sf_cos(*self) }
}
#[doc(alias = "gsl_sf_cos_e")]
fn cos_e(&self) -> Result<types::Result, Value> {
let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
let ret = unsafe { ::sys::gsl_sf_cos_e(*self, result.as_mut_ptr()) };
result_handler!(ret, unsafe { result.assume_init() }.into())
}
#[doc(alias = "gsl_sf_hypot")]
fn sf_hypot(&self, y: f64) -> f64 {
unsafe { ::sys::gsl_sf_hypot(*self, y) }
}
#[doc(alias = "gsl_sf_hypot_e")]
fn sf_hypot_e(&self, y: f64) -> Result<types::Result, Value> {
let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
let ret = unsafe { ::sys::gsl_sf_hypot_e(*self, y, result.as_mut_ptr()) };
result_handler!(ret, unsafe { result.assume_init() }.into())
}
#[doc(alias = "gsl_sf_sinc")]
fn sinc(&self) -> f64 {
unsafe { ::sys::gsl_sf_sinc(*self) }
}
#[doc(alias = "gsl_sf_sinc_e")]
fn sinc_e(&self) -> Result<types::Result, Value> {
let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
let ret = unsafe { ::sys::gsl_sf_sinc_e(*self, result.as_mut_ptr()) };
result_handler!(ret, unsafe { result.assume_init() }.into())
}
#[doc(alias = "gsl_sf_complex_sin_e")]
fn complex_sin_e(&self, zi: f64) -> Result<(types::Result, types::Result), Value> {
let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
let mut result2 = MaybeUninit::<sys::gsl_sf_result>::uninit();
let ret = unsafe {
::sys::gsl_sf_complex_sin_e(*self, zi, result.as_mut_ptr(), result2.as_mut_ptr())
};
result_handler!(
ret,
(
unsafe { result.assume_init() }.into(),
unsafe { result2.assume_init() }.into(),
)
)
}
#[doc(alias = "gsl_sf_complex_cos_e")]
fn complex_cos_e(&self, zi: f64) -> Result<(types::Result, types::Result), Value> {
let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
let mut result2 = MaybeUninit::<sys::gsl_sf_result>::uninit();
let ret = unsafe {
::sys::gsl_sf_complex_cos_e(*self, zi, result.as_mut_ptr(), result2.as_mut_ptr())
};
result_handler!(
ret,
(
unsafe { result.assume_init() }.into(),
unsafe { result2.assume_init() }.into(),
)
)
}
#[doc(alias = "gsl_sf_complex_logsin_e")]
fn complex_logsin_e(&self, zi: f64) -> Result<(types::Result, types::Result), Value> {
let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
let mut result2 = MaybeUninit::<sys::gsl_sf_result>::uninit();
let ret = unsafe {
::sys::gsl_sf_complex_logsin_e(*self, zi, result.as_mut_ptr(), result2.as_mut_ptr())
};
result_handler!(
ret,
(
unsafe { result.assume_init() }.into(),
unsafe { result2.assume_init() }.into(),
)
)
}
#[doc(alias = "gsl_sf_lnsinh")]
fn lnsinh(&self) -> f64 {
unsafe { ::sys::gsl_sf_lnsinh(*self) }
}
#[doc(alias = "gsl_sf_lnsinh_e")]
fn lnsinh_e(&self) -> Result<types::Result, Value> {
let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
let ret = unsafe { ::sys::gsl_sf_lnsinh_e(*self, result.as_mut_ptr()) };
result_handler!(ret, unsafe { result.assume_init() }.into())
}
#[doc(alias = "gsl_sf_lncosh")]
fn lncosh(&self) -> f64 {
unsafe { ::sys::gsl_sf_lncosh(*self) }
}
#[doc(alias = "gsl_sf_lncosh_e")]
fn lncosh_e(&self) -> Result<types::Result, Value> {
let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
let ret = unsafe { ::sys::gsl_sf_lncosh_e(*self, result.as_mut_ptr()) };
result_handler!(ret, unsafe { result.assume_init() }.into())
}
#[doc(alias = "gsl_sf_polar_to_rect")]
fn polar_to_rect(&self, theta: f64) -> Result<(types::Result, types::Result), Value> {
let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
let mut result2 = MaybeUninit::<sys::gsl_sf_result>::uninit();
let ret = unsafe {
::sys::gsl_sf_polar_to_rect(*self, theta, result.as_mut_ptr(), result2.as_mut_ptr())
};
result_handler!(
ret,
(
unsafe { result.assume_init() }.into(),
unsafe { result2.assume_init() }.into(),
)
)
}
#[doc(alias = "gsl_sf_rect_to_polar")]
fn rect_to_polar(&self, y: f64) -> Result<(types::Result, types::Result), Value> {
let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
let mut result2 = MaybeUninit::<sys::gsl_sf_result>::uninit();
let ret = unsafe {
::sys::gsl_sf_rect_to_polar(*self, y, result.as_mut_ptr(), result2.as_mut_ptr())
};
result_handler!(
ret,
(
unsafe { result.assume_init() }.into(),
unsafe { result2.assume_init() }.into(),
)
)
}
#[doc(alias = "gsl_sf_angle_restrict_symm")]
fn angle_restrict_symm(&self) -> f64 {
unsafe { ::sys::gsl_sf_angle_restrict_symm(*self) }
}
#[doc(alias = "gsl_sf_angle_restrict_symm_e")]
fn angle_restrict_symm_e(&mut self) -> Result<(), Value> {
let ret = unsafe { ::sys::gsl_sf_angle_restrict_symm_e(self) };
result_handler!(ret, ())
}
#[doc(alias = "gsl_sf_angle_restrict_pos")]
fn angle_restrict_pos(&self) -> f64 {
unsafe { ::sys::gsl_sf_angle_restrict_pos(*self) }
}
#[doc(alias = "gsl_sf_angle_restrict_pos_e")]
fn angle_restrict_pos_e(&mut self) -> Result<(), Value> {
let ret = unsafe { ::sys::gsl_sf_angle_restrict_pos_e(self) };
result_handler!(ret, ())
}
#[doc(alias = "gsl_sf_sin_err_e")]
fn sin_err_e(&self, dx: f64) -> Result<types::Result, Value> {
let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
let ret = unsafe { ::sys::gsl_sf_sin_err_e(*self, dx, result.as_mut_ptr()) };
result_handler!(ret, unsafe { result.assume_init() }.into())
}
#[doc(alias = "gsl_sf_cos_err_e")]
fn cos_err_e(&self, dx: f64) -> Result<types::Result, Value> {
let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
let ret = unsafe { ::sys::gsl_sf_cos_err_e(*self, dx, result.as_mut_ptr()) };
result_handler!(ret, unsafe { result.assume_init() }.into())
}
}