diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index b41736c7..e4c61dfb 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -8,6 +8,7 @@ set(Oasis_HEADERS Oasis/EulerNumber.hpp Oasis/Exponent.hpp Oasis/Expression.hpp + Oasis/FwdDecls.hpp Oasis/Imaginary.hpp Oasis/Integral.hpp Oasis/LeafExpression.hpp diff --git a/include/Oasis/Concepts.hpp b/include/Oasis/Concepts.hpp index 94500df4..428df464 100644 --- a/include/Oasis/Concepts.hpp +++ b/include/Oasis/Concepts.hpp @@ -5,6 +5,8 @@ #ifndef OASIS_CONCEPTS_HPP #define OASIS_CONCEPTS_HPP +#include + namespace Oasis { class Expression; diff --git a/include/Oasis/FwdDecls.hpp b/include/Oasis/FwdDecls.hpp new file mode 100644 index 00000000..38a443e7 --- /dev/null +++ b/include/Oasis/FwdDecls.hpp @@ -0,0 +1,50 @@ +// +// Created by Matthew McCall on 12/9/25. +// + +#ifndef OASIS_FWDDECLS_HPP +#define OASIS_FWDDECLS_HPP + +#include "Concepts.hpp" + +namespace Oasis { +class Real; +class Imaginary; +class Matrix; +class Variable; +class Undefined; +class EulerNumber; +class Pi; + +template +class Add; + +template +class Subtract; + +template +class Multiply; + +template +class Divide; + +template +class Exponent; + +template +class Log; + +template +class Negate; + +template +class Magnitude; + +template +class Derivative; + +template +class Integral; +} + +#endif // OASIS_FWDDECLS_HPP diff --git a/include/Oasis/Visit.hpp b/include/Oasis/Visit.hpp index 12fa687d..408ee544 100644 --- a/include/Oasis/Visit.hpp +++ b/include/Oasis/Visit.hpp @@ -5,48 +5,11 @@ #ifndef OASIS_SERIALIZATION_HPP #define OASIS_SERIALIZATION_HPP +#include "FwdDecls.hpp" #include "Expression.hpp" namespace Oasis { -class Real; -class Imaginary; -class Matrix; -class Variable; -class Undefined; -class EulerNumber; -class Pi; - -template -class Add; - -template -class Subtract; - -template -class Multiply; - -template -class Divide; - -template -class Exponent; - -template -class Log; - -template -class Negate; - -template -class Magnitude; - -template -class Derivative; - -template -class Integral; - class Visitor { public: virtual any Visit(const Real& real) = 0;