OASIS
Open Algebra Software
Loading...
Searching...
No Matches
Visit.hpp
Go to the documentation of this file.
1//
2// Created by Matthew McCall on 4/28/24.
3//
4
5#ifndef OASIS_SERIALIZATION_HPP
6#define OASIS_SERIALIZATION_HPP
7
8#include <any>
9
10#include "Expression.hpp"
11
12namespace Oasis {
13
14class Real;
15class Imaginary;
16class Matrix;
17class Variable;
18class Undefined;
19class EulerNumber;
20class Pi;
21
22template <IExpression, IExpression>
23class Add;
24
25template <IExpression MinuendT, IExpression SubtrahendT>
26class Subtract;
27
28template <IExpression MultiplicandT, IExpression MultiplierT>
29class Multiply;
30
31template <IExpression DividendT, IExpression DivisorT>
32class Divide;
33
34template <IExpression BaseT, IExpression PowerT>
35class Exponent;
36
37template <IExpression BaseT, IExpression ArgumentT>
38class Log;
39
40template <typename OperandT>
41class Negate;
42
43template <typename OperandT>
44class Magnitude;
45
46template <IExpression, IExpression>
47class Derivative;
48
49template <IExpression Integrand, IExpression Differential>
50class Integral;
51
52class Visitor {
53public:
54 virtual std::any Visit(const Real& real) = 0;
55 virtual std::any Visit(const Imaginary& imaginary) = 0;
56 virtual std::any Visit(const Matrix& matrix) = 0;
57 virtual std::any Visit(const Variable& variable) = 0;
58 virtual std::any Visit(const Undefined& undefined) = 0;
59 virtual std::any Visit(const EulerNumber&) = 0;
60 virtual std::any Visit(const Pi&) = 0;
62 virtual std::any Visit(const Subtract<Expression, Expression>& subtract) = 0;
63 virtual std::any Visit(const Multiply<Expression, Expression>& multiply) = 0;
64 virtual std::any Visit(const Divide<Expression, Expression>& divide) = 0;
65 virtual std::any Visit(const Exponent<Expression, Expression>& exponent) = 0;
67 virtual std::any Visit(const Negate<Expression>& negate) = 0;
68 virtual std::any Visit(const Magnitude<Expression>& magnitude) = 0;
69 virtual std::any Visit(const Derivative<Expression, Expression>& derivative) = 0;
70 virtual std::any Visit(const Integral<Expression, Expression>& integral) = 0;
71
72 virtual ~Visitor() = default;
73};
74
75}
76
77#endif // OASIS_SERIALIZATION_HPP
The Add expression adds two expressions together.
Definition Add.hpp:40
The Derivative class template calculates the derivative of given expressions.
Definition Derivative.hpp:40
The Divide expression divides two expressions.
Definition Divide.hpp:42
An 'EulerNumber' number.
Definition EulerNumber.hpp:15
The exponent expression creates an exponent two expressions.
Definition Exponent.hpp:43
An 'imaginary' number.
Definition Imaginary.hpp:15
The Integral expression integrates the two expressions together.
Definition Integral.hpp:41
The Log expression represents the logarithm of a base and an argument.
Definition Log.hpp:42
Definition Magnitude.hpp:28
A matrix.
Definition Matrix.hpp:16
The Multiply expression multiplies two expressions.
Definition Multiply.hpp:40
Definition Negate.hpp:14
Mathematical Constant Pi.
Definition Pi.hpp:15
A real number.
Definition Real.hpp:15
The Subtract expression subtracts two expressions.
Definition Subtract.hpp:43
An undefined expression.
Definition Undefined.hpp:15
An algebraic variable.
Definition Variable.hpp:21
Definition Visit.hpp:52
virtual std::any Visit(const Derivative< Expression, Expression > &derivative)=0
virtual std::any Visit(const Imaginary &imaginary)=0
virtual ~Visitor()=default
virtual std::any Visit(const Integral< Expression, Expression > &integral)=0
virtual std::any Visit(const Subtract< Expression, Expression > &subtract)=0
virtual std::any Visit(const Multiply< Expression, Expression > &multiply)=0
virtual std::any Visit(const Divide< Expression, Expression > &divide)=0
virtual std::any Visit(const Pi &)=0
virtual std::any Visit(const Log< Expression, Expression > &log)=0
virtual std::any Visit(const Magnitude< Expression > &magnitude)=0
virtual std::any Visit(const Exponent< Expression, Expression > &exponent)=0
virtual std::any Visit(const Matrix &matrix)=0
virtual std::any Visit(const Real &real)=0
virtual std::any Visit(const Variable &variable)=0
virtual std::any Visit(const Undefined &undefined)=0
virtual std::any Visit(const Add< Expression, Expression > &add)=0
virtual std::any Visit(const EulerNumber &)=0
virtual std::any Visit(const Negate< Expression > &negate)=0
Definition Add.hpp:11