use eunomia::NumericElement;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SparseFormat {
Coo,
Csr,
Csc,
Block,
}
pub trait SparseStorage<T: NumericElement> {
fn nrows(&self) -> usize;
fn ncols(&self) -> usize;
fn nnz(&self) -> usize;
fn format(&self) -> SparseFormat;
fn get(&self, row: usize, col: usize) -> Option<T>;
}
pub trait SparseStorageMut<T: NumericElement>: SparseStorage<T> {
fn set(&mut self, row: usize, col: usize, value: T);
fn add(&mut self, row: usize, col: usize, delta: T);
fn remove(&mut self, row: usize, col: usize);
fn reserve(&mut self, additional: usize);
fn clear(&mut self);
}