use std::ffi::CString;
use crate::ffi;
use crate::model::GRBModelSense;
use crate::var::GRBVar;
use crate::{model::GRBModel, prelude::GRBCallbackContext};
pub(crate) trait CanBeAddedToModel {
fn get_name(&mut self) -> Option<CString>;
fn add_to_model(self, model: *mut ffi::GRBmodel, name: *const std::ffi::c_char) -> i32;
}
pub(crate) trait AddAsIndicator {
fn add_as_indicator(
self,
model: *mut ffi::GRBmodel,
binvar: GRBVar,
binval: i8,
name: *const std::ffi::c_char,
) -> i32;
}
pub trait IsModelingObject {
fn index(&self) -> usize;
}
pub trait CanBeAddedToCallback {
fn add_cut(self, callback: &mut GRBCallbackContext) -> i32;
fn add_lazy(self, callback: &mut GRBCallbackContext) -> i32;
}
pub trait Objective {
fn set_as_objective(self, model: &mut GRBModel, sense: GRBModelSense);
}
pub mod builder;
pub mod expr;