Observable Reference
Generic observable objects for C++
Public Member Functions | Protected Member Functions | List of all members
observable::expr::expression< ValueType, EvaluatorType > Class Template Reference

Description

template<typename ValueType, typename EvaluatorType = expression_evaluator>
class observable::expr::expression< ValueType, EvaluatorType >

Expressions manage expression tree evaluation and results.

Expressions are also value updaters, so they can be used for updating a value when an expression tree changes.

Template Parameters
ValueTypeThe expression's result value type. This is what get() returns.
EvaluatorTypeAn instance of expression_evaluator, or a type derived from it.
Warning
None of the methods in this class can be safely called concurrently.

Public Member Functions

 expression (expression_node< ValueType > &&root, EvaluatorType const &evaluator)
 Create a new expression from the root node of an expression tree. More...
 
void eval ()
 Evaluate the expression. More...
 
virtual auto get () const -> ValueType override
 Retrieve the expression's result. More...
 
virtual void set_value_notifier (std::function< void(ValueType &&)> const &notifier) override
 Set a functor that can be used to notify the value to be updated of a change. More...
 
virtual ~expression ()
 Destructor. More...
 
 expression ()=default
 Expressions are default-constructible. More...
 
 expression (expression const &)=delete
 Expressions are not copy-constructible. More...
 
auto operator= (expression const &) -> expression &=delete
 Expressions are not copy-assignable. More...
 
 expression (expression &&)=default
 Expressions are move-constructible. More...
 
auto operator= (expression &&) -> expression &=default
 Expressions are move-assignable. More...
 
- Public Member Functions inherited from observable::value_updater< ValueType >
virtual ~value_updater ()
 Destructor. More...
 
 value_updater ()=default
 Value updaters are default-constructible. More...
 
 value_updater (value_updater const &)=default
 Value updaters are copy-constructible. More...
 
 value_updater (value_updater &&)=default
 Value updaters are move-constructible. More...
 
value_updateroperator= (value_updater const &)=default
 Value updaters are copy-assignable. More...
 
value_updateroperator= (value_updater &&)=default
 Value updaters are move-assignable. More...
 

Protected Member Functions

auto root_node () -> expression_node< ValueType > &
 Return the expression tree's root node. More...
 

Constructor & Destructor Documentation

◆ expression() [1/4]

template<typename ValueType, typename EvaluatorType = expression_evaluator>
observable::expr::expression< ValueType, EvaluatorType >::expression ( expression_node< ValueType > &&  root,
EvaluatorType const &  evaluator 
)
inline

Create a new expression from the root node of an expression tree.

Parameters
[in]rootExpression tree root node.
[in]evaluatorExpression evaluator to be used for globally updating the expression.

◆ ~expression()

template<typename ValueType, typename EvaluatorType = expression_evaluator>
virtual observable::expr::expression< ValueType, EvaluatorType >::~expression ( )
inlinevirtual

Destructor.

◆ expression() [2/4]

template<typename ValueType, typename EvaluatorType = expression_evaluator>
observable::expr::expression< ValueType, EvaluatorType >::expression ( )
default

Expressions are default-constructible.

◆ expression() [3/4]

template<typename ValueType, typename EvaluatorType = expression_evaluator>
observable::expr::expression< ValueType, EvaluatorType >::expression ( expression< ValueType, EvaluatorType > const &  )
delete

Expressions are not copy-constructible.

◆ expression() [4/4]

template<typename ValueType, typename EvaluatorType = expression_evaluator>
observable::expr::expression< ValueType, EvaluatorType >::expression ( expression< ValueType, EvaluatorType > &&  )
default

Expressions are move-constructible.

Member Function Documentation

◆ eval()

template<typename ValueType, typename EvaluatorType = expression_evaluator>
void observable::expr::expression< ValueType, EvaluatorType >::eval ( )
inline

Evaluate the expression.

This will ensure that the expression's result is up-to-date.

◆ get()

template<typename ValueType, typename EvaluatorType = expression_evaluator>
virtual auto observable::expr::expression< ValueType, EvaluatorType >::get ( ) const -> ValueType
inlineoverridevirtual

Retrieve the expression's result.

Warning
If eval() has not been called, the result might be stale.

Implements observable::value_updater< ValueType >.

◆ set_value_notifier()

template<typename ValueType, typename EvaluatorType = expression_evaluator>
virtual void observable::expr::expression< ValueType, EvaluatorType >::set_value_notifier ( std::function< void(ValueType &&)> const &  notifier)
inlineoverridevirtual

Set a functor that can be used to notify the value to be updated of a change.

Parameters
[in]notifierFunctor that will notify the value of a change.

Implements observable::value_updater< ValueType >.

◆ operator=() [1/2]

template<typename ValueType, typename EvaluatorType = expression_evaluator>
auto observable::expr::expression< ValueType, EvaluatorType >::operator= ( expression< ValueType, EvaluatorType > const &  ) -> expression &=delete
delete

Expressions are not copy-assignable.

◆ operator=() [2/2]

template<typename ValueType, typename EvaluatorType = expression_evaluator>
auto observable::expr::expression< ValueType, EvaluatorType >::operator= ( expression< ValueType, EvaluatorType > &&  ) -> expression &=default
default

Expressions are move-assignable.

◆ root_node()

template<typename ValueType, typename EvaluatorType = expression_evaluator>
auto observable::expr::expression< ValueType, EvaluatorType >::root_node ( ) -> expression_node<ValueType> &
inlineprotected

Return the expression tree's root node.