rust_tensors/
sparse_matrix.rs1use 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