Numworks Epsilon  1.4.1
Graphing Calculator Operating System
addition.h
Go to the documentation of this file.
1 #ifndef POINCARE_ADDITION_H
2 #define POINCARE_ADDITION_H
3 
5 #include <poincare/rational.h>
8 
9 namespace Poincare {
10 
11 class Addition : public DynamicHierarchy {
13  friend class Logarithm;
14  friend class Multiplication;
15  friend class Subtraction;
16  friend class Power;
17  friend class Complex<float>;
18  friend class Complex<double>;
19 public:
20  Type type() const override;
21  Expression * clone() const override;
22  int polynomialDegree(char symbolName) const override;
23  /* Evaluation */
24  template<typename T> static Complex<T> compute(const Complex<T> c, const Complex<T> d);
25  template<typename T> static Matrix * computeOnMatrices(const Matrix * m, const Matrix * n) {
27  }
28  template<typename T> static Matrix * computeOnComplexAndMatrix(const Complex<T> * c, const Matrix * m) {
30  }
31 private:
32  /* Layout */
33  bool needParenthesisWithParent(const Expression * e) const override;
34  ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override {
35  return LayoutEngine::createInfixLayout(this, floatDisplayMode, complexFormat, name());
36  }
37  int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override {
38  return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name());
39  }
40  static const char * name() { return "+"; }
41 
42  /* Simplification */
43  Expression * shallowReduce(Context& context, AngleUnit angleUnit) override;
44  Expression * shallowBeautify(Context & context, AngleUnit angleUnit) override;
45  Expression * factorizeOnCommonDenominator(Context & context, AngleUnit angleUnit);
46  void factorizeOperands(Expression * e1, Expression * e2, Context & context, AngleUnit angleUnit);
47  static const Rational RationalFactor(Expression * e);
48  static bool TermsHaveIdenticalNonRationalFactors(const Expression * e1, const Expression * e2);
49  /* Evaluation */
50  template<typename T> static Matrix * computeOnMatrixAndComplex(const Matrix * m, const Complex<T> * c) {
52  }
53  Expression * privateApproximate(SinglePrecision p, Context& context, AngleUnit angleUnit) const override {
54  return ApproximationEngine::mapReduce<float>(this, context, angleUnit, compute<float>, computeOnComplexAndMatrix<float>, computeOnMatrixAndComplex<float>, computeOnMatrices<float>);
55  }
56  Expression * privateApproximate(DoublePrecision p, Context& context, AngleUnit angleUnit) const override {
57  return ApproximationEngine::mapReduce<double>(this, context, angleUnit, compute<double>, computeOnComplexAndMatrix<double>, computeOnMatrixAndComplex<double>, computeOnMatrices<double>);
58  }
59 };
60 
61 }
62 
63 #endif
int polynomialDegree(char symbolName) const override
Definition: addition.cpp:26
static int writeInfixExpressionTextInBuffer(const Expression *expression, char *buffer, int bufferSize, int numberOfDigits, const char *operatorName)
static Matrix * computeOnMatrices(const Matrix *m, const Matrix *n)
Definition: addition.h:25
Type type() const override
Definition: addition.cpp:15
Expression * clone() const override
Definition: addition.cpp:19
static Complex< T > compute(const Complex< T > c, const Complex< T > d)
Definition: addition.cpp:331
static Matrix * elementWiseOnComplexAndComplexMatrix(const Complex< T > *c, const Matrix *n, ComplexAndComplexReduction< T > computeOnComplexes)
c(generic_all_nodes)
friend class Rational
Definition: expression.h:18
static ExpressionLayout * createInfixLayout(const Expression *expression, PrintFloat::Mode floatDisplayMode, Expression::ComplexFormat complexFormat, const char *operatorName)
friend class Matrix
Definition: expression.h:73
static Matrix * computeOnComplexAndMatrix(const Complex< T > *c, const Matrix *m)
Definition: addition.h:28
static Matrix * elementWiseOnComplexMatrices(const Matrix *m, const Matrix *n, ComplexAndComplexReduction< T > computeOnComplexes)