use std::rc::Rc;
use pumpkin_core::variables::IntegerVariable;
use super::Task;
use crate::cumulative::options::CumulativePropagatorOptions;
#[derive(Debug, Clone)]
pub(crate) struct CumulativeParameters<Var> {
pub(crate) tasks: Box<[Rc<Task<Var>>]>,
pub(crate) capacity: i32,
pub(crate) options: CumulativePropagatorOptions,
pub(crate) is_infeasible: bool,
}
impl<Var: IntegerVariable + 'static> CumulativeParameters<Var> {
pub(crate) fn new(
tasks: Vec<Task<Var>>,
capacity: i32,
options: CumulativePropagatorOptions,
) -> CumulativeParameters<Var> {
let mut is_infeasible = false;
let tasks = tasks
.into_iter()
.map(|task| {
is_infeasible |= task.resource_usage > capacity;
Rc::new(task)
})
.collect::<Vec<_>>()
.into_boxed_slice();
CumulativeParameters {
tasks: tasks.clone(),
capacity,
options,
is_infeasible,
}
}
}