1 #ifndef POINCARE_EXPRESSION_H 2 #define POINCARE_EXPRESSION_H 13 template<
class T>
class Complex;
227 virtual int writeTextInBuffer(
char * buffer,
int bufferSize,
int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits)
const = 0;
247 template<
typename T>
static T epsilon();
266 bool isOfType(
Type * types,
int length)
const;
267 virtual bool needParenthesisWithParent(
const Expression * e)
const;
275 virtual int simplificationOrderGreaterType(
const Expression * e,
bool canBeInterrupted)
const {
return -1; }
277 virtual int simplificationOrderSameType(
const Expression * e,
bool canBeInterrupted)
const {
return 0; }
281 static void Reduce(
Expression ** expressionAddress, Context & context,
AngleUnit angleUnit,
bool recursively =
true);
286 virtual Expression * shallowBeautify(Context & context,
AngleUnit angleUnit) {
return this; };
static bool shouldStopProcessing()
Expression * parent() const
Expression * replaceWith(Expression *newOperand, bool deleteAfterReplace=true)
virtual ~Expression()=default
Expression * approximate(Context &context, AngleUnit angleUnit=AngleUnit::Default) const
static bool IsMatrix(const Expression *e, Context &context)
bool recursivelyMatches(ExpressionTest test, Context &context) const
bool hasAncestor(const Expression *e) const
virtual const Expression *const * operands() const =0
virtual Expression * clone() const =0
static Expression * parse(char const *string)
static void setCircuitBreaker(CircuitBreaker cb)
static constexpr int k_maxNumberOfSteps
Expression * editableOperand(int i)
static int SimplificationOrder(const Expression *e1, const Expression *e2, bool canBeInterrupted=false)
void detachOperandAtIndex(int i)
virtual int numberOfOperands() const =0
bool isIdenticalTo(const Expression *e) const
ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode=PrintFloat::Mode::Default, ComplexFormat complexFormat=ComplexFormat::Default) const
bool isApproximate(Context &context) const
friend class SimplificationEngine
static void ReplaceSymbolWithExpression(Expression **expressionAddress, char symbol, Expression *expression)
virtual float characteristicXRange(Context &context, AngleUnit angleUnit=AngleUnit::Default) const
bool(* ExpressionTest)(const Expression *e, Context &context)
void setParent(Expression *parent)
void swapOperands(int i, int j)
virtual Sign sign() const
static void Simplify(Expression **expressionAddress, Context &context, AngleUnit angleUnit=AngleUnit::Default)
void detachOperand(const Expression *e)
T approximateToScalar(Context &context, AngleUnit angleUnit=AngleUnit::Default) const
const Expression * operand(int i) const
virtual int polynomialDegree(char symbolName) const
virtual Type type() const =0
void replaceOperand(const Expression *oldOperand, Expression *newOperand, bool deleteOldOperand=true)
virtual int writeTextInBuffer(char *buffer, int bufferSize, int numberOfSignificantDigits=PrintFloat::k_numberOfStoredSignificantDigits) const =0
static Expression * ParseAndSimplify(const char *text, Context &context, AngleUnit angleUnit=AngleUnit::Default)