From 95ba627a9c5e4e6e1d79f7aaff1854eb831511b4 Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Wed, 17 Jan 2024 23:54:52 +0100 Subject: hand context on to Function trait --- src/expression_function.rs | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) (limited to 'src/expression_function.rs') diff --git a/src/expression_function.rs b/src/expression_function.rs index 35eba5f..138891f 100644 --- a/src/expression_function.rs +++ b/src/expression_function.rs @@ -1,12 +1,11 @@ use std::{collections::HashMap, iter::zip}; +use std::sync::Arc; use crate::{ - commonsense_functions, commonsense_operations, functions, complex::Complex, context::Context, expression::Expression, - operation::Operation, - function::{Function, FunctionArgument} + function::{Function, FunctionArgument, EmptyFunction} }; pub struct ExpressionFunction { @@ -38,17 +37,14 @@ impl ExpressionFunction { } impl Function for ExpressionFunction { - fn eval(&self, args: FunctionArgument) -> Result { + fn eval(&self, args: FunctionArgument, ctx: &Context) -> Result { if args.len() == self.args.len() { - let mut vars = HashMap::new(); + let mut nctx = ctx.clone(); for (n, v) in zip(self.args.iter(), args.data().iter()) { - vars.insert(n.to_string(), v.clone()); + nctx.set_variable(n, *v) } - let ctx = Context::new() - .with_variables(vars) - .with_functions(commonsense_functions! {}) - .with_operations(commonsense_operations! {}); - self.expr.evaluate(&ctx) + nctx.set_function(self.name(), Arc::new(EmptyFunction {})); + self.expr.evaluate(&nctx) } else { Err(format!( "{} takes {} parameters", -- cgit v1.2.3-70-g09d2