49 lines
988 B
Rust
49 lines
988 B
Rust
use std::collections::HashMap;
|
|
|
|
use crate::item::Item;
|
|
|
|
pub struct Storage {
|
|
keys: HashMap<String, usize>,
|
|
items: Vec<Item>,
|
|
}
|
|
|
|
impl Storage {
|
|
pub fn new() -> Self {
|
|
Storage {
|
|
keys: HashMap::new(),
|
|
items: Vec::new(),
|
|
}
|
|
}
|
|
|
|
pub fn contains_key(&self, key: &str) -> bool {
|
|
self.keys.contains_key(key)
|
|
}
|
|
|
|
pub fn insert(&mut self, key: String, item: Item) {
|
|
let index = self.items.len();
|
|
|
|
self.items.push(item);
|
|
self.keys.insert(key, index);
|
|
}
|
|
|
|
pub fn get_id(&self, key: &str) -> usize {
|
|
self.keys[key]
|
|
}
|
|
|
|
pub fn get_item(&mut self, id: usize) -> &mut Item {
|
|
&mut self.items[id]
|
|
}
|
|
|
|
pub fn item(&self, id: usize) -> &Item {
|
|
&self.items[id]
|
|
}
|
|
|
|
pub fn item_mut(&mut self, id: usize) -> &mut Item {
|
|
&mut self.items[id]
|
|
}
|
|
|
|
pub fn items_mut(&mut self) -> impl Iterator<Item = &mut Item> {
|
|
self.items.iter_mut()
|
|
}
|
|
}
|