rust_tensors/
sparse_matrix.rs

1use crate::matrix_address::MatrixAddress;
2use crate::sparse_tensor::SparseTensor;
3use std::collections::hash_map::{Iter, IterMut};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone, PartialEq)]
7pub struct SparseMatrix<T> {
8    data: HashMap<MatrixAddress, T>,
9}
10impl<T> SparseTensor<T, MatrixAddress> for SparseMatrix<T> {
11    fn new(address_value_map: HashMap<MatrixAddress, T>) -> SparseMatrix<T> {
12        SparseMatrix {
13            data: address_value_map,
14        }
15    }
16
17    fn get(&self, address: &MatrixAddress) -> Option<&T> {
18        self.data.get(address)
19    }
20
21    fn get_mut(&mut self, address: &MatrixAddress) -> Option<&mut T> {
22        self.data.get_mut(address)
23    }
24
25    fn set(&mut self, address: &MatrixAddress, value: T) -> Option<T> {
26        self.data.insert(*address, value)
27    }
28
29    fn iter(&self) -> Iter<'_, MatrixAddress, T> {
30        self.data.iter()
31    }
32
33    fn iter_mut(&mut self) -> IterMut<'_, MatrixAddress, T> {
34        self.data.iter_mut()
35    }
36}
37
38// To-do: TEST SPARSE MATRIX