#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[non_exhaustive]
pub enum Order<'a> {
MinFill,
MinDegree,
NestedDissection,
MinFillSampled {
weights: &'a [u32],
},
MinDegreeSampled {
weights: &'a [u32],
},
}
impl<'a> Order<'a> {
pub(super) fn tie_weights(self) -> Option<&'a [u32]> {
match self {
Order::MinFillSampled { weights } | Order::MinDegreeSampled { weights } => {
Some(weights)
}
Order::MinFill | Order::MinDegree | Order::NestedDissection => None,
}
}
pub(super) fn with_tie_weights<'b>(self, weights: &'b [u32]) -> Order<'b> {
match self {
Order::MinFill => Order::MinFill,
Order::MinDegree => Order::MinDegree,
Order::NestedDissection => Order::NestedDissection,
Order::MinFillSampled { .. } => Order::MinFillSampled { weights },
Order::MinDegreeSampled { .. } => Order::MinDegreeSampled { weights },
}
}
pub(super) fn uses_initial_fill_cache(self) -> bool {
matches!(self, Order::MinFillSampled { .. })
}
}