datex_core/runtime/
memory.rs1use std::collections::HashMap;
2use crate::values::reference::Reference;
3#[derive(Debug)]
6pub struct Memory {
7 pointers: HashMap<[u8; 26], Reference>, }
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}