#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crate::trellis::INF_W;
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum Transition {
Pending,
Resolved(Vec<u32>),
}
impl Transition {
#[inline]
pub fn is_resolved(&self) -> bool {
matches!(self, Transition::Resolved(_))
}
#[inline]
pub fn weights(&self) -> Option<&[u32]> {
match self {
Transition::Resolved(w) => Some(w),
Transition::Pending => None,
}
}
#[inline]
pub fn weights_mut(&mut self) -> Option<&mut Vec<u32>> {
match self {
Transition::Resolved(w) => Some(w),
Transition::Pending => None,
}
}
pub fn ensure_resolved(&mut self, size: usize) {
if matches!(self, Transition::Pending) {
*self = Transition::Resolved(vec![INF_W; size]);
}
}
}