use crate::model::core::Model;
use crate::variables::{Val, VarId};
impl Model {
pub fn int(&mut self, min: i32, max: i32) -> VarId {
self.new_var_unchecked(Val::ValI(min), Val::ValI(max))
}
pub fn float(&mut self, min: f64, max: f64) -> VarId {
self.new_var_unchecked(Val::ValF(min), Val::ValF(max))
}
pub fn bool(&mut self) -> VarId {
self.int(0, 1)
}
pub fn intset(&mut self, values: Vec<i32>) -> VarId {
self.props_mut().on_new_var();
self.vars_mut().new_var_with_values(values)
}
pub fn ints(&mut self, n: usize, min: i32, max: i32) -> Vec<VarId> {
self.int_vars(n, min, max).collect()
}
pub fn floats(&mut self, n: usize, min: f64, max: f64) -> Vec<VarId> {
self.float_vars(n, min, max).collect()
}
pub fn bools(&mut self, n: usize) -> Vec<VarId> {
self.int_vars(n, 0, 1).collect()
}
pub fn ints_2d(&mut self, rows: usize, cols: usize, min: i32, max: i32) -> Vec<Vec<VarId>> {
(0..rows)
.map(|_| self.ints(cols, min, max))
.collect()
}
pub fn floats_2d(&mut self, rows: usize, cols: usize, min: f64, max: f64) -> Vec<Vec<VarId>> {
(0..rows)
.map(|_| self.floats(cols, min, max))
.collect()
}
pub fn bools_2d(&mut self, rows: usize, cols: usize) -> Vec<Vec<VarId>> {
(0..rows)
.map(|_| self.bools(cols))
.collect()
}
pub fn ints_3d(&mut self, depth: usize, rows: usize, cols: usize, min: i32, max: i32) -> Vec<Vec<Vec<VarId>>> {
(0..depth)
.map(|_| self.ints_2d(rows, cols, min, max))
.collect()
}
pub fn floats_3d(&mut self, depth: usize, rows: usize, cols: usize, min: f64, max: f64) -> Vec<Vec<Vec<VarId>>> {
(0..depth)
.map(|_| self.floats_2d(rows, cols, min, max))
.collect()
}
pub fn bools_3d(&mut self, depth: usize, rows: usize, cols: usize) -> Vec<Vec<Vec<VarId>>> {
(0..depth)
.map(|_| self.bools_2d(rows, cols))
.collect()
}
}