#![no_std]
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
pub use CASADI_NP as NUM_STATIC_PARAMETERS;
pub use CASADI_NU as NUM_DECISION_VARIABLES;
use libc::{c_double, c_int};
extern "C" {
fn icasadi_cost_(
u: *const c_double,
casadi_static_params: *const c_double,
cost_value: *mut c_double,
) -> c_int;
fn icasadi_grad_(
u: *const c_double,
casadi_static_params: *const c_double,
cost_jacobian: *mut c_double,
) -> c_int;
fn icasadi_constraints_as_penalty_(
u: *const c_double,
casadi_static_params: *const c_double,
constraints_as_penalty: *mut c_double,
) -> c_int;
}
pub fn icasadi_cost(u: &[f64], casadi_static_params: &[f64], cost_value: &mut f64) -> c_int {
unsafe { icasadi_cost_(u.as_ptr(), casadi_static_params.as_ptr(), cost_value) }
}
pub fn icasadi_grad(u: &[f64], casadi_static_params: &[f64], cost_jacobian: &mut [f64]) -> c_int {
unsafe {
icasadi_grad_(
u.as_ptr(),
casadi_static_params.as_ptr(),
cost_jacobian.as_mut_ptr(),
)
}
}
pub fn icasadi_constraints_as_penalty(u: &[f64], casadi_static_params: &[f64], constraints_as_penalty: &mut [f64]) -> c_int {
unsafe {
icasadi_constraints_as_penalty_(
u.as_ptr(),
casadi_static_params.as_ptr(),
constraints_as_penalty.as_mut_ptr(),
)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn tst_num_static() {
let _np = NUM_STATIC_PARAMETERS;
}
#[test]
fn tst_num_decision_var() {
let _nu = NUM_DECISION_VARIABLES;
}
}