use std::sync::Arc;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CellSelection {
All,
Zone(Arc<Vec<usize>>),
}
impl CellSelection {
#[must_use]
pub fn zone(cells: Vec<usize>) -> Self {
Self::Zone(Arc::new(cells))
}
#[must_use]
pub fn cells(&self, n_cells: usize) -> Vec<usize> {
match self {
Self::All => (0..n_cells).collect(),
Self::Zone(c) => c.as_ref().clone(),
}
}
#[must_use]
pub fn len(&self, n_cells: usize) -> usize {
match self {
Self::All => n_cells,
Self::Zone(c) => c.len(),
}
}
#[must_use]
pub fn is_empty(&self, n_cells: usize) -> bool {
self.len(n_cells) == 0
}
}