diff --git a/src/core/database.rs b/src/core/database.rs index 63af81b0..e050be74 100644 --- a/src/core/database.rs +++ b/src/core/database.rs @@ -210,7 +210,7 @@ impl DataBase { match self.params[layer].get_mut(name) { Some(d) => d.set_as_array(&pos.to_string(), val), None => { - setter::array(self, name, vec![], layer)?; + ArrayData::set(&mut self.params[layer], name, vec![])?; self.set_layer_array_elem(name, val, layer, pos) }, } @@ -237,13 +237,15 @@ impl DataBase { } pub fn set_array(&mut self, name: &str, v: Vec, layer: Option) -> Result<(), String> { + self.write_check(name)?; let layer = self.get_target_layer(name, layer); - setter::array(self, name, v, layer) + ArrayData::set(&mut self.params[layer], name, v) } pub fn set_assoc(&mut self, name: &str, layer: Option) -> Result<(), String> { + self.write_check(name)?; let layer = self.get_target_layer(name, layer); - setter::assoc(self, name, layer) + AssocData::set(&mut self.params[layer], name) } pub fn push_local(&mut self) { diff --git a/src/core/database/data/array.rs b/src/core/database/data/array.rs index 1378e156..3c3c4f51 100644 --- a/src/core/database/data/array.rs +++ b/src/core/database/data/array.rs @@ -12,19 +12,15 @@ pub struct ArrayData { impl From> for ArrayData { fn from(v: Vec) -> Self { let mut ans = Self { body: HashMap::new() }; - - for i in 0..v.len() { - ans.body.insert(i, v[i].clone()); - } - + v.into_iter() + .enumerate() + .for_each(|(i, e)| {ans.body.insert(i, e);}); ans } } impl Data for ArrayData { - fn boxed_clone(&self) -> Box { - Box::new(self.clone()) - } + fn boxed_clone(&self) -> Box { Box::new(self.clone()) } fn print_body(&self) -> String { let mut formatted = String::new(); @@ -69,6 +65,11 @@ impl Data for ArrayData { } impl ArrayData { + pub fn set(db_layer: &mut HashMap>, name: &str, v: Vec) -> Result<(), String> { + db_layer.insert(name.to_string(), Box::new(ArrayData::from(v))); + Ok(()) + } + pub fn values(&self) -> Vec { let mut keys: Vec = self.body.iter().map(|e| e.0.clone()).collect(); keys.sort(); diff --git a/src/core/database/data/assoc.rs b/src/core/database/data/assoc.rs index 040b6dbb..72b3bfee 100644 --- a/src/core/database/data/assoc.rs +++ b/src/core/database/data/assoc.rs @@ -59,6 +59,11 @@ impl Data for AssocData { } impl AssocData { + pub fn set(db_layer: &mut HashMap>, name: &str) -> Result<(), String> { + db_layer.insert(name.to_string(), Box::new(AssocData::default())); + Ok(()) + } + pub fn get(&self, key: &str) -> Option { self.body.get(key).cloned() } @@ -70,25 +75,4 @@ impl AssocData { pub fn values(&self) -> Vec { self.body.iter().map(|e| e.1.clone()).collect() } - - /* - pub fn set(&mut self, key: &String, val: &String) -> bool { - self.body.insert(key.to_string(), val.to_string()); - true - } - - pub fn print(&self, k: &str) { - let mut formatted = String::new(); - formatted += "("; - for k in self.keys() { - let v = self.get(&k).unwrap_or("".to_string()); - formatted += &format!("[{}]=\"{}\" ", k, v); - } - if formatted.ends_with(" ") { - formatted.pop(); - } - formatted += ")"; - println!("{}={}", k.to_string(), formatted); - } - */ } diff --git a/src/core/database/setter.rs b/src/core/database/setter.rs index 15e83d53..787f59dd 100644 --- a/src/core/database/setter.rs +++ b/src/core/database/setter.rs @@ -2,7 +2,6 @@ //SPDXLicense-Identifier: BSD-3-Clause use crate::core::DataBase; -use crate::core::database::{ArrayData, AssocData}; use crate::utils::{random, clock}; use std::{env, process}; use super::getter; @@ -35,16 +34,3 @@ pub fn flag(db: &mut DataBase, name: &str, flag: char) { None => {rf.insert(name.to_string(), flag.to_string()); }, } } - -pub fn array(db: &mut DataBase, name: &str, v: Vec, layer: usize) -> Result<(), String> { - db.write_check(name)?; - db.params[layer].insert(name.to_string(), Box::new(ArrayData::from(v))); - Ok(()) -} - - -pub fn assoc(db: &mut DataBase, name: &str, layer: usize) -> Result<(), String> { - db.write_check(name)?; - db.params[layer].insert(name.to_string(), Box::new(AssocData::default())); - Ok(()) -} diff --git a/test/ok b/test/ok index dca1e47d..1bd62e29 100644 --- a/test/ok +++ b/test/ok @@ -6,6 +6,6 @@ ./test_builtins.bash ./test_others.bash ./test_calculation.bash -./test_compound.bash ./test_parameters.bash +./test_compound.bash ./test_job.bash