stack_vm/
write_many_table.rs1use crate::table::Table;
4use std::collections::HashMap;
5
6#[derive(Debug, Default)]
29pub struct WriteManyTable<T>(HashMap<String, T>);
30
31impl<T> WriteManyTable<T> {
32 pub fn new() -> WriteManyTable<T> {
34 WriteManyTable(HashMap::new())
35 }
36}
37
38impl<T> Table for WriteManyTable<T> {
39 type Item = T;
40
41 fn insert(&mut self, name: &str, value: T) {
42 let name = String::from(name);
43 self.0.insert(name, value);
44 }
45
46 fn is_empty(&self) -> bool {
47 self.0.is_empty()
48 }
49
50 fn contains_key(&self, name: &str) -> bool {
51 self.0.contains_key(name)
52 }
53
54 fn get(&self, name: &str) -> Option<&T> {
55 self.0.get(name)
56 }
57}
58#[cfg(test)]
59mod test {
60 use super::*;
61 use crate::table::Table;
62
63 #[test]
64 fn new() {
65 let write_many_table: WriteManyTable<usize> = WriteManyTable::new();
66 assert!(write_many_table.is_empty())
67 }
68
69 #[test]
70 fn insert() {
71 let mut write_many_table: WriteManyTable<usize> = WriteManyTable::new();
72 write_many_table.insert("example", 13);
73 assert!(!write_many_table.is_empty());
74 assert_eq!(*write_many_table.get("example").unwrap(), 13);
75 }
76
77 #[test]
78 fn insert_is_mutable() {
79 let mut write_many_table: WriteManyTable<usize> = WriteManyTable::new();
80 write_many_table.insert("example", 13);
81 assert_eq!(*write_many_table.get("example").unwrap(), 13);
82 write_many_table.insert("example", 14);
83 assert_eq!(*write_many_table.get("example").unwrap(), 14);
84 }
85}