vector_expr/
expression.rs

1/// Top-level parseable calculation.
2#[derive(Clone, Debug)]
3pub enum Expression<Real> {
4    Boolean(BoolExpression<Real>),
5    Real(RealExpression<Real>),
6    String(StringExpression),
7}
8
9/// A `bool`-valued expression.
10#[derive(Clone, Debug)]
11pub enum BoolExpression<Real> {
12    // Binary logic.
13    And(Box<BoolExpression<Real>>, Box<BoolExpression<Real>>),
14    Or(Box<BoolExpression<Real>>, Box<BoolExpression<Real>>),
15
16    // Unary logic.
17    Not(Box<BoolExpression<Real>>),
18
19    // Real comparisons.
20    Equal(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
21    Greater(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
22    GreaterEqual(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
23    Less(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
24    LessEqual(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
25    NotEqual(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
26
27    // String comparisons.
28    StrEqual(StringExpression, StringExpression),
29    StrNotEqual(StringExpression, StringExpression),
30}
31
32/// An `f64`-valued expression.
33#[derive(Clone, Debug)]
34pub enum RealExpression<Real> {
35    // Binary real ops.
36    Add(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
37    Div(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
38    Mul(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
39    Pow(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
40    Sub(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
41
42    // Unary real ops.
43    Neg(Box<RealExpression<Real>>),
44
45    // Constant.
46    Literal(Real),
47
48    // Input variable.
49    Binding(BindingId),
50}
51
52#[derive(Clone, Debug)]
53pub enum StringExpression {
54    Literal(String),
55    Binding(BindingId),
56}
57
58/// Index into the `&[&[f64]]` bindings passed to expression evaluation.
59pub type BindingId = usize;