Skip to content

Commit a37a03b

Browse files
committed
add push for hashvar int and str vec
var <name_vec> str vec push >> string/lxstring/var <name> var <name_vec> int vec push >> lx/rv/var <name>
1 parent d31a727 commit a37a03b

File tree

2 files changed

+74
-4
lines changed

2 files changed

+74
-4
lines changed

src/funcs/var.rs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,38 @@ pub fn var(
1818
if cmd[3].trim() == "vec" {
1919
if cmd[4].trim() == "push" {
2020
// var <name_vec> str vec push >> string/lxstring/var <name>
21+
if cmd[6] == "string".trim() || cmd[6] == "lxstring".trim() || cmd[6] == "var" {
22+
let mut new_vec: Vec<String> = vec![];
23+
match hash_vars.hash_str_vec.get(cmd[1]) {
24+
Some(value) => new_vec = value.to_vec(),
25+
_ => errors::var_error(cmd[3].trim(), b, l),
26+
}
27+
if cmd[6] == "string".trim() {
28+
new_vec.push(vars.string.clone());
29+
if let Some(x) = hash_vars.hash_str_vec.get_mut(cmd[1]) {
30+
*x = new_vec;
31+
}
32+
} else if cmd[6] == "lxstring".trim() {
33+
new_vec.push(vars.lxstring.clone());
34+
if let Some(x) = hash_vars.hash_str_vec.get_mut(cmd[1]) {
35+
*x = new_vec;
36+
}
37+
} else if cmd[6] == "var" {
38+
let mut var_value: String = "".to_string();
39+
match hash_vars.hash_str.get(cmd[7].trim()) {
40+
Some(value) => var_value = value.to_string(),
41+
_ => errors::var_error(cmd[7].trim(), b, l),
42+
}
43+
new_vec.push(var_value.clone());
44+
if let Some(x) = hash_vars.hash_str_vec.get_mut(cmd[1]) {
45+
*x = new_vec;
46+
}
47+
} else {
48+
errors::args_error(b, l);
49+
}
50+
} else {
51+
errors::args_error(b, l);
52+
}
2153
} else if cmd[4] == ">>" {
2254
let lits: Vec<&str> = statement.split(">>").collect();
2355
let value: String = lits[1].trim().to_string();
@@ -45,6 +77,38 @@ pub fn var(
4577
if cmd[3].trim() == "vec" {
4678
if cmd[4].trim() == "push" {
4779
// var <name_vec> int vec push >> lx/rv/var <name>
80+
if cmd[6] == "lx".trim() || cmd[6] == "rv".trim() || cmd[6] == "var" {
81+
let mut new_vec: Vec<f64> = vec![];
82+
match hash_vars.hash_int_vec.get(cmd[1]) {
83+
Some(value) => new_vec = value.to_vec(),
84+
_ => errors::var_error(cmd[3].trim(), b, l),
85+
}
86+
if cmd[6] == "lx".trim() {
87+
new_vec.push(vars.lx.clone());
88+
if let Some(x) = hash_vars.hash_int_vec.get_mut(cmd[1]) {
89+
*x = new_vec;
90+
}
91+
} else if cmd[6] == "rv".trim() {
92+
new_vec.push(vars.rv.clone());
93+
if let Some(x) = hash_vars.hash_int_vec.get_mut(cmd[1]) {
94+
*x = new_vec;
95+
}
96+
} else if cmd[6] == "var" {
97+
let mut var_value: f64 = 0.0;
98+
match hash_vars.hash_int.get(cmd[7].trim()) {
99+
Some(&value) => var_value = value,
100+
_ => errors::var_error(cmd[7].trim(), b, l),
101+
}
102+
new_vec.push(var_value.clone());
103+
if let Some(x) = hash_vars.hash_int_vec.get_mut(cmd[1]) {
104+
*x = new_vec;
105+
}
106+
} else {
107+
errors::args_error(b, l);
108+
}
109+
} else {
110+
errors::args_error(b, l);
111+
}
48112
} else if cmd[4] == ">>" {
49113
let lits: Vec<&str> = statement.split(">>").collect();
50114
let value: String = lits[1].trim().to_string();

src/tests/vars_test.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,9 @@ pub fn var_works() {
146146

147147
// var <name_vec> int vec lx/rv/var <name> >> [2] -> store the value of <name_vec[2]> in lx/rv/<name>
148148

149-
hash_vars.hash_int_vec.insert("test".to_string(), [1.0, 1.1, 2.1].to_vec());
149+
hash_vars
150+
.hash_int_vec
151+
.insert("test".to_string(), [1.0, 1.1, 2.1].to_vec());
150152
hash_vars.hash_int.insert("name".to_string(), 0.0);
151153

152154
statement = "var test int vec lx >> [1]";
@@ -165,13 +167,17 @@ pub fn var_works() {
165167
match hash_vars.hash_int.get("name") {
166168
Some(&value) => assert_f64(value, 2.1, statement),
167169
_ => assert_str("fail", "something", statement),
168-
169170
}
170171

171172
// var <name_vec> str vec string/lxstring/var <name> >> [2] -> store the value of <name_vec[2]> in string/lxstring/<name>
172173

173-
hash_vars.hash_str_vec.insert("test".to_string(), ["r".to_string(), "a".to_string(), "m".to_string()].to_vec());
174-
hash_vars.hash_str.insert("name".to_string(), "".to_string());
174+
hash_vars.hash_str_vec.insert(
175+
"test".to_string(),
176+
["r".to_string(), "a".to_string(), "m".to_string()].to_vec(),
177+
);
178+
hash_vars
179+
.hash_str
180+
.insert("name".to_string(), "".to_string());
175181

176182
statement = "var test str vec string >> [0]";
177183
cmd = statement.split(" ").collect();

0 commit comments

Comments
 (0)