33 class ConstantValueExpression :
public ExpressionNode
36 explicit ConstantValueExpression(
double rValue ) :
41 virtual double operator()(
double )
const override
46 virtual bool isConstant()
const override
55 class TValueExpression :
public ExpressionNode
62 virtual double operator()(
double t )
const override
67 virtual bool isConstant()
const override
79 class BinaryExpressionBase :
public ExpressionNode
82 BinaryExpressionBase( std::shared_ptr<ExpressionNode> pFirstArg,
83 std::shared_ptr<ExpressionNode> pSecondArg ) :
89 virtual bool isConstant()
const override
101 class PlusExpression :
public BinaryExpressionBase
104 PlusExpression(
const std::shared_ptr<ExpressionNode>& rFirstArg,
105 const std::shared_ptr<ExpressionNode>& rSecondArg ) :
106 BinaryExpressionBase( rFirstArg, rSecondArg )
110 virtual double operator()(
double t )
const override
116 class MinusExpression :
public BinaryExpressionBase
119 MinusExpression(
const std::shared_ptr<ExpressionNode>& rFirstArg,
120 const std::shared_ptr<ExpressionNode>& rSecondArg ) :
121 BinaryExpressionBase( rFirstArg, rSecondArg )
125 virtual double operator()(
double t )
const override
131 class MultipliesExpression :
public BinaryExpressionBase
134 MultipliesExpression(
const std::shared_ptr<ExpressionNode>& rFirstArg,
135 const std::shared_ptr<ExpressionNode>& rSecondArg ) :
136 BinaryExpressionBase( rFirstArg, rSecondArg )
140 virtual double operator()(
double t )
const override
146 class DividesExpression :
public BinaryExpressionBase
149 DividesExpression(
const std::shared_ptr<ExpressionNode>& rFirstArg,
150 const std::shared_ptr<ExpressionNode>& rSecondArg ) :
151 BinaryExpressionBase( rFirstArg, rSecondArg )
155 virtual double operator()(
double t )
const override
161 class MinExpression :
public BinaryExpressionBase
164 MinExpression(
const std::shared_ptr<ExpressionNode>& rFirstArg,
165 const std::shared_ptr<ExpressionNode>& rSecondArg ) :
166 BinaryExpressionBase( rFirstArg, rSecondArg )
170 virtual double operator()(
double t )
const override
176 class MaxExpression :
public BinaryExpressionBase
179 MaxExpression(
const std::shared_ptr<ExpressionNode>& rFirstArg,
180 const std::shared_ptr<ExpressionNode>& rSecondArg ) :
181 BinaryExpressionBase( rFirstArg, rSecondArg )
185 virtual double operator()(
double t )
const override
194 return std::make_shared<ConstantValueExpression>(rConstantValue);
199 return std::make_shared<TValueExpression>();
203 const std::shared_ptr<ExpressionNode>& rRHS )
205 return std::make_shared<PlusExpression>(rLHS, rRHS);
209 const std::shared_ptr<ExpressionNode>& rRHS )
211 return std::make_shared<MinusExpression>(rLHS, rRHS);
215 const std::shared_ptr<ExpressionNode>& rRHS )
217 return std::make_shared<MultipliesExpression>(rLHS, rRHS);
221 const std::shared_ptr<ExpressionNode>& rRHS )
223 return std::make_shared<DividesExpression>(rLHS, rRHS);
227 const std::shared_ptr<ExpressionNode>& rInnerFunction )
229 return std::make_shared<MinExpression>(rOuterFunction, rInnerFunction);
233 const std::shared_ptr<ExpressionNode>& rInnerFunction )
235 return std::make_shared<MaxExpression>(rOuterFunction, rInnerFunction);
static std::shared_ptr< ExpressionNode > createMultipliesExpression(const std::shared_ptr< ExpressionNode > &rLHS, const std::shared_ptr< ExpressionNode > &rRHS)
static std::shared_ptr< ExpressionNode > createConstantValueExpression(double rConstantValue)
static std::shared_ptr< ExpressionNode > createPlusExpression(const std::shared_ptr< ExpressionNode > &rLHS, const std::shared_ptr< ExpressionNode > &rRHS)
static std::shared_ptr< ExpressionNode > createMinExpression(const std::shared_ptr< ExpressionNode > &rOuterFunction, const std::shared_ptr< ExpressionNode > &rInnerFunction)
Composes two ExpressionNode function.
static std::shared_ptr< ExpressionNode > createValueTExpression()
static std::shared_ptr< ExpressionNode > createMaxExpression(const std::shared_ptr< ExpressionNode > &rOuterFunction, const std::shared_ptr< ExpressionNode > &rInnerFunction)
static std::shared_ptr< ExpressionNode > createDividesExpression(const std::shared_ptr< ExpressionNode > &rLHS, const std::shared_ptr< ExpressionNode > &rRHS)
static std::shared_ptr< ExpressionNode > createMinusExpression(const std::shared_ptr< ExpressionNode > &rLHS, const std::shared_ptr< ExpressionNode > &rRHS)
std::shared_ptr< ExpressionNode > mpFirstArg
std::shared_ptr< ExpressionNode > mpSecondArg