diff --git a/src/blackmisc/simulation/interpolatormulti.cpp b/src/blackmisc/simulation/interpolatormulti.cpp index 44871283c..41a63923a 100644 --- a/src/blackmisc/simulation/interpolatormulti.cpp +++ b/src/blackmisc/simulation/interpolatormulti.cpp @@ -11,6 +11,8 @@ #include "blackmisc/simulation/interpolatormulti.h" +using namespace BlackMisc::Aviation; + namespace BlackMisc { namespace Simulation @@ -137,5 +139,19 @@ namespace BlackMisc default: return u; } } - } -} + + CInterpolatorMultiWrapper::CInterpolatorMultiWrapper() + { } + + CInterpolatorMultiWrapper::CInterpolatorMultiWrapper(const CCallsign &callsign, QObject *parent) + { + m_interpolator.reset(new CInterpolatorMulti(callsign, parent)); + } + + CInterpolatorMultiWrapper::CInterpolatorMultiWrapper(const CCallsign &callsign, CInterpolationLogger *logger, QObject *parent) + { + m_interpolator.reset(new CInterpolatorMulti(callsign, parent)); + m_interpolator->attachLogger(logger); + } + } // ns +} // ns diff --git a/src/blackmisc/simulation/interpolatormulti.h b/src/blackmisc/simulation/interpolatormulti.h index 3f480d39a..383773ba7 100644 --- a/src/blackmisc/simulation/interpolatormulti.h +++ b/src/blackmisc/simulation/interpolatormulti.h @@ -91,7 +91,47 @@ namespace BlackMisc CInterpolatorDummy m_linear; #endif }; - } -} + + /** + * CInterpolatorMulti which can be used with QMap/QHash + */ + class BLACKMISC_EXPORT CInterpolatorMultiWrapper + { + public: + //! Default ctor, needed for QMap/QHash + CInterpolatorMultiWrapper(); + + //! Constructor + CInterpolatorMultiWrapper(const Aviation::CCallsign &callsign, QObject *parent = nullptr); + + //! Constructor + CInterpolatorMultiWrapper(const Aviation::CCallsign &callsign, CInterpolationLogger *logger, QObject *parent = nullptr); + + //! Has interpolator initialized? + bool hasInterpolator() const { return m_interpolator; } + + //! Interpolator + CInterpolatorMulti *interpolator() const { return m_interpolator.data(); } + + //! Allows implicit conversion + operator CInterpolatorMulti *() const { return this->interpolator(); } + + //! Bool conversion + operator bool() const { return this->hasInterpolator(); } + + //! Bool conversion + bool operator !() const { return !this->hasInterpolator(); } + + //! * operator + CInterpolatorMulti &operator *() const { return *this->interpolator(); } + + //! -> operator + CInterpolatorMulti *operator ->() const { return this->interpolator(); } + + private: + QSharedPointer m_interpolator; //!< shared pointer because CInterpolatorMultiWrapper can be copied + }; + } // ns +} // ns #endif