JUCE  v5.1.1-3-g1a0b28c73
JUCE API
Expression Class Reference

A class for dynamically evaluating simple numeric expressions. More...

#include <juce_Expression.h>

Collaboration diagram for Expression:

Classes

class  Scope
 When evaluating an Expression object, this class is used to resolve symbols and perform functions that the expression uses. More...
 
struct  Symbol
 Represents a symbol that is used in an Expression. More...
 

Public Types

enum  Type {
  constantType,
  functionType,
  operatorType,
  symbolType
}
 Expression type. More...
 

Public Member Functions

 Expression ()
 Creates a simple expression with a value of 0. More...
 
 Expression (const Expression &)
 Creates a copy of an expression. More...
 
 Expression (Expression &&) noexcept
 Move constructor. More...
 
 Expression (double constant)
 Creates a simple expression with a specified constant value. More...
 
 Expression (const String &stringToParse, String &parseError)
 Attempts to create an expression by parsing a string. More...
 
 ~Expression ()
 Destructor. More...
 
Expression adjustedToGiveNewResult (double targetValue, const Scope &scope) const
 Attempts to return an expression which is a copy of this one, but with a constant adjusted to make the expression resolve to a target value. More...
 
double evaluate () const
 Evaluates this expression, without using a Scope. More...
 
double evaluate (const Scope &scope) const
 Evaluates this expression, providing a scope that should be able to evaluate any symbols or functions that it uses. More...
 
double evaluate (const Scope &scope, String &evaluationError) const
 Evaluates this expression, providing a scope that should be able to evaluate any symbols or functions that it uses. More...
 
void findReferencedSymbols (Array< Symbol > &results, const Scope &scope) const
 Returns a list of all symbols that may be needed to resolve this expression in the given scope. More...
 
Expression getInput (int index) const
 Retrieves one of the inputs to this expression. More...
 
int getNumInputs () const
 Returns the number of inputs to this expression. More...
 
String getSymbolOrFunction () const
 If this expression is a symbol, function or operator, this returns its identifier. More...
 
Type getType () const noexcept
 Returns the type of this expression. More...
 
Expression operator* (const Expression &) const
 Returns an expression which is a multiplication operation of two existing expressions. More...
 
Expression operator+ (const Expression &) const
 Returns an expression which is an addition operation of two existing expressions. More...
 
Expression operator- (const Expression &) const
 Returns an expression which is a subtraction operation of two existing expressions. More...
 
Expression operator- () const
 Returns an expression which performs a negation operation on an existing expression. More...
 
Expression operator/ (const Expression &) const
 Returns an expression which is a division operation of two existing expressions. More...
 
Expressionoperator= (const Expression &)
 Copies another expression. More...
 
Expressionoperator= (Expression &&) noexcept
 Move assignment operator. More...
 
bool referencesSymbol (const Symbol &symbol, const Scope &scope) const
 Returns true if this expression makes use of the specified symbol. More...
 
String toString () const
 Returns a string version of the expression. More...
 
bool usesAnySymbols () const
 Returns true if this expression contains any symbols. More...
 
Expression withRenamedSymbol (const Symbol &oldSymbol, const String &newName, const Scope &scope) const
 Returns a copy of this expression in which all instances of a given symbol have been renamed. More...
 

Static Public Member Functions

static Expression function (const String &functionName, const Array< Expression > &parameters)
 Returns an Expression which is a function call. More...
 
static Expression parse (String::CharPointerType &stringToParse, String &parseError)
 Returns an Expression which parses a string from a character pointer, and updates the pointer to indicate where it finished. More...
 
static Expression symbol (const String &symbol)
 Returns an Expression which is an identifier reference. More...
 

Private Member Functions

 Expression (Term *)
 

Private Attributes

ReferenceCountedObjectPtr< Termterm
 

Friends

struct ContainerDeletePolicy< Term >
 
struct Helpers
 
class ReferenceCountedObjectPtr< Term >
 
class Term
 

Detailed Description

A class for dynamically evaluating simple numeric expressions.

This class can parse a simple C-style string expression involving floating point numbers, named symbols and functions. The basic arithmetic operations of +, -, *, / are supported, as well as parentheses, and any alphanumeric identifiers are assumed to be named symbols which will be resolved when the expression is evaluated.

Expressions which use identifiers and functions require a subclass of Expression::Scope to be supplied when evaluating them, and this object is expected to be able to resolve the symbol names and perform the functions that are used.

Member Enumeration Documentation

◆ Type

Expression type.

See also
Expression::getType()
Enumerator
constantType 
functionType 
operatorType 
symbolType 

Constructor & Destructor Documentation

◆ Expression() [1/6]

Expression::Expression ( )

Creates a simple expression with a value of 0.

◆ ~Expression()

Expression::~Expression ( )

Destructor.

◆ Expression() [2/6]

Expression::Expression ( const Expression )

Creates a copy of an expression.

◆ Expression() [3/6]

Expression::Expression ( Expression &&  )
noexcept

Move constructor.

◆ Expression() [4/6]

Expression::Expression ( double  constant)
explicit

Creates a simple expression with a specified constant value.

◆ Expression() [5/6]

Expression::Expression ( const String stringToParse,
String parseError 
)

Attempts to create an expression by parsing a string.

Any errors are returned in the parseError argument provided.

◆ Expression() [6/6]

Expression::Expression ( Term )
explicitprivate

Member Function Documentation

◆ adjustedToGiveNewResult()

Expression Expression::adjustedToGiveNewResult ( double  targetValue,
const Scope scope 
) const

Attempts to return an expression which is a copy of this one, but with a constant adjusted to make the expression resolve to a target value.

E.g. if the expression is "x + 10" and x is 5, then asking for a target value of 8 will return the expression "x + 3". Obviously some expressions can't be reversed in this way, in which case they might just be adjusted by adding a constant to the original expression.

Exceptions
Expression::EvaluationError

◆ evaluate() [1/3]

double Expression::evaluate ( ) const

Evaluates this expression, without using a Scope.

Without a Scope, no symbols can be used, and only basic functions such as sin, cos, tan, min, max are available. To find out about any errors during evaluation, use the other version of this method which takes a String parameter.

◆ evaluate() [2/3]

double Expression::evaluate ( const Scope scope) const

Evaluates this expression, providing a scope that should be able to evaluate any symbols or functions that it uses.

To find out about any errors during evaluation, use the other version of this method which takes a String parameter.

◆ evaluate() [3/3]

double Expression::evaluate ( const Scope scope,
String evaluationError 
) const

Evaluates this expression, providing a scope that should be able to evaluate any symbols or functions that it uses.

◆ findReferencedSymbols()

void Expression::findReferencedSymbols ( Array< Symbol > &  results,
const Scope scope 
) const

Returns a list of all symbols that may be needed to resolve this expression in the given scope.

◆ function()

static Expression Expression::function ( const String functionName,
const Array< Expression > &  parameters 
)
static

Returns an Expression which is a function call.

◆ getInput()

Expression Expression::getInput ( int  index) const

Retrieves one of the inputs to this expression.

See also
getNumInputs

◆ getNumInputs()

int Expression::getNumInputs ( ) const

Returns the number of inputs to this expression.

See also
getInput

◆ getSymbolOrFunction()

String Expression::getSymbolOrFunction ( ) const

If this expression is a symbol, function or operator, this returns its identifier.

◆ getType()

Type Expression::getType ( ) const
noexcept

Returns the type of this expression.

◆ operator*()

Expression Expression::operator* ( const Expression ) const

Returns an expression which is a multiplication operation of two existing expressions.

◆ operator+()

Expression Expression::operator+ ( const Expression ) const

Returns an expression which is an addition operation of two existing expressions.

◆ operator-() [1/2]

Expression Expression::operator- ( const Expression ) const

Returns an expression which is a subtraction operation of two existing expressions.

◆ operator-() [2/2]

Expression Expression::operator- ( ) const

Returns an expression which performs a negation operation on an existing expression.

◆ operator/()

Expression Expression::operator/ ( const Expression ) const

Returns an expression which is a division operation of two existing expressions.

◆ operator=() [1/2]

Expression& Expression::operator= ( const Expression )

Copies another expression.

◆ operator=() [2/2]

Expression& Expression::operator= ( Expression &&  )
noexcept

Move assignment operator.

◆ parse()

static Expression Expression::parse ( String::CharPointerType stringToParse,
String parseError 
)
static

Returns an Expression which parses a string from a character pointer, and updates the pointer to indicate where it finished.

The pointer is incremented so that on return, it indicates the character that follows the end of the expression that was parsed.

If there's a syntax error in parsing, the parseError argument will be set to a description of the problem.

◆ referencesSymbol()

bool Expression::referencesSymbol ( const Symbol symbol,
const Scope scope 
) const

Returns true if this expression makes use of the specified symbol.

If a suitable scope is supplied, the search will dereference and recursively check all symbols, so that it can be determined whether this expression relies on the given symbol at any level in its evaluation. If the scope parameter is null, this just checks whether the expression contains any direct references to the symbol.

Exceptions
Expression::EvaluationError

◆ symbol()

static Expression Expression::symbol ( const String symbol)
static

Returns an Expression which is an identifier reference.

◆ toString()

String Expression::toString ( ) const

Returns a string version of the expression.

◆ usesAnySymbols()

bool Expression::usesAnySymbols ( ) const

Returns true if this expression contains any symbols.

◆ withRenamedSymbol()

Expression Expression::withRenamedSymbol ( const Symbol oldSymbol,
const String newName,
const Scope scope 
) const

Returns a copy of this expression in which all instances of a given symbol have been renamed.

Friends And Related Function Documentation

◆ ContainerDeletePolicy< Term >

friend struct ContainerDeletePolicy< Term >
friend

◆ Helpers

friend struct Helpers
friend

◆ ReferenceCountedObjectPtr< Term >

friend class ReferenceCountedObjectPtr< Term >
friend

◆ Term

friend class Term
friend

Member Data Documentation

◆ term

ReferenceCountedObjectPtr<Term> Expression::term
private

The documentation for this class was generated from the following file: