pub struct SymbolTable<T: Copy> { /* private fields */ }Expand description
A symbol table containing variables, constants, functions, and arrays.
The symbol table is the runtime environment for expression evaluation. It stores all named values that can be referenced in expressions.
§Example
use exprkit::SymbolTable;
let mut table = SymbolTable::<f64>::new();
// Add variables
table.add_variable("x", 1.0);
table.add_variable("y", 2.0);
// Add constants
table.add_constant("pi", std::f64::consts::PI);
// Add arrays
table.add_vector("data", vec![1.0, 2.0, 3.0]);
// Add custom functions
table.add_function("square", Box::new(|args: &[f64]| args[0] * args[0]));Implementations§
Source§impl<T: From<f64> + Into<f64> + Copy> SymbolTable<T>
impl<T: From<f64> + Into<f64> + Copy> SymbolTable<T>
Sourcepub fn add_variable(&mut self, name: &str, initial: T) -> Slot
pub fn add_variable(&mut self, name: &str, initial: T) -> Slot
Adds a variable with the given name and initial value.
Returns a Slot that can be used for direct access to the variable’s value.
Sourcepub fn add_vector(&mut self, name: &str, data: Vec<T>)
pub fn add_vector(&mut self, name: &str, data: Vec<T>)
Adds a vector (array) with the given name and data.
pub fn array_exists(&self, name: &str) -> bool
pub fn string_exists(&self, name: &str) -> bool
pub fn ensure_variable(&mut self, name: &str) -> Slot
pub fn ensure_array(&mut self, name: &str, size: usize)
pub fn variable_slot(&self, name: &str) -> Option<Slot>
pub fn array_len(&self, name: &str) -> Option<usize>
pub fn array_data(&self, name: &str) -> Option<&[T]>
pub fn set_slot(&mut self, slot: Slot, value: T)
pub fn get_slot(&self, slot: Slot) -> T
pub fn set_value(&mut self, name: &str, value: T)
pub fn set_null(&mut self, name: &str)
pub fn value_of(&self, name: &str) -> Option<T>
pub fn set_string_value(&mut self, name: &str, value: String)
pub fn add_string_variable(&mut self, name: &str, value: String)
pub fn get_string_value(&self, name: &str) -> Option<&String>
pub fn get_value(&self, name: &str) -> Option<Value>
pub fn variable_names(&self) -> Vec<String>
pub fn remove_variable(&mut self, name: &str)
pub fn array_names(&self) -> Vec<String>
pub fn remove_array(&mut self, name: &str)
pub fn string_variable_names(&self) -> Vec<String>
pub fn remove_string_variable(&mut self, name: &str)
pub fn reverse_array(&mut self, name: &str)
pub fn reverse_array_range(&mut self, name: &str, start: usize, end: usize)
pub fn array_value(&mut self, name: &str, index: usize) -> Option<T>
pub fn set_array_value(&mut self, name: &str, index: usize, value: T)
pub fn set_array_from_vec(&mut self, name: &str, values: &[f64])
pub fn snapshot_array(&self, name: &str) -> Option<Vec<f64>>
pub fn write_back_array(&mut self, name: &str, values: &[f64])
pub fn fill_array(&mut self, name: &str, value: T)
pub fn apply_array_op(&mut self, name: &str, op: Op, rhs: T)
pub fn apply_array_vector_op(&mut self, name: &str, op: Op, values: &[f64])
pub fn add_constant(&mut self, name: &str, value: T)
pub fn mark_constant(&mut self, name: &str)
pub fn add_string_constant(&mut self, name: &str, value: String)
pub fn add_user_function(&mut self, name: &str, params: Vec<String>, body: Node)
pub fn get_user_function(&self, name: &str) -> Option<&(Vec<String>, Node)>
pub fn child(&self) -> Self
pub fn merge_child_updates(&mut self, child: &Self)
pub fn add_function(&mut self, name: &str, f: Box<dyn Fn(&[T]) -> T>)
pub fn get_function(&self, name: &str) -> Option<Rc<Box<dyn Fn(&[T]) -> T>>>
pub fn add_constants(&mut self)
pub fn record_unary(&mut self, op: Op, operand: T, result: T)
pub fn record_binary(&mut self, op: Op, lhs: T, rhs: T, result: T)
pub fn record_function_call(&mut self, name: &str, args: &[T], result: T)
pub fn trace(&self) -> &[TraceEvent<T>]
pub fn take_trace(&mut self) -> Vec<TraceEvent<T>>
pub fn clear_trace(&mut self)
pub fn sum_array(&self, name: &str) -> Option<T>
pub fn is_constant(&self, name: &str) -> bool
pub fn enable_vector_bounds_check(&mut self, enable: bool)
pub fn next_random(&mut self) -> f64
pub fn next_gaussian(&mut self) -> f64
Trait Implementations§
Auto Trait Implementations§
impl<T> Freeze for SymbolTable<T>
impl<T> !RefUnwindSafe for SymbolTable<T>
impl<T> !Send for SymbolTable<T>
impl<T> !Sync for SymbolTable<T>
impl<T> Unpin for SymbolTable<T>where
T: Unpin,
impl<T> UnsafeUnpin for SymbolTable<T>
impl<T> !UnwindSafe for SymbolTable<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more