From e67b5fccc4674c92187d87c583d413b0d13dec7b Mon Sep 17 00:00:00 2001 From: Mathew Sutcliffe Date: Mon, 6 Feb 2017 19:20:37 +0000 Subject: [PATCH] refs #863 Change callsign parameter to be a member instead. --- src/blackmisc/simulation/interpolator.cpp | 13 +++++++------ src/blackmisc/simulation/interpolator.h | 9 ++++----- src/blackmisc/simulation/interpolatorlinear.h | 4 ++-- src/blackmisc/simulation/interpolatorspline.h | 4 ++-- src/plugins/simulator/fs9/fs9client.cpp | 3 ++- src/plugins/simulator/fsx/simconnectobject.cpp | 2 +- src/plugins/simulator/fsx/simulatorfsx.cpp | 4 ++-- src/xbus/traffic.cpp | 7 ++++--- tests/blackmisc/testinterpolator.cpp | 10 +++++----- 9 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/blackmisc/simulation/interpolator.cpp b/src/blackmisc/simulation/interpolator.cpp index aa2844e82..5ee08da72 100644 --- a/src/blackmisc/simulation/interpolator.cpp +++ b/src/blackmisc/simulation/interpolator.cpp @@ -37,14 +37,15 @@ namespace BlackMisc namespace Simulation { template - CInterpolator::CInterpolator(const QString &objectName, QObject *parent) : - QObject(parent) + CInterpolator::CInterpolator(const QString &objectName, const BlackMisc::Aviation::CCallsign &callsign, QObject *parent) : + QObject(parent), + m_callsign(callsign) { this->setObjectName(objectName); } template - CAircraftSituation CInterpolator::getInterpolatedSituation(const CCallsign &callsign, qint64 currentTimeMsSinceEpoc, + CAircraftSituation CInterpolator::getInterpolatedSituation(qint64 currentTimeMsSinceEpoc, const CInterpolationAndRenderingSetup &setup, const CInterpolationHints &hints, CInterpolationStatus &status) { status.reset(); @@ -113,7 +114,7 @@ namespace BlackMisc if (hints.isLoggingInterpolation()) { log.timestamp = currentTimeMsSinceEpoc; - log.callsign = callsign; + log.callsign = m_callsign; log.vtolAircraft = hints.isVtolAircraft(); log.currentSituation = currentSituation; log.useParts = hints.hasAircraftParts(); @@ -173,7 +174,7 @@ namespace BlackMisc } template - CAircraftParts CInterpolator::getInterpolatedParts(const CCallsign &callsign, qint64 currentTimeMsSinceEpoch, + CAircraftParts CInterpolator::getInterpolatedParts(qint64 currentTimeMsSinceEpoch, const CInterpolationAndRenderingSetup &setup, CPartsStatus &partsStatus, bool log) { Q_UNUSED(setup); @@ -227,7 +228,7 @@ namespace BlackMisc if (log) { PartsLog log; - log.callsign = callsign; + log.callsign = m_callsign; log.timestamp = currentTimeMsSinceEpoch; log.parts = currentParts; CInterpolator::logParts(log); diff --git a/src/blackmisc/simulation/interpolator.h b/src/blackmisc/simulation/interpolator.h index daf77790d..156ae187f 100644 --- a/src/blackmisc/simulation/interpolator.h +++ b/src/blackmisc/simulation/interpolator.h @@ -44,13 +44,11 @@ namespace BlackMisc //! Current interpolated situation BlackMisc::Aviation::CAircraftSituation getInterpolatedSituation( - const BlackMisc::Aviation::CCallsign &callsign, qint64 currentTimeSinceEpoc, - const CInterpolationAndRenderingSetup &setup, const CInterpolationHints &hints, CInterpolationStatus &status); + qint64 currentTimeSinceEpoc, const CInterpolationAndRenderingSetup &setup, const CInterpolationHints &hints, CInterpolationStatus &status); //! Parts before given offset time (aka pending parts) BlackMisc::Aviation::CAircraftParts getInterpolatedParts( - const Aviation::CCallsign &callsign, qint64 cutoffTime, - const CInterpolationAndRenderingSetup &setup, CPartsStatus &partsStatus, bool log = false); + qint64 cutoffTime, const CInterpolationAndRenderingSetup &setup, CPartsStatus &partsStatus, bool log = false); //! Add a new aircraft situation void addAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation); @@ -81,6 +79,7 @@ namespace BlackMisc protected: BlackMisc::Aviation::CAircraftSituationList m_aircraftSituations; //!< recent situations BlackMisc::Aviation::CAircraftPartsList m_aircraftParts; //!< recent parts + BlackMisc::Aviation::CCallsign m_callsign; //!< callsign //! Log for interpolation struct InterpolationLog @@ -108,7 +107,7 @@ namespace BlackMisc }; //! Constructor - CInterpolator(const QString &objectName, QObject *parent); + CInterpolator(const QString &objectName, const BlackMisc::Aviation::CCallsign &callsign, QObject *parent); //! Log current interpolation cycle, only stores in memory, for performance reasons //! \remark const to allow const interpolator functions diff --git a/src/blackmisc/simulation/interpolatorlinear.h b/src/blackmisc/simulation/interpolatorlinear.h index fca1e0e5a..1c51e1965 100644 --- a/src/blackmisc/simulation/interpolatorlinear.h +++ b/src/blackmisc/simulation/interpolatorlinear.h @@ -32,8 +32,8 @@ namespace BlackMisc public: //! Constructor - CInterpolatorLinear(QObject *parent = nullptr) : - CInterpolator("CInterpolatorLinear", parent) + CInterpolatorLinear(const BlackMisc::Aviation::CCallsign &callsign, QObject *parent = nullptr) : + CInterpolator("CInterpolatorLinear", callsign, parent) {} //! Linear function that performs the actual interpolation diff --git a/src/blackmisc/simulation/interpolatorspline.h b/src/blackmisc/simulation/interpolatorspline.h index 790f5d257..88c2eaf5c 100644 --- a/src/blackmisc/simulation/interpolatorspline.h +++ b/src/blackmisc/simulation/interpolatorspline.h @@ -29,8 +29,8 @@ namespace BlackMisc public: //! Constructor - CInterpolatorSpline(QObject *parent = nullptr) : - CInterpolator("CInterpolatorSpline", parent) + CInterpolatorSpline(const BlackMisc::Aviation::CCallsign &callsign, QObject *parent = nullptr) : + CInterpolator("CInterpolatorSpline", callsign, parent) {} //! Cubic function that performs the actual interpolation diff --git a/src/plugins/simulator/fs9/fs9client.cpp b/src/plugins/simulator/fs9/fs9client.cpp index 541986446..91d4f24ae 100644 --- a/src/plugins/simulator/fs9/fs9client.cpp +++ b/src/plugins/simulator/fs9/fs9client.cpp @@ -122,6 +122,7 @@ namespace BlackSimPlugin const CTime &updateInterval, QObject *owner) : CDirectPlayPeer(owner, callsign), m_updateInterval(updateInterval), + m_interpolator(callsign), m_modelName(modelName) { } @@ -184,7 +185,7 @@ namespace BlackSimPlugin CInterpolationStatus status; CInterpolationHints hints; // \fixme 201701 #865 KB if there is an elevation provider for FS9 add it here or set elevation hints.setLoggingInterpolation(this->getInterpolationSetup().getLogCallsigns().contains(m_callsign)); - const CAircraftSituation situation = this->m_interpolator.getInterpolatedSituation(m_callsign, -1, this->m_interpolationSetup, hints, status); + const CAircraftSituation situation = this->m_interpolator.getInterpolatedSituation(-1, this->m_interpolationSetup, hints, status); // Test only for successful interpolation. FS9 requires constant positions if (!status.didInterpolationSucceed()) { return; } diff --git a/src/plugins/simulator/fsx/simconnectobject.cpp b/src/plugins/simulator/fsx/simconnectobject.cpp index 81cb7c195..1e515a9d6 100644 --- a/src/plugins/simulator/fsx/simconnectobject.cpp +++ b/src/plugins/simulator/fsx/simconnectobject.cpp @@ -22,7 +22,7 @@ namespace BlackSimPlugin CSimConnectObject::CSimConnectObject(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, DWORD requestId) : m_aircraft(aircraft), m_requestId(requestId), m_validRequestId(true), - m_interpolator(QSharedPointer::create()) + m_interpolator(QSharedPointer::create(aircraft.getCallsign())) { } bool CSimConnectObject::isPendingAdded() const diff --git a/src/plugins/simulator/fsx/simulatorfsx.cpp b/src/plugins/simulator/fsx/simulatorfsx.cpp index a012d6697..73e50fb4d 100644 --- a/src/plugins/simulator/fsx/simulatorfsx.cpp +++ b/src/plugins/simulator/fsx/simulatorfsx.cpp @@ -903,14 +903,14 @@ namespace BlackSimPlugin partsStatus.setSupportsParts(useAircraftParts); const CInterpolationAndRenderingSetup setup(getInterpolationAndRenderingSetup()); - const CAircraftParts parts = useAircraftParts ? simObj.getInterpolator()->getInterpolatedParts(callsign, -1, setup, partsStatus, logInterpolationAndParts) : CAircraftParts(); + const CAircraftParts parts = useAircraftParts ? simObj.getInterpolator()->getInterpolatedParts(-1, setup, partsStatus, logInterpolationAndParts) : CAircraftParts(); // get interpolated situation CInterpolationStatus interpolatorStatus; CInterpolationHints hints(m_hints[simObj.getCallsign()]); hints.setAircraftParts(useAircraftParts ? parts : CAircraftParts(), useAircraftParts); hints.setLoggingInterpolation(logInterpolationAndParts); - const CAircraftSituation interpolatedSituation = simObj.getInterpolator()->getInterpolatedSituation(callsign, currentTimestamp, setup, hints, interpolatorStatus); + const CAircraftSituation interpolatedSituation = simObj.getInterpolator()->getInterpolatedSituation(currentTimestamp, setup, hints, interpolatorStatus); if (interpolatorStatus.allTrue()) { diff --git a/src/xbus/traffic.cpp b/src/xbus/traffic.cpp index c372dfc8c..55af7927e 100644 --- a/src/xbus/traffic.cpp +++ b/src/xbus/traffic.cpp @@ -16,6 +16,7 @@ #include "utils.h" #include "blackmisc/simulation/interpolator.h" #include "blackmisc/simulation/interpolationhints.h" +#include "blackmisc/aviation/callsign.h" #include "XPMPMultiplayer.h" #include #include @@ -28,7 +29,7 @@ namespace XBus { CTraffic::Plane::Plane(void *id_, QString callsign_, QString aircraftIcao_, QString airlineIcao_, QString livery_) - : id(id_), callsign(callsign_), aircraftIcao(aircraftIcao_), airlineIcao(airlineIcao_), livery(livery_) + : id(id_), callsign(callsign_), aircraftIcao(aircraftIcao_), airlineIcao(airlineIcao_), livery(livery_), interpolator(callsign) { std::memset(static_cast(&surfaces), 0, sizeof(surfaces)); surfaces.lights.bcnLights = surfaces.lights.landLights = surfaces.lights.navLights = surfaces.lights.strbLights = 1; @@ -49,7 +50,7 @@ namespace XBus BlackMisc::Simulation::CInterpolationAndRenderingSetup setup; BlackMisc::Simulation::CInterpolationHints hints; BlackMisc::Simulation::CPartsStatus status; - hints.setAircraftParts(interpolator.getInterpolatedParts(callsign, -1, setup, status)); + hints.setAircraftParts(interpolator.getInterpolatedParts(-1, setup, status)); hints.setElevationProvider([this](const auto & situation) { using namespace BlackMisc::PhysicalQuantities; @@ -333,7 +334,7 @@ namespace XBus { BlackMisc::Simulation::CInterpolationAndRenderingSetup setup; BlackMisc::Simulation::CInterpolationStatus status; - const auto situation = plane->interpolator.getInterpolatedSituation(plane->callsign, -1, setup, plane->hints(), status); + const auto situation = plane->interpolator.getInterpolatedSituation(-1, setup, plane->hints(), status); if (! status.didInterpolationSucceed()) { return xpmpData_Unavailable; } if (! status.hasChangedPosition()) { return xpmpData_Unchanged; } diff --git a/tests/blackmisc/testinterpolator.cpp b/tests/blackmisc/testinterpolator.cpp index 9e5695d70..d4a8ace28 100644 --- a/tests/blackmisc/testinterpolator.cpp +++ b/tests/blackmisc/testinterpolator.cpp @@ -56,13 +56,13 @@ namespace BlackMiscTest void CTestInterpolator::linearInterpolator() { - CInterpolatorLinear interpolator; + CCallsign cs("SWIFT"); + CInterpolatorLinear interpolator(cs); // fixed time so everything can be debugged const qint64 ts = 1425000000000; // QDateTime::currentMSecsSinceEpoch(); const qint64 deltaT = 5000; // ms const qint64 offset = 5000; - CCallsign cs("SWIFT"); for (int i = 0; i < IRemoteAircraftProvider::MaxSituationsPerCallsign; i++) { CAircraftSituation s(getTestSituation(cs, i, ts, deltaT, offset)); @@ -95,7 +95,7 @@ namespace BlackMiscTest // from: ts - 2 * deltaT + offset // to: ts + offset CAircraftSituation currentSituation(interpolator.getInterpolatedSituation - (cs, currentTime, setup, hints, status) + (currentTime, setup, hints, status) ); QVERIFY2(status.didInterpolationSucceed(), "Interpolation was not succesful"); QVERIFY2(status.hasChangedPosition(), "Interpolation did not changed"); @@ -125,7 +125,7 @@ namespace BlackMiscTest // from: ts - 2* deltaT + offset // to: ts + offset CAircraftSituation currentSituation(interpolator.getInterpolatedSituation - (cs, currentTime, setup, hints, status) + (currentTime, setup, hints, status) ); QVERIFY2(status.allTrue(), "Failed interpolation"); QVERIFY2(currentSituation.getCallsign() == cs, "Wrong callsign"); @@ -145,7 +145,7 @@ namespace BlackMiscTest for (qint64 currentTime = ts - 2 * deltaT; currentTime < ts; currentTime += 250) { CPartsStatus partsStatus; - CAircraftParts pl(interpolator.getInterpolatedParts(cs, ts, setup, partsStatus)); + CAircraftParts pl(interpolator.getInterpolatedParts(ts, setup, partsStatus)); fetchedParts++; QVERIFY2(partsStatus.isSupportingParts(), "Parts not supported"); }