numopt 0.2.1

Numerical optimization problem abstractions, solver interfaces, and modeling tools.
Documentation
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]

use libc::{c_int, 
           c_void, 
           c_char,
           c_double};

#[repr(C)] pub struct IpoptProblemInfo { _private: [u8; 0] }

pub const TRUE: c_int = 1;
pub const FALSE: c_int = 0;

pub type IpoptProblem = *mut IpoptProblemInfo;

type Eval_F_CB = extern fn(c_int, 
                           *const c_double, 
                           c_int, 
                           *mut c_double, 
                           *mut c_void) -> c_int;

type Eval_Grad_F_CB = extern fn(c_int, 
                                *const c_double, 
                                c_int,
                                *mut c_double, 
                                *mut c_void) -> c_int;

type Eval_G_CB = extern fn(c_int, 
                           *const c_double, 
                           c_int,
                           c_int, 
                           *mut c_double, 
                           *mut c_void) -> c_int;

type Eval_Jac_G_CB = extern fn(c_int,
                               *const c_double, 
                               c_int,
                               c_int, 
                               c_int,
                               *mut c_int, 
                               *mut c_int, 
                               *mut c_double,
                               *mut c_void) -> c_int;

type Eval_H_CB = extern fn(c_int, 
                           *const c_double, 
                           c_int, 
                           c_double,
                           c_int, 
                           *const c_double, 
                           c_int,
                           c_int,
                           *mut c_int, 
                           *mut c_int, 
                           *mut c_double,
                           *mut c_void) -> c_int;

#[link(name = "ipopt")]
extern {

    pub fn CreateIpoptProblem(n: c_int,
                              x_L: *const c_double,
                              x_U: *const c_double,
                              m: c_int,
                              g_L: *const c_double,
                              g_U: *const c_double,
                              nele_jac: c_int,
                              nele_hess: c_int,
                              index_style: c_int,
                              eval_f: Eval_F_CB,
                              eval_g: Eval_G_CB,
                              eval_grad_f: Eval_Grad_F_CB,
                              eval_jac_g: Eval_Jac_G_CB,
                              eval_h: Eval_H_CB
                             ) -> IpoptProblem;

    pub fn FreeIpoptProblem(ipopt_problem: IpoptProblem) -> ();

    pub fn IpoptSolve(ipopt_problem: IpoptProblem,
                      x: *mut c_double,
                      g: *mut c_double,
                      obj_value: *mut c_double,
                      mult_g: *mut c_double,
                      mult_x_L: *mut c_double,
                      mult_x_U: *mut c_double,
                      user_data: *mut c_void) -> c_int;

    pub fn AddIpoptIntOption(ipopt_problem: IpoptProblem, 
                             keyword: *const c_char, 
                             val: c_int) -> c_int;

    pub fn AddIpoptStrOption(ipopt_problem: IpoptProblem, 
                             keyword: *const c_char, 
                             val: *const c_char) -> c_int;
}