Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
ryuichiueda committed Jan 11, 2025
1 parent 6800570 commit 9db94d9
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 30 deletions.
28 changes: 9 additions & 19 deletions src/core/database.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ impl DataBase {
return Ok(ans);
}

if let Some(d) = self.get_clone(name).as_mut() {
if let Some(d) = getter::clone(self, name).as_mut() {
let val = d.get_as_single().unwrap_or_default();
return Ok(val);
}
Expand Down Expand Up @@ -98,16 +98,6 @@ impl DataBase {
None
}

fn get_clone(&mut self, name: &str) -> Option<Box<dyn Data>> {
let num = self.params.len();
for layer in (0..num).rev() {
if let Some(v) = self.params[layer].get_mut(name) {
return Some(v.clone());
}
}
None
}

pub fn has_value(&mut self, name: &str) -> bool {
let num = self.params.len();
for layer in (0..num).rev() {
Expand All @@ -119,7 +109,7 @@ impl DataBase {
}

pub fn len(&mut self, key: &str) -> usize {
match self.get_clone(key).as_mut() {
match getter::clone(self, key).as_mut() {
Some(d) => d.len(),
_ => 0,
}
Expand All @@ -131,7 +121,7 @@ impl DataBase {
return self.position_parameters[layer].clone();
}

match self.get_clone(name).as_mut() {
match getter::clone(self, name).as_mut() {
Some(d) => {
match d.get_all_as_array() {
Some(v) => v,
Expand All @@ -143,14 +133,14 @@ impl DataBase {
}

pub fn is_array(&mut self, name: &str) -> bool {
match self.get_clone(name).as_mut() {
match getter::clone(self, name).as_mut() {
Some(d) => return d.is_array(),
_ => false,
}
}

pub fn is_assoc(&mut self, key: &str) -> bool {
match self.get_clone(key) {
match getter::clone(self, key) {
Some(d) => d.is_assoc(),
None => false,
}
Expand All @@ -177,10 +167,10 @@ impl DataBase {
return Err(error::readonly(name));
}

match env::var(name) {
Ok(_) => env::set_var(name, val),
_ => {},
if env::var(name).is_ok() {
env::set_var(name, val);
}

match self.params[layer].get_mut(name) {
Some(d) => {
if d.is_single() {
Expand Down Expand Up @@ -373,7 +363,7 @@ impl DataBase {
}

pub fn print(&mut self, name: &str) {
if let Some(d) = self.get_clone(name) {
if let Some(d) = getter::clone(self, name) {
d.print_with_name(name);
}else if let Some(f) = self.functions.get(name) {
println!("{}", &f.text);
Expand Down
35 changes: 24 additions & 11 deletions src/core/database/getter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
//SPDXLicense-Identifier: BSD-3-Clause

use crate::core::DataBase;
use crate::core::database::Data;

pub fn special_param(db :&DataBase, name: &str) -> Option<String> {
let val = match name {
Expand Down Expand Up @@ -46,19 +47,31 @@ pub fn special_variable(db: &mut DataBase, name: &str) -> Option<String> {
}

pub fn array_elem(db: &mut DataBase, name: &str, pos: &str) -> Result<String, String> {
match db.get_clone(name).as_mut() {
Some(d) => {
if d.is_assoc() {
if let Some(ans) = d.get_as_assoc(pos) {
return Ok(ans);
}
}
if d.is_array() {
return d.get_as_array(pos);
let layer = match db.get_layer_pos(name) {
Some(n) => n,
_ => return Ok("".to_string()),
};

if let Some(d) = db.params[layer].get_mut(name) {
if d.is_assoc() {
if let Some(ans) = d.get_as_assoc(pos) {
return Ok(ans);
}
},
None => {},
}
if d.is_array() {
return d.get_as_array(pos);
}
}

Ok("".to_string())
}

pub fn clone(db: &mut DataBase, name: &str) -> Option<Box<dyn Data>> {
let num = db.params.len();
for layer in (0..num).rev() {
if let Some(v) = db.params[layer].get_mut(name) {
return Some(v.clone());
}
}
None
}

0 comments on commit 9db94d9

Please sign in to comment.