use super::{Function, F1D, F2D, F3D};
use std::collections::HashMap;
#[derive(Debug, Default)]
pub struct Context<'a> {
functions: HashMap<&'a str, (&'a Function, usize)>,
symbols: HashMap<&'a str, f64>,
}
impl<'a> Context<'a> {
pub fn new() -> Context<'a> {
Context {
functions: HashMap::new(),
symbols: HashMap::new(),
}
}
pub fn add_f1d(&mut self, name: &'a str, new: &'a F1D) {
self.functions.insert(name, (&new.0, 1));
}
pub fn add_f2d(&mut self, name: &'a str, new: &'a F2D) {
self.functions.insert(name, (&new.0, 2));
}
pub fn add_f3d(&mut self, name: &'a str, new: &'a F3D) {
self.functions.insert(name, (&new.0, 3));
}
pub(crate) fn get_func(&self, name: &'a str) -> Option<&(&Function, usize)> {
self.functions.get(name)
}
pub fn add_symbol(&mut self, name: &'a str, value: f64) {
self.symbols.insert(name, value);
}
pub(crate) fn get_symbol(&self, name: &'a str) -> Option<&f64> {
self.symbols.get(name)
}
}