datex_core/runtime/
memory.rs

1use std::collections::HashMap;
2use crate::values::reference::Reference;
3// FIXME #105 no-std
4
5#[derive(Debug)]
6pub struct Memory {
7    pointers: HashMap<[u8; 26], Reference>, // all pointers
8}
9
10impl Default for Memory {
11    fn default() -> Self {
12        Self::new()
13    }
14}
15
16impl Memory {
17    pub fn new() -> Memory {
18        Memory {
19            pointers: HashMap::new(),
20        }
21    }
22
23    pub fn get_pointer_by_id(
24        &mut self,
25        address: [u8; 26],
26    ) -> Option<&mut Reference> {
27        self.pointers.get_mut(&address)
28    }
29
30    pub fn get_pointer_by_id_vec(
31        &mut self,
32        address: Vec<u8>,
33    ) -> Option<&mut Reference> {
34        let mut address_array: [u8; 26] = [0; 26];
35        for i in 0..26 {
36            address_array[i] = address[i];
37        }
38        self.get_pointer_by_id(address_array)
39    }
40
41    pub fn get_pointer_ids(&self) -> Vec<[u8; 26]> {
42        let mut ids: Vec<[u8; 26]> = Vec::new();
43        for id in self.pointers.keys() {
44            ids.push(*id);
45        }
46        ids
47    }
48
49    pub fn store_pointer(&mut self, address: [u8; 26], reference: Reference) {
50        self.pointers.insert(address, reference);
51    }
52}