1
2use crate::_mem;
4
5#[derive(Clone)]
6pub struct Var {
7 pub var: Vec<String>,
8 pub var_name: Vec<String>,
9 pub max_mem: u64,
10}
11impl Var {
12 pub fn new() -> Var {
13 Var {
14 var: Vec::new(),
15 var_name: Vec::new(),
16 max_mem:0,
17 }
18 }
19 pub fn new_var(&mut self, name: &str, value: &str) {
21
22
23 self.var.push(value.to_string());
24 self.var_name.push(name.to_string());
25 self._chk_mem();
26
27 }
28 pub fn get_var(&mut self, name: String) -> String {
30 self._chk_mem();
31 let x = self.var_name.iter().position(|x| *x == name);
32 match x {
33 Some(a) => {
34 return self.var[a].clone();
35 }
36 None => {
37 panic!("no var {}", name);
38 }
39 }
40 }
41 pub fn _up_var(&mut self, name: &str, new_val: &str) {
43 let x = self.var_name.iter().position(|x| *x == name).unwrap();
44
45 self.var[x] = new_val.to_string();
46 self._chk_mem();
47
48 }
49 pub fn del_var(&mut self, name: &str) {
50 let x = self.var_name.iter().position(|x| *x == name).unwrap();
51 self.var.remove(x);
52 self.var_name.remove(x);
53 }
54 pub fn _chk_mem(&self){
55 if self.max_mem != 0{
56 let mem_foot = _mem::get_size(self.var.clone()) + _mem::get_size(self.var_name.clone());
57
58
59 if mem_foot > self.max_mem{
60 panic!("You are using too much memory, you are using: {} bytes while you are only allowed to use: {} bytes",mem_foot,self.max_mem);
61 }
66 }
67
68 }
69 pub fn set_max_mem(&mut self, max: u64){
70 self.max_mem = max;
71 }
72 pub fn _dump(&mut self) {
73 for x in 0..self.var_name.len() {
74 print!("{}: ", self.var_name[x]);
75 print!("{}\n", self.var[x]);
76 }
77 }
78}