use tket_json_rs::register::ElementId as RegisterUnit;
#[derive(Debug, Clone, Default)]
pub struct RegisterUnitGenerator {
next_unit: u16,
register: String,
}
impl RegisterUnitGenerator {
pub fn new<'a>(
register: impl ToString,
existing: impl IntoIterator<Item = &'a RegisterUnit>,
) -> Self {
let register = register.to_string();
let mut last_unit: Option<u16> = None;
for reg in existing {
if reg.0 != register {
continue;
}
last_unit = Some(last_unit.unwrap_or_default().max(reg.1[0] as u16));
}
RegisterUnitGenerator {
register,
next_unit: last_unit.map_or(0, |i| i + 1),
}
}
pub fn next(&mut self) -> RegisterUnit {
let unit = self.next_unit;
self.next_unit += 1;
RegisterUnit(self.register.clone(), vec![unit as i64])
}
}