Skip to content

MinMaxExpression

INCLUDE FILE
#include "Expression/MinMaxExpression.h"

class MinMaxExpression

Expression representing the minimum or maximum of two sub-expressions: .min(a, b) or .max(a, b).

DEFINITION
class MinMaxExpression;

constructor MinMaxExpression

Create a minimum or maximum expression.

DEFINITION
MinMaxExpression ( const Location & location,
Expression  a,
Expression  b,
bool  minimum );
PARAMETERDESCRIPTION
location

The location of the expression in the source code.

a

The first sub-expression.

b

The second sub-expression.

minimum

Whether this is a minimum expression (true) or a maximum expression (false).

method createstatic

Create an expression representing the minimum or maximum of two sub-expressions.

This might not create a MinMaxExpression if the operation can be simplified (e.g. if both operands have values).

DEFINITION
static Expression  create ( const Location & location,
const Expression & a,
const Expression & b,
bool  minimum );
PARAMETERDESCRIPTION
location

The location of the expression in the source code.

a

The first sub-expression.

b

The second sub-expression.

minimum

Whether this is a minimum expression (true) or a maximum expression (false).

RETURNSDESCRIPTION
Expression

The created expression.

method createstatic private

Create an expression representing a minimum or maximum expression from arguments.

DEFINITION
static Expression  create ( const Location & location,
bool  minimum,
const std::vector< Expression > & arguments );
PARAMETERDESCRIPTION
location

The location of the expression in the source code.

minimum

Whether this is a minimum expression (true) or a maximum expression (false).

arguments

The arguments of the expression. Must contain exactly two expressions.

RETURNSDESCRIPTION
Expression

The created expression.

method create_maxstatic

Create a maximum expression from arguments.

DEFINITION
static Expression  create_max ( const Location & location,
const std::vector< Expression > & arguments );
PARAMETERDESCRIPTION
location

The location of the expression in the source code.

arguments

The arguments of the expression. Must contain exactly two expressions.

RETURNSDESCRIPTION
Expression

The created expression.

method create_minstatic

Create a minimum expression from arguments.

DEFINITION
static Expression  create_min ( const Location & location,
const std::vector< Expression > & arguments );
PARAMETERDESCRIPTION
location

The location of the expression in the source code.

arguments

The arguments of the expression. Must contain exactly two expressions.

RETURNSDESCRIPTION
Expression

The created expression.

method evaluate_processvirtual

Process the evaluation of the expression.

This method is called by the default implementation of evaluate() after calling evaluate() on all sub-expressions.

DEFINITION
virtual std::optional< Expression >  evaluate_process ( const EvaluationContext & context );
PARAMETERDESCRIPTION
context

The evaluation context.

RETURNSDESCRIPTION
std::optional< Expression >

If the expression changed, returns the new expression, otherwise {}.

method maximum_valueconst virtual

Get the minimum possible value of the expression.

The default implementation returns the value of the expression if it is known, or {} otherwise. Subclasses should override this method if they can determine a minimum value without knowing the exact value of the expression.

DEFINITION
virtual std::optional< Value >  maximum_value ( ) const;
RETURNSDESCRIPTION
std::optional< Value >

The minimum possible value of the expression. if it can be determined, {} otherwise.

method min_maxstatic private

Get the minimum or maximum of two values.

DEFINITION
static Value  min_max ( bool  minimum,
const Value & a,
const Value & b );
PARAMETERDESCRIPTION
minimum

Whether to get the minimum (true) or maximum (false).

a

The first value.

b

The second value.

RETURNSDESCRIPTION
Value

The minimum or maximum of the two values.

method minimum_valueconst virtual

Get the maximum possible value of the expression.

The default implementation returns the value of the expression if it is known, or {} otherwise. Subclasses should override this method if they can determine a maximum value without knowing the exact value of the expression.

DEFINITION
virtual std::optional< Value >  minimum_value ( ) const;
RETURNSDESCRIPTION
std::optional< Value >

The maximum possible value of the expression if it can be determined, {} otherwise.

method serialize_subconst virtual protected

Serialize the expression to a stream.

This method must be implemented by derived classes.

DEFINITION
virtual void  serialize_sub ( std::ostream & stream ) const;
PARAMETERDESCRIPTION
stream

The stream to serialize to.

method simplifystatic private

DEFINITION
static std::optional< Expression >  simplify ( const Location & location,
const Expression & a,
const Expression & b,
bool  minimum,
bool  always_create );
PARAMETERDESCRIPTION
location
a
b
minimum
always_create
RETURNSDESCRIPTION
std::optional< Expression >

method traversevirtual

Call a method on all sub-expressions of this expression.

It is used by the default implementations of resolve() and expand_calls(). Unless a subclass has no sub-expressions or overrides both of these methods, it should override traverse().

DEFINITION
virtual void  traverse ( std::function< void(Expression &)>  callable );
PARAMETERDESCRIPTION
callable

A callable to apply to each sub-expression.

method typeconst virtual

Get the type of the expression's value.

The default implementation returns the type of the value of the expression if it is known, or {} otherwise. Subclasses should override this method if they can determine the type of the expression without knowing the exact value of the expression.

DEFINITION
virtual std::optional< Value::Type >  type ( ) const;
RETURNSDESCRIPTION
std::optional< Value::Type >

The type of the expression's value if it can be determined, {} otherwise.

member aprivate

The first sub-expression.

DEFINITION
Expression  a;

member bprivate

The second sub-expression.

DEFINITION
Expression  b;

member minimumprivate

Whether this is a minimum expression (true) or a maximum expression (false).

DEFINITION
bool  minimum;