Enum dypdl::expression::ElementExpression
source · pub enum ElementExpression {
Constant(Element),
Variable(usize),
ResourceVariable(usize),
BinaryOperation(BinaryOperator, Box<ElementExpression>, Box<ElementExpression>),
Last(Box<VectorExpression>),
At(Box<VectorExpression>, Box<ElementExpression>),
Table(Box<TableExpression<Element>>),
If(Box<Condition>, Box<ElementExpression>, Box<ElementExpression>),
}Expand description
Element expression .
Variants§
Constant(Element)
Constant.
Variable(usize)
Variable index.
ResourceVariable(usize)
Resource variable index.
BinaryOperation(BinaryOperator, Box<ElementExpression>, Box<ElementExpression>)
Binary arithmetic operation.
Last(Box<VectorExpression>)
The last value of a vector expression.
At(Box<VectorExpression>, Box<ElementExpression>)
An item in a vector expression.
Table(Box<TableExpression<Element>>)
A constant in a element table.
If(Box<Condition>, Box<ElementExpression>, Box<ElementExpression>)
If-then-else expression, which returns the first one if the condition holds and the second one otherwise.
Implementations§
source§impl ElementExpression
impl ElementExpression
sourcepub fn eval<T: StateInterface>(
&self,
state: &T,
registry: &TableRegistry
) -> Element
pub fn eval<T: StateInterface>( &self, state: &T, registry: &TableRegistry ) -> Element
Returns the evaluation result.
§Panics
Panics if the cost of the transition state is used or a min/max reduce operation is performed on an empty set or vector.
§Examples
use dypdl::prelude::*;
let mut model = Model::default();
let object_type = model.add_object_type("object_type", 2).unwrap();
let variable = model.add_element_variable("variable", object_type, 1).unwrap();
let state = model.target.clone();
let expression = ElementExpression::from(variable);
assert_eq!(expression.eval(&state, &model.table_registry), 1);sourcepub fn simplify(&self, registry: &TableRegistry) -> ElementExpression
pub fn simplify(&self, registry: &TableRegistry) -> ElementExpression
Returns a simplified version by precomputation.
§Panics
Panics if a min/max reduce operation is performed on an empty set or vector.
Trait Implementations§
source§impl Add<ElementExpression> for ElementResourceVariable
impl Add<ElementExpression> for ElementResourceVariable
source§fn add(self, rhs: ElementExpression) -> ElementExpression
fn add(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the addition.
§type Output = ElementExpression
type Output = ElementExpression
+ operator.source§impl Add<ElementExpression> for ElementVariable
impl Add<ElementExpression> for ElementVariable
source§fn add(self, rhs: ElementExpression) -> ElementExpression
fn add(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the addition.
§type Output = ElementExpression
type Output = ElementExpression
+ operator.source§impl Add<ElementExpression> for Element
impl Add<ElementExpression> for Element
source§fn add(self, rhs: ElementExpression) -> ElementExpression
fn add(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the addition.
§type Output = ElementExpression
type Output = ElementExpression
+ operator.source§impl Add<ElementResourceVariable> for ElementExpression
impl Add<ElementResourceVariable> for ElementExpression
source§fn add(self, rhs: ElementResourceVariable) -> ElementExpression
fn add(self, rhs: ElementResourceVariable) -> ElementExpression
Returns an expression representing the addition.
§type Output = ElementExpression
type Output = ElementExpression
+ operator.source§impl Add<ElementVariable> for ElementExpression
impl Add<ElementVariable> for ElementExpression
source§fn add(self, rhs: ElementVariable) -> ElementExpression
fn add(self, rhs: ElementVariable) -> ElementExpression
Returns an expression representing the addition.
§type Output = ElementExpression
type Output = ElementExpression
+ operator.source§impl Add<usize> for ElementExpression
impl Add<usize> for ElementExpression
source§fn add(self, rhs: Element) -> ElementExpression
fn add(self, rhs: Element) -> ElementExpression
Returns an expression representing the addition.
§type Output = ElementExpression
type Output = ElementExpression
+ operator.source§impl Add for ElementExpression
impl Add for ElementExpression
source§fn add(self, rhs: Self) -> Self::Output
fn add(self, rhs: Self) -> Self::Output
Returns an expression representing the addition.
§Examples
use dypdl::prelude::*;
let model = Model::default();
let state = model.target.clone();
let a = ElementExpression::from(2);
let b = ElementExpression::from(3);
let expression = a + b;
assert_eq!(expression.eval(&state, &model.table_registry), 5);§type Output = ElementExpression
type Output = ElementExpression
+ operator.source§impl AddEffect<ElementResourceVariable, ElementExpression> for Transition
impl AddEffect<ElementResourceVariable, ElementExpression> for Transition
source§fn add_effect<V>(
&mut self,
v: ElementResourceVariable,
expression: V
) -> Result<(), ModelErr>where
ElementExpression: From<V>,
fn add_effect<V>(
&mut self,
v: ElementResourceVariable,
expression: V
) -> Result<(), ModelErr>where
ElementExpression: From<V>,
source§impl AddEffect<ElementVariable, ElementExpression> for Transition
impl AddEffect<ElementVariable, ElementExpression> for Transition
source§fn add_effect<V>(
&mut self,
v: ElementVariable,
expression: V
) -> Result<(), ModelErr>where
ElementExpression: From<V>,
fn add_effect<V>(
&mut self,
v: ElementVariable,
expression: V
) -> Result<(), ModelErr>where
ElementExpression: From<V>,
source§impl CheckExpression<ElementExpression> for Model
impl CheckExpression<ElementExpression> for Model
source§fn check_expression(
&self,
expression: &ElementExpression,
allow_cost: bool
) -> Result<(), ModelErr>
fn check_expression( &self, expression: &ElementExpression, allow_cost: bool ) -> Result<(), ModelErr>
source§impl Clone for ElementExpression
impl Clone for ElementExpression
source§fn clone(&self) -> ElementExpression
fn clone(&self) -> ElementExpression
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl Debug for ElementExpression
impl Debug for ElementExpression
source§impl Default for ElementExpression
impl Default for ElementExpression
source§impl Div<ElementExpression> for ElementResourceVariable
impl Div<ElementExpression> for ElementResourceVariable
source§fn div(self, rhs: ElementExpression) -> ElementExpression
fn div(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the division.
§type Output = ElementExpression
type Output = ElementExpression
/ operator.source§impl Div<ElementExpression> for ElementVariable
impl Div<ElementExpression> for ElementVariable
source§fn div(self, rhs: ElementExpression) -> ElementExpression
fn div(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the division.
§type Output = ElementExpression
type Output = ElementExpression
/ operator.source§impl Div<ElementExpression> for Element
impl Div<ElementExpression> for Element
source§fn div(self, rhs: ElementExpression) -> ElementExpression
fn div(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the division.
§type Output = ElementExpression
type Output = ElementExpression
/ operator.source§impl Div<ElementResourceVariable> for ElementExpression
impl Div<ElementResourceVariable> for ElementExpression
source§fn div(self, rhs: ElementResourceVariable) -> ElementExpression
fn div(self, rhs: ElementResourceVariable) -> ElementExpression
Returns an expression representing the division.
§type Output = ElementExpression
type Output = ElementExpression
/ operator.source§impl Div<ElementVariable> for ElementExpression
impl Div<ElementVariable> for ElementExpression
source§fn div(self, rhs: ElementVariable) -> ElementExpression
fn div(self, rhs: ElementVariable) -> ElementExpression
Returns an expression representing the division.
§type Output = ElementExpression
type Output = ElementExpression
/ operator.source§impl Div<usize> for ElementExpression
impl Div<usize> for ElementExpression
source§fn div(self, rhs: Element) -> ElementExpression
fn div(self, rhs: Element) -> ElementExpression
Returns an expression representing the division.
§type Output = ElementExpression
type Output = ElementExpression
/ operator.source§impl Div for ElementExpression
impl Div for ElementExpression
source§fn div(self, rhs: Self) -> Self::Output
fn div(self, rhs: Self) -> Self::Output
Returns an expression representing the division.
§Examples
use dypdl::prelude::*;
let model = Model::default();
let state = model.target.clone();
let a = ElementExpression::from(2);
let b = ElementExpression::from(3);
let expression = a / b;
assert_eq!(expression.eval(&state, &model.table_registry), 0);§type Output = ElementExpression
type Output = ElementExpression
/ operator.source§impl From<ElementExpression> for ArgumentExpression
impl From<ElementExpression> for ArgumentExpression
source§fn from(v: ElementExpression) -> ArgumentExpression
fn from(v: ElementExpression) -> ArgumentExpression
source§impl From<ElementResourceVariable> for ElementExpression
impl From<ElementResourceVariable> for ElementExpression
source§fn from(v: ElementResourceVariable) -> ElementExpression
fn from(v: ElementResourceVariable) -> ElementExpression
source§impl From<ElementVariable> for ElementExpression
impl From<ElementVariable> for ElementExpression
source§fn from(v: ElementVariable) -> ElementExpression
fn from(v: ElementVariable) -> ElementExpression
source§impl From<usize> for ElementExpression
impl From<usize> for ElementExpression
source§fn from(e: Element) -> ElementExpression
fn from(e: Element) -> ElementExpression
source§impl IfThenElse<ElementExpression> for Condition
impl IfThenElse<ElementExpression> for Condition
source§fn if_then_else<U, V>(self, lhs: U, rhs: V) -> ElementExpression
fn if_then_else<U, V>(self, lhs: U, rhs: V) -> ElementExpression
a if this condition holds and b otherwise.source§impl MaxMin<ElementExpression> for ElementResourceVariable
impl MaxMin<ElementExpression> for ElementResourceVariable
type Output = ElementExpression
source§fn max(self, rhs: ElementExpression) -> ElementExpression
fn max(self, rhs: ElementExpression) -> ElementExpression
source§fn min(self, rhs: ElementExpression) -> ElementExpression
fn min(self, rhs: ElementExpression) -> ElementExpression
source§impl MaxMin<ElementExpression> for ElementVariable
impl MaxMin<ElementExpression> for ElementVariable
type Output = ElementExpression
source§fn max(self, rhs: ElementExpression) -> ElementExpression
fn max(self, rhs: ElementExpression) -> ElementExpression
source§fn min(self, rhs: ElementExpression) -> ElementExpression
fn min(self, rhs: ElementExpression) -> ElementExpression
source§impl MaxMin<ElementExpression> for Element
impl MaxMin<ElementExpression> for Element
type Output = ElementExpression
source§fn max(self, rhs: ElementExpression) -> ElementExpression
fn max(self, rhs: ElementExpression) -> ElementExpression
source§fn min(self, rhs: ElementExpression) -> ElementExpression
fn min(self, rhs: ElementExpression) -> ElementExpression
source§impl MaxMin<ElementResourceVariable> for ElementExpression
impl MaxMin<ElementResourceVariable> for ElementExpression
type Output = ElementExpression
source§fn max(self, rhs: ElementResourceVariable) -> ElementExpression
fn max(self, rhs: ElementResourceVariable) -> ElementExpression
source§fn min(self, rhs: ElementResourceVariable) -> ElementExpression
fn min(self, rhs: ElementResourceVariable) -> ElementExpression
source§impl MaxMin<ElementVariable> for ElementExpression
impl MaxMin<ElementVariable> for ElementExpression
type Output = ElementExpression
source§fn max(self, rhs: ElementVariable) -> ElementExpression
fn max(self, rhs: ElementVariable) -> ElementExpression
source§fn min(self, rhs: ElementVariable) -> ElementExpression
fn min(self, rhs: ElementVariable) -> ElementExpression
source§impl MaxMin<usize> for ElementExpression
impl MaxMin<usize> for ElementExpression
type Output = ElementExpression
source§fn max(self, rhs: Element) -> ElementExpression
fn max(self, rhs: Element) -> ElementExpression
source§fn min(self, rhs: Element) -> ElementExpression
fn min(self, rhs: Element) -> ElementExpression
source§impl MaxMin for ElementExpression
impl MaxMin for ElementExpression
source§fn max(self, rhs: Self) -> Self::Output
fn max(self, rhs: Self) -> Self::Output
Returns an expression representing the maximum.
§Examples
use dypdl::prelude::*;
let model = Model::default();
let state = model.target.clone();
let a = ElementExpression::from(2);
let b = ElementExpression::from(3);
let expression = a.max(b);
assert_eq!(expression.eval(&state, &model.table_registry), 3);source§fn min(self, rhs: Self) -> Self::Output
fn min(self, rhs: Self) -> Self::Output
Returns an expression representing the minimum.
§Examples
use dypdl::prelude::*;
let model = Model::default();
let state = model.target.clone();
let a = ElementExpression::from(2);
let b = ElementExpression::from(3);
let expression = a.min(b);
assert_eq!(expression.eval(&state, &model.table_registry), 2);type Output = ElementExpression
source§impl Mul<ElementExpression> for ElementResourceVariable
impl Mul<ElementExpression> for ElementResourceVariable
source§fn mul(self, rhs: ElementExpression) -> ElementExpression
fn mul(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the multiplication.
§type Output = ElementExpression
type Output = ElementExpression
* operator.source§impl Mul<ElementExpression> for ElementVariable
impl Mul<ElementExpression> for ElementVariable
source§fn mul(self, rhs: ElementExpression) -> ElementExpression
fn mul(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the multiplication.
§type Output = ElementExpression
type Output = ElementExpression
* operator.source§impl Mul<ElementExpression> for Element
impl Mul<ElementExpression> for Element
source§fn mul(self, rhs: ElementExpression) -> ElementExpression
fn mul(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the multiplication.
§type Output = ElementExpression
type Output = ElementExpression
* operator.source§impl Mul<ElementResourceVariable> for ElementExpression
impl Mul<ElementResourceVariable> for ElementExpression
source§fn mul(self, rhs: ElementResourceVariable) -> ElementExpression
fn mul(self, rhs: ElementResourceVariable) -> ElementExpression
Returns an expression representing the multiplication.
§type Output = ElementExpression
type Output = ElementExpression
* operator.source§impl Mul<ElementVariable> for ElementExpression
impl Mul<ElementVariable> for ElementExpression
source§fn mul(self, rhs: ElementVariable) -> ElementExpression
fn mul(self, rhs: ElementVariable) -> ElementExpression
Returns an expression representing the multiplication.
§type Output = ElementExpression
type Output = ElementExpression
* operator.source§impl Mul<usize> for ElementExpression
impl Mul<usize> for ElementExpression
source§fn mul(self, rhs: Element) -> ElementExpression
fn mul(self, rhs: Element) -> ElementExpression
Returns an expression representing the multiplication.
§type Output = ElementExpression
type Output = ElementExpression
* operator.source§impl Mul for ElementExpression
impl Mul for ElementExpression
source§fn mul(self, rhs: Self) -> Self::Output
fn mul(self, rhs: Self) -> Self::Output
Returns an expression representing the multiplication.
§Examples
use dypdl::prelude::*;
let model = Model::default();
let state = model.target.clone();
let a = ElementExpression::from(2);
let b = ElementExpression::from(3);
let expression = a * b;
assert_eq!(expression.eval(&state, &model.table_registry), 6);§type Output = ElementExpression
type Output = ElementExpression
* operator.source§impl PartialEq for ElementExpression
impl PartialEq for ElementExpression
source§fn eq(&self, other: &ElementExpression) -> bool
fn eq(&self, other: &ElementExpression) -> bool
self and other values to be equal, and is used
by ==.source§impl Rem<ElementExpression> for ElementResourceVariable
impl Rem<ElementExpression> for ElementResourceVariable
source§fn rem(self, rhs: ElementExpression) -> ElementExpression
fn rem(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the remainder.
§type Output = ElementExpression
type Output = ElementExpression
% operator.source§impl Rem<ElementExpression> for ElementVariable
impl Rem<ElementExpression> for ElementVariable
source§fn rem(self, rhs: ElementExpression) -> ElementExpression
fn rem(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the remainder.
§type Output = ElementExpression
type Output = ElementExpression
% operator.source§impl Rem<ElementExpression> for Element
impl Rem<ElementExpression> for Element
source§fn rem(self, rhs: ElementExpression) -> ElementExpression
fn rem(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the remainder.
§type Output = ElementExpression
type Output = ElementExpression
% operator.source§impl Rem<ElementResourceVariable> for ElementExpression
impl Rem<ElementResourceVariable> for ElementExpression
source§fn rem(self, rhs: ElementResourceVariable) -> ElementExpression
fn rem(self, rhs: ElementResourceVariable) -> ElementExpression
Returns an expression representing the remainder.
§type Output = ElementExpression
type Output = ElementExpression
% operator.source§impl Rem<ElementVariable> for ElementExpression
impl Rem<ElementVariable> for ElementExpression
source§fn rem(self, rhs: ElementVariable) -> ElementExpression
fn rem(self, rhs: ElementVariable) -> ElementExpression
Returns an expression representing the remainder.
§type Output = ElementExpression
type Output = ElementExpression
% operator.source§impl Rem<usize> for ElementExpression
impl Rem<usize> for ElementExpression
source§fn rem(self, rhs: Element) -> ElementExpression
fn rem(self, rhs: Element) -> ElementExpression
Returns an expression representing the remainder.
§type Output = ElementExpression
type Output = ElementExpression
% operator.source§impl Rem for ElementExpression
impl Rem for ElementExpression
source§fn rem(self, rhs: Self) -> Self::Output
fn rem(self, rhs: Self) -> Self::Output
Returns an expression representing the remainder.
§Examples
use dypdl::prelude::*;
let model = Model::default();
let state = model.target.clone();
let a = ElementExpression::from(2);
let b = ElementExpression::from(3);
let expression = a % b;
assert_eq!(expression.eval(&state, &model.table_registry), 2);§type Output = ElementExpression
type Output = ElementExpression
% operator.source§impl SetElementOperation<ElementExpression> for Set
impl SetElementOperation<ElementExpression> for Set
source§fn add(self, rhs: ElementExpression) -> SetExpression
fn add(self, rhs: ElementExpression) -> SetExpression
source§fn remove(self, rhs: ElementExpression) -> SetExpression
fn remove(self, rhs: ElementExpression) -> SetExpression
source§impl SetElementOperation<ElementExpression> for SetExpression
impl SetElementOperation<ElementExpression> for SetExpression
source§fn add(self, rhs: ElementExpression) -> SetExpression
fn add(self, rhs: ElementExpression) -> SetExpression
source§fn remove(self, rhs: ElementExpression) -> SetExpression
fn remove(self, rhs: ElementExpression) -> SetExpression
source§impl SetElementOperation<ElementExpression> for SetVariable
impl SetElementOperation<ElementExpression> for SetVariable
source§fn add(self, rhs: ElementExpression) -> SetExpression
fn add(self, rhs: ElementExpression) -> SetExpression
source§fn remove(self, rhs: ElementExpression) -> SetExpression
fn remove(self, rhs: ElementExpression) -> SetExpression
source§impl Sub<ElementExpression> for ElementResourceVariable
impl Sub<ElementExpression> for ElementResourceVariable
source§fn sub(self, rhs: ElementExpression) -> ElementExpression
fn sub(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the subtraction.
§type Output = ElementExpression
type Output = ElementExpression
- operator.source§impl Sub<ElementExpression> for ElementVariable
impl Sub<ElementExpression> for ElementVariable
source§fn sub(self, rhs: ElementExpression) -> ElementExpression
fn sub(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the subtraction.
§type Output = ElementExpression
type Output = ElementExpression
- operator.source§impl Sub<ElementExpression> for Element
impl Sub<ElementExpression> for Element
source§fn sub(self, rhs: ElementExpression) -> ElementExpression
fn sub(self, rhs: ElementExpression) -> ElementExpression
Returns an expression representing the subtraction.
§type Output = ElementExpression
type Output = ElementExpression
- operator.source§impl Sub<ElementResourceVariable> for ElementExpression
impl Sub<ElementResourceVariable> for ElementExpression
source§fn sub(self, rhs: ElementResourceVariable) -> ElementExpression
fn sub(self, rhs: ElementResourceVariable) -> ElementExpression
Returns an expression representing the subtraction.
§type Output = ElementExpression
type Output = ElementExpression
- operator.source§impl Sub<ElementVariable> for ElementExpression
impl Sub<ElementVariable> for ElementExpression
source§fn sub(self, rhs: ElementVariable) -> ElementExpression
fn sub(self, rhs: ElementVariable) -> ElementExpression
Returns an expression representing the subtraction.
§type Output = ElementExpression
type Output = ElementExpression
- operator.source§impl Sub<usize> for ElementExpression
impl Sub<usize> for ElementExpression
source§fn sub(self, rhs: Element) -> ElementExpression
fn sub(self, rhs: Element) -> ElementExpression
Returns an expression representing the subtraction.
§type Output = ElementExpression
type Output = ElementExpression
- operator.source§impl Sub for ElementExpression
impl Sub for ElementExpression
source§fn sub(self, rhs: Self) -> Self::Output
fn sub(self, rhs: Self) -> Self::Output
Returns an expression representing the subtraction.
§Examples
use dypdl::prelude::*;
let model = Model::default();
let state = model.target.clone();
let a = ElementExpression::from(3);
let b = ElementExpression::from(2);
let expression = a - b;
assert_eq!(expression.eval(&state, &model.table_registry), 1);§type Output = ElementExpression
type Output = ElementExpression
- operator.