use smos_domain::{Fact, NliResult};
pub(crate) struct ScanState<'a> {
merge_pick: Option<(Fact, NliResult)>,
last_observed_nli: Option<NliResult>,
nli_observed: bool,
pool: &'a mut Vec<Fact>,
}
impl<'a> ScanState<'a> {
pub(crate) fn new(pool: &'a mut Vec<Fact>) -> Self {
Self {
merge_pick: None,
last_observed_nli: None,
nli_observed: false,
pool,
}
}
pub(crate) fn mark_nli_observed(&mut self) {
self.nli_observed = true;
}
pub(crate) fn has_merge_pick(&self) -> bool {
self.merge_pick.is_some()
}
pub(crate) fn commit_merge_pick(&mut self, existing: Fact, nli: NliResult) {
self.merge_pick = Some((existing, nli));
}
pub(crate) fn observe_other_verdict(&mut self, nli: NliResult) {
self.last_observed_nli = Some(nli);
}
pub(crate) fn take_merge_pick(&mut self) -> Option<(Fact, NliResult)> {
self.merge_pick.take()
}
pub(crate) fn take_last_observed_nli(&mut self) -> Option<NliResult> {
self.last_observed_nli.take()
}
pub(crate) fn nli_observed(&self) -> bool {
self.nli_observed
}
pub(crate) fn pool_mut(&mut self) -> &mut Vec<Fact> {
self.pool
}
}