use std::collections::HashMap;
use super::atomdict::AtomDict;
use crate::public::traits::CheckedType;
pub struct TableDesc<T: CheckedType> {
elements_table: HashMap<String, usize>, list: Vec<Vec<T>>,
formula_sum: usize,
}
impl<T: CheckedType> TableDesc<T> {
pub fn store_in_table(&mut self, atomdict: &AtomDict<T>, location: usize, neg: bool) {
for (k, v) in atomdict.get_dict().iter() {
if !self.elements_table.contains_key(k) {
let len = self.elements_table.len();
self.elements_table.insert(k.to_string(), len);
self.list.push(generate_vec(self.formula_sum));
}
let value = if neg { -(*v) } else { *v };
self.list[self.elements_table[k]][location] += value;
}
}
pub fn get_list(&self) -> Vec<Vec<T>> {
(self.list).to_vec()
}
pub fn new(formula_sum: usize) -> Self {
Self {
elements_table: HashMap::new(),
list: Vec::new(),
formula_sum,
}
}
}
fn generate_vec<T: CheckedType>(capacity: usize) -> Vec<T> {
vec![T::zero(); capacity]
}