From 6134b3d0a354c757858a83ec3cf62daedc5380db Mon Sep 17 00:00:00 2001 From: Mathew Sutcliffe Date: Mon, 6 Jun 2016 20:02:00 +0100 Subject: [PATCH] refs #667 XBus: use the thread-agnostic interpolator method, to avoid an unnecessary dynamic memory allocation. --- src/xbus/traffic.cpp | 26 ++------------------------ src/xbus/traffic.h | 2 -- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/src/xbus/traffic.cpp b/src/xbus/traffic.cpp index 1cd753d50..a0f59142f 100644 --- a/src/xbus/traffic.cpp +++ b/src/xbus/traffic.cpp @@ -42,30 +42,9 @@ namespace XBus surfaces.lights.timeOffset = static_cast(qrand() % 0xffff); } - class CTraffic::AircraftProvider : public BlackMisc::Simulation::CRemoteAircraftProviderDummy - { - public: - //! Constructor. - AircraftProvider(QObject *parent = nullptr) : CRemoteAircraftProviderDummy(parent) {} - - //! \copydoc IRemoteAircraftProvider::remoteAircraftSituations - //! \todo return reference not copy, thread safety not needed - virtual BlackMisc::Aviation::CAircraftSituationList remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &) const override { return *m_situations; } - - //! \copydoc IRemoteAircraftProvider::remoteAircraftSituationsCount - virtual int remoteAircraftSituationsCount(const BlackMisc::Aviation::CCallsign &) const override { return m_situations->size(); } - - //! Inject the situations to be interpolated (for performance, no lookup by callsign). - void setSituations(const BlackMisc::Aviation::CAircraftSituationList *situations) { m_situations = situations; } - - private: - const BlackMisc::Aviation::CAircraftSituationList *m_situations = nullptr; - }; - CTraffic::CTraffic(QObject *parent) : QObject(parent), - m_provider(new AircraftProvider(this)), - m_interpolator(new BlackMisc::CInterpolatorLinear(m_provider, this)) + m_interpolator(new BlackMisc::CInterpolatorLinear(new BlackMisc::Simulation::CRemoteAircraftProviderDummy(this), this)) { } @@ -328,8 +307,7 @@ namespace XBus case xpmpDataType_Position: { BlackMisc::IInterpolator::InterpolationStatus status; - m_provider->setSituations(&plane->situations); - auto situation = m_interpolator->getInterpolatedSituation(plane->callsign, -1, false, status); + auto situation = m_interpolator->getInterpolatedSituation(plane->situations, -1, false, status); if (! status.interpolationSucceeded) { return xpmpData_Unavailable; } if (! status.changedPosition) { return xpmpData_Unchanged; } diff --git a/src/xbus/traffic.h b/src/xbus/traffic.h index 0da0155e5..6b389ef2b 100644 --- a/src/xbus/traffic.h +++ b/src/xbus/traffic.h @@ -144,8 +144,6 @@ namespace XBus return static_cast(self)->getPlaneData(id, dataType, io_data); } - class AircraftProvider; - AircraftProvider *m_provider = nullptr; BlackMisc::IInterpolator *m_interpolator = nullptr; };