1use super::mem::AdressManager;
2
3#[derive(Clone)]
5pub struct Variabel {
6 pub size: u64,
7 pub name: String,
8 adrmng: AdressManager,
9
10 initalized: bool,
11}
12
13impl Variabel {
14 pub fn new(typ: VarDataType, name: &String, adrmng: & AdressManager) -> Self {
15 let size: u64 = match typ {
16 VarDataType::Custom(x) => x,
17 VarDataType::I16 => 2,
18 VarDataType::I32 => 4,
19 VarDataType::I64 => 8,
20 VarDataType::U16 => 2,
21 VarDataType::U32 => 4,
22 VarDataType::U64 => 8,
23 };
24
25 Self {
26 size: size,
27 name: name.to_string(),
28 adrmng: adrmng.to_owned(),
29 initalized: false,
30 }
31 }
32
33 pub fn adr(&self) -> u64 {
35 self.adrmng.get_adr(&self.name) as u64
36 }
37
38 pub fn init(&mut self) {
39 if self.initalized {
40 self.adrmng.reg_var(&self.name, self.size);
41 self.initalized = false;
42 }
43 }
44}
45
46pub enum VarDataType {
48 U16, I16,
49 U32, I32,
50 U64, I64,
51
52 Custom(u64),
53}