cplex_rs/parameters/tolerances/
mod.rs1use ffi::{CPXPARAM_MIP_Tolerances_AbsMIPGap, CPXPARAM_MIP_Tolerances_MIPGap};
2
3use crate::errors::{self, Result};
4use crate::parameters::{private, Parameter, ParameterValue};
5
6impl private::Parameter for MIPGap {}
7impl private::Parameter for AbsMIPGap {}
8
9#[derive(Copy, Clone, Debug)]
12pub struct MIPGap(f64);
13
14impl MIPGap {
15 pub fn new(value: f64) -> Result<Self> {
16 if !(0.0..=1.0).contains(&value) {
17 return Err(errors::Input::from_message(
18 "CPXPARAM_MIP_Tolerances_MIPGap cannot be < 0.0 or > 1.0".to_string(),
19 )
20 .into());
21 }
22 Ok(Self(value))
23 }
24}
25
26impl Parameter for MIPGap {
27 fn value(&self) -> ParameterValue {
28 ParameterValue::Double(self.0)
29 }
30
31 fn id(&self) -> u32 {
32 CPXPARAM_MIP_Tolerances_MIPGap
33 }
34}
35
36#[derive(Copy, Clone, Debug)]
39pub struct AbsMIPGap(f64);
40
41impl AbsMIPGap {
42 pub fn new(value: f64) -> Result<Self> {
43 if value < 0.0 {
44 return Err(errors::Input::from_message(
45 "CPXPARAM_MIP_Tolerances_AbsMIPGap cannot be < 0.0".to_string(),
46 )
47 .into());
48 }
49 Ok(Self(value))
50 }
51}
52
53impl Parameter for AbsMIPGap {
54 fn value(&self) -> ParameterValue {
55 ParameterValue::Double(self.0)
56 }
57
58 fn id(&self) -> u32 {
59 CPXPARAM_MIP_Tolerances_AbsMIPGap
60 }
61}