diff --git a/examples/sensitivity.rs b/examples/sensitivity.rs index 15fa154..cf51793 100644 --- a/examples/sensitivity.rs +++ b/examples/sensitivity.rs @@ -6,7 +6,6 @@ extern crate gurobi; use gurobi::*; use std::env::args; -use std::mem::transmute; fn main() { let env = Env::new("").unwrap(); @@ -31,10 +30,7 @@ fn main() { // iterate through unfixed, binary variables in model let vars: Vec<_> = model.get_vars().cloned().collect(); for (v, &orig_x) in vars.iter().zip(orig_sol.iter()) { - let lb = v.get(&model, attr::LB).unwrap(); - let ub = v.get(&model, attr::UB).unwrap(); - let vtype = v.get(&model, attr::VType).unwrap(); - let vtype = unsafe { transmute::<_, u8>(vtype) } as char; + let (vtype, lb, ub) = v.get_type(&model).unwrap(); if lb == 0.0 && ub == 1.0 && (vtype == 'B' || vtype == 'I') { let vname = v.get(&model, attr::VarName).unwrap(); diff --git a/src/model/mod.rs b/src/model/mod.rs index e502129..e7b204a 100644 --- a/src/model/mod.rs +++ b/src/model/mod.rs @@ -178,6 +178,16 @@ pub trait Proxy: ProxyBase { #[derive(Clone)] pub struct Var(Rc>); +impl Var { + pub fn get_type(&self, model: &Model) -> Result<(char, f64, f64)> { + let lb = try!(self.get(&model, attr::exports::LB)); + let ub = try!(self.get(&model, attr::exports::UB)); + let vtype = try!(self.get(&model, attr::exports::VType)); + let vtype = unsafe { transmute::<_, u8>(vtype) } as char; + Ok((vtype, lb, ub)) + } +} + /// Proxy object of a linear constraint #[derive(Clone)] pub struct Constr(Rc>);