From 663475d40fc7373680264c82cc47ba0a5180d682 Mon Sep 17 00:00:00 2001 From: Ryuichi Ueda Date: Sun, 12 Jan 2025 08:19:14 +0900 Subject: [PATCH] Refactor --- src/core/database.rs | 11 ++++------- src/core/database/data/array.rs | 2 +- src/core/database/data/assoc.rs | 2 +- src/core/database/data/single.rs | 8 ++++++++ src/core/database/data/special.rs | 4 ++-- src/core/database/setter.rs | 10 +++++----- 6 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/core/database.rs b/src/core/database.rs index 627409fd..bf8ec1a5 100644 --- a/src/core/database.rs +++ b/src/core/database.rs @@ -160,15 +160,12 @@ impl DataBase { } fn set_layer_param(&mut self, name: &str, val: &str, layer: usize) -> Result<(), String> { - Self::name_check(name)?; - self.write_check(name)?; - if env::var(name).is_ok() { env::set_var(name, val); } if self.params[layer].get(name).is_none() { - self.params[layer].insert(name.to_string(), Box::new(SingleData::from(""))); + SingleData::set_new_entry(&mut self.params[layer], name, "")?; } self.params[layer].get_mut(name).unwrap().set_as_single(val) @@ -206,7 +203,7 @@ impl DataBase { match self.params[layer].get_mut(name) { Some(d) => d.set_as_array(&pos.to_string(), val), None => { - ArrayData::set(&mut self.params[layer], name, vec![])?; + ArrayData::set_new_entry(&mut self.params[layer], name, vec![])?; self.set_layer_array_elem(name, val, layer, pos) }, } @@ -240,14 +237,14 @@ impl DataBase { Self::name_check(name)?; self.write_check(name)?; let layer = self.get_target_layer(name, layer); - ArrayData::set(&mut self.params[layer], name, v) + ArrayData::set_new_entry(&mut self.params[layer], name, v) } pub fn set_assoc(&mut self, name: &str, layer: Option) -> Result<(), String> { Self::name_check(name)?; self.write_check(name)?; let layer = self.get_target_layer(name, layer); - AssocData::set(&mut self.params[layer], name) + AssocData::set_new_entry(&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 3c3c4f51..515aa7d1 100644 --- a/src/core/database/data/array.rs +++ b/src/core/database/data/array.rs @@ -65,7 +65,7 @@ impl Data for ArrayData { } impl ArrayData { - pub fn set(db_layer: &mut HashMap>, name: &str, v: Vec) -> Result<(), String> { + pub fn set_new_entry(db_layer: &mut HashMap>, name: &str, v: Vec) -> Result<(), String> { db_layer.insert(name.to_string(), Box::new(ArrayData::from(v))); Ok(()) } diff --git a/src/core/database/data/assoc.rs b/src/core/database/data/assoc.rs index 72b3bfee..39d3dad1 100644 --- a/src/core/database/data/assoc.rs +++ b/src/core/database/data/assoc.rs @@ -59,7 +59,7 @@ impl Data for AssocData { } impl AssocData { - pub fn set(db_layer: &mut HashMap>, name: &str) -> Result<(), String> { + pub fn set_new_entry(db_layer: &mut HashMap>, name: &str) -> Result<(), String> { db_layer.insert(name.to_string(), Box::new(AssocData::default())); Ok(()) } diff --git a/src/core/database/data/single.rs b/src/core/database/data/single.rs index f92e53d0..6a7d59fd 100644 --- a/src/core/database/data/single.rs +++ b/src/core/database/data/single.rs @@ -1,6 +1,7 @@ //SPDXFileCopyrightText: 2024 Ryuichi Ueda ryuichiueda@gmail.com //SPDXLicense-Identifier: BSD-3-Clause +use crate::core::HashMap; use super::Data; #[derive(Debug, Clone)] @@ -27,3 +28,10 @@ impl Data for SingleData { fn len(&mut self) -> usize { self.body.chars().count() } fn is_single(&self) -> bool {true} } + +impl SingleData { + pub fn set_new_entry(db_layer: &mut HashMap>, name: &str, value: &str)-> Result<(), String> { + db_layer.insert( name.to_string(), Box::new(SingleData::from(value)) ); + Ok(()) + } +} diff --git a/src/core/database/data/special.rs b/src/core/database/data/special.rs index f4ed4f90..19cf92e4 100644 --- a/src/core/database/data/special.rs +++ b/src/core/database/data/special.rs @@ -41,8 +41,8 @@ impl Data for SpecialData { } impl SpecialData { - pub fn set(db_layer: &mut HashMap>, name: &str, - f: fn(&mut Vec)-> String)-> Result<(), String> { + pub fn set_new_entry(db_layer: &mut HashMap>, name: &str, + f: fn(&mut Vec)-> String)-> Result<(), String> { db_layer.insert( name.to_string(), Box::new(SpecialData::from(f)) ); Ok(()) } diff --git a/src/core/database/setter.rs b/src/core/database/setter.rs index 734998d3..eaa91c0d 100644 --- a/src/core/database/setter.rs +++ b/src/core/database/setter.rs @@ -16,11 +16,11 @@ pub fn initialize(db: &mut DataBase) -> Result<(), String> { db.set_param("HOME", &env::var("HOME").unwrap_or("/".to_string()), None)?; db.set_param("OPTIND", "1", None)?; - SpecialData::set(&mut db.params[0], "SRANDOM", random::get_srandom)?; - SpecialData::set(&mut db.params[0], "RANDOM", random::get_random)?; - SpecialData::set(&mut db.params[0], "EPOCHSECONDS", clock::get_epochseconds)?; - SpecialData::set(&mut db.params[0], "EPOCHREALTIME", clock::get_epochrealtime)?; - SpecialData::set(&mut db.params[0], "SECONDS", clock::get_seconds)?; + SpecialData::set_new_entry(&mut db.params[0], "SRANDOM", random::get_srandom)?; + SpecialData::set_new_entry(&mut db.params[0], "RANDOM", random::get_random)?; + SpecialData::set_new_entry(&mut db.params[0], "EPOCHSECONDS", clock::get_epochseconds)?; + SpecialData::set_new_entry(&mut db.params[0], "EPOCHREALTIME", clock::get_epochrealtime)?; + SpecialData::set_new_entry(&mut db.params[0], "SECONDS", clock::get_seconds)?; getter::special_variable(db, "SECONDS");