From 1c2533f5d2144d4f7c04bdad3b06d8f4532eacf3 Mon Sep 17 00:00:00 2001 From: Mathew Sutcliffe Date: Tue, 17 Jan 2017 23:04:45 +0000 Subject: [PATCH] refs #863 Moved nested status classes to namespace scope. --- src/blackmisc/simulation/interpolator.cpp | 14 +-- src/blackmisc/simulation/interpolator.h | 104 +++++++++--------- .../simulation/interpolatorlinear.cpp | 2 +- src/blackmisc/simulation/interpolatorlinear.h | 2 +- src/plugins/simulator/fs9/fs9client.cpp | 2 +- src/plugins/simulator/fsx/simulatorfsx.cpp | 8 +- src/plugins/simulator/fsx/simulatorfsx.h | 4 +- src/xbus/traffic.cpp | 4 +- tests/blackmisc/testinterpolator.cpp | 4 +- 9 files changed, 73 insertions(+), 71 deletions(-) diff --git a/src/blackmisc/simulation/interpolator.cpp b/src/blackmisc/simulation/interpolator.cpp index c11071f93..043166bcd 100644 --- a/src/blackmisc/simulation/interpolator.cpp +++ b/src/blackmisc/simulation/interpolator.cpp @@ -35,7 +35,7 @@ namespace BlackMisc BlackMisc::Aviation::CAircraftSituation IInterpolator::getInterpolatedSituation( qint64 currentTimeSinceEpoc, const CInterpolationAndRenderingSetup &setup, - const CInterpolationHints &hints, InterpolationStatus &status) const + const CInterpolationHints &hints, CInterpolationStatus &status) const { status.reset(); @@ -45,7 +45,7 @@ namespace BlackMisc } CAircraftParts IInterpolator::getInterpolatedParts(const CCallsign &callsign, const CAircraftPartsList &parts, qint64 currentTimeMsSinceEpoch, - const CInterpolationAndRenderingSetup &setup, IInterpolator::PartsStatus &partsStatus, bool log) const + const CInterpolationAndRenderingSetup &setup, CPartsStatus &partsStatus, bool log) const { Q_UNUSED(setup); partsStatus.reset(); @@ -109,7 +109,7 @@ namespace BlackMisc } CAircraftParts IInterpolator::getInterpolatedParts(const CCallsign &callsign, qint64 currentTimeMsSinceEpoch, - const CInterpolationAndRenderingSetup &setup, IInterpolator::PartsStatus &partsStatus, bool log) const + const CInterpolationAndRenderingSetup &setup, CPartsStatus &partsStatus, bool log) const { partsStatus.reset(); return this->getInterpolatedParts(callsign, this->m_aircraftParts, currentTimeMsSinceEpoch, setup, partsStatus, log); @@ -398,23 +398,23 @@ namespace BlackMisc return QString("%1 %2 %3").arg(msSinceEpochToTime(t1), msSinceEpochToTime(t2), msSinceEpochToTime(t3)); } - bool IInterpolator::InterpolationStatus::allTrue() const + bool CInterpolationStatus::allTrue() const { return m_interpolationSucceeded && m_changedPosition; } - void IInterpolator::InterpolationStatus::reset() + void CInterpolationStatus::reset() { m_changedPosition = false; m_interpolationSucceeded = false; } - bool IInterpolator::PartsStatus::allTrue() const + bool CPartsStatus::allTrue() const { return m_supportsParts; } - void IInterpolator::PartsStatus::reset() + void CPartsStatus::reset() { m_supportsParts = false; } diff --git a/src/blackmisc/simulation/interpolator.h b/src/blackmisc/simulation/interpolator.h index ec20cd478..ae87b7422 100644 --- a/src/blackmisc/simulation/interpolator.h +++ b/src/blackmisc/simulation/interpolator.h @@ -30,6 +30,8 @@ namespace BlackMisc namespace Simulation { class CInterpolationHints; + struct CInterpolationStatus; + struct CPartsStatus; //! Interpolator, calculation inbetween positions class BLACKMISC_EXPORT IInterpolator : public QObject @@ -40,74 +42,27 @@ namespace BlackMisc //! Log category static QString getLogCategory() { return "swift.interpolator"; } - //! Status of interpolation - struct BLACKMISC_EXPORT InterpolationStatus // does not link without export/allTrue, reset - { - public: - //! Did interpolation succeed? - bool didInterpolationSucceed() const { return m_interpolationSucceeded; } - - //! Set succeeded - void setInterpolationSucceeded(bool succeeded) { m_interpolationSucceeded = succeeded; } - - //! Changed position? - bool hasChangedPosition() const { return m_changedPosition; } - - //! Set as changed - void setChangedPosition(bool changed) { m_changedPosition = changed; } - - //! all OK - bool allTrue() const; - - //! Reset to default values - void reset(); - - private: - bool m_changedPosition = false; //!< position was changed - bool m_interpolationSucceeded = false; //!< interpolation succeeded (means enough values, etc.) - }; - - //! Status regarding parts - struct BLACKMISC_EXPORT PartsStatus // does not link without export/allTrue, resetx - { - public: - //! all OK - bool allTrue() const; - - //! Supporting parts - bool isSupportingParts() const { return m_supportsParts; } - - //! Set support flag - void setSupportsParts(bool supports) { m_supportsParts = supports; } - - //! Reset to default values - void reset(); - - private: - bool m_supportsParts = false; //!< supports parts for given callsign - }; - //! Current interpolated situation virtual BlackMisc::Aviation::CAircraftSituation getInterpolatedSituation( const BlackMisc::Aviation::CCallsign &callsign, qint64 currentTimeSinceEpoc, - const CInterpolationAndRenderingSetup &setup, const CInterpolationHints &hints, InterpolationStatus &status) const; + const CInterpolationAndRenderingSetup &setup, const CInterpolationHints &hints, CInterpolationStatus &status) const; //! Current interpolated situation, to be implemented by subclass virtual BlackMisc::Aviation::CAircraftSituation getInterpolatedSituation( const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituationList &situations, qint64 currentTimeSinceEpoc, - const CInterpolationAndRenderingSetup &setup, const CInterpolationHints &hints, InterpolationStatus &status) const = 0; + const CInterpolationAndRenderingSetup &setup, const CInterpolationHints &hints, CInterpolationStatus &status) const = 0; //! Parts before given offset time (aka pending parts) virtual BlackMisc::Aviation::CAircraftParts getInterpolatedParts( const Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftPartsList &parts, qint64 cutoffTime, - const CInterpolationAndRenderingSetup &setup, PartsStatus &partsStatus, bool log = false) const; + const CInterpolationAndRenderingSetup &setup, CPartsStatus &partsStatus, bool log = false) const; //! Parts before given offset time (aka pending parts) virtual BlackMisc::Aviation::CAircraftParts getInterpolatedParts( const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTime, - const CInterpolationAndRenderingSetup &setup, PartsStatus &partsStatus, bool log = false) const; + const CInterpolationAndRenderingSetup &setup, CPartsStatus &partsStatus, bool log = false) const; //! Add a new aircraft situation void addAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation); @@ -208,6 +163,53 @@ namespace BlackMisc mutable QList m_partsLogs; //!< logs of parts mutable QList m_interpolationLogs; //!< logs of interpolation }; + + //! Status of interpolation + struct BLACKMISC_EXPORT CInterpolationStatus + { + public: + //! Did interpolation succeed? + bool didInterpolationSucceed() const { return m_interpolationSucceeded; } + + //! Set succeeded + void setInterpolationSucceeded(bool succeeded) { m_interpolationSucceeded = succeeded; } + + //! Changed position? + bool hasChangedPosition() const { return m_changedPosition; } + + //! Set as changed + void setChangedPosition(bool changed) { m_changedPosition = changed; } + + //! all OK + bool allTrue() const; + + //! Reset to default values + void reset(); + + private: + bool m_changedPosition = false; //!< position was changed + bool m_interpolationSucceeded = false; //!< interpolation succeeded (means enough values, etc.) + }; + + //! Status regarding parts + struct BLACKMISC_EXPORT CPartsStatus + { + public: + //! all OK + bool allTrue() const; + + //! Supporting parts + bool isSupportingParts() const { return m_supportsParts; } + + //! Set support flag + void setSupportsParts(bool supports) { m_supportsParts = supports; } + + //! Reset to default values + void reset(); + + private: + bool m_supportsParts = false; //!< supports parts for given callsign + }; } // namespace } // namespace #endif // guard diff --git a/src/blackmisc/simulation/interpolatorlinear.cpp b/src/blackmisc/simulation/interpolatorlinear.cpp index 39fc3dd65..61c1de00e 100644 --- a/src/blackmisc/simulation/interpolatorlinear.cpp +++ b/src/blackmisc/simulation/interpolatorlinear.cpp @@ -41,7 +41,7 @@ namespace BlackMisc namespace Simulation { CAircraftSituation CInterpolatorLinear::getInterpolatedSituation(const CCallsign &callsign, const CAircraftSituationList &situations, qint64 currentTimeMsSinceEpoc, - const CInterpolationAndRenderingSetup &setup, const CInterpolationHints &hints, InterpolationStatus &status) const + const CInterpolationAndRenderingSetup &setup, const CInterpolationHints &hints, CInterpolationStatus &status) const { status.reset(); diff --git a/src/blackmisc/simulation/interpolatorlinear.h b/src/blackmisc/simulation/interpolatorlinear.h index db60f7f58..69ab7c0ae 100644 --- a/src/blackmisc/simulation/interpolatorlinear.h +++ b/src/blackmisc/simulation/interpolatorlinear.h @@ -41,7 +41,7 @@ namespace BlackMisc virtual BlackMisc::Aviation::CAircraftSituation getInterpolatedSituation( const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituationList &situations, qint64 currentTimeSinceEpoc, const CInterpolationAndRenderingSetup &setup, - const BlackMisc::Simulation::CInterpolationHints &hints, InterpolationStatus &status) const override; + const BlackMisc::Simulation::CInterpolationHints &hints, CInterpolationStatus &status) const override; //! Log category static QString getLogCategory() { return "swift.interpolatorlinear"; } diff --git a/src/plugins/simulator/fs9/fs9client.cpp b/src/plugins/simulator/fs9/fs9client.cpp index 6db2efbc5..541986446 100644 --- a/src/plugins/simulator/fs9/fs9client.cpp +++ b/src/plugins/simulator/fs9/fs9client.cpp @@ -181,7 +181,7 @@ namespace BlackSimPlugin if (m_clientStatus == Disconnected) { return; } - IInterpolator::InterpolationStatus status; + 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); diff --git a/src/plugins/simulator/fsx/simulatorfsx.cpp b/src/plugins/simulator/fsx/simulatorfsx.cpp index a8f9acf1d..a012d6697 100644 --- a/src/plugins/simulator/fsx/simulatorfsx.cpp +++ b/src/plugins/simulator/fsx/simulatorfsx.cpp @@ -899,14 +899,14 @@ namespace BlackSimPlugin // fetch parts, as they are needed for ground interpolation const bool useAircraftParts = enableAircraftParts && aircraftWithParts.contains(callsign); const bool logInterpolationAndParts = callsignsToLog.contains(callsign); - IInterpolator::PartsStatus partsStatus; + CPartsStatus partsStatus; partsStatus.setSupportsParts(useAircraftParts); const CInterpolationAndRenderingSetup setup(getInterpolationAndRenderingSetup()); const CAircraftParts parts = useAircraftParts ? simObj.getInterpolator()->getInterpolatedParts(callsign, -1, setup, partsStatus, logInterpolationAndParts) : CAircraftParts(); // get interpolated situation - IInterpolator::InterpolationStatus interpolatorStatus; + CInterpolationStatus interpolatorStatus; CInterpolationHints hints(m_hints[simObj.getCallsign()]); hints.setAircraftParts(useAircraftParts ? parts : CAircraftParts(), useAircraftParts); hints.setLoggingInterpolation(logInterpolationAndParts); @@ -946,7 +946,7 @@ namespace BlackSimPlugin m_statsUpdateAircraftTimeAvgMs = m_statsUpdateAircraftTimeTotalMs / m_statsUpdateAircraftCountMs; } - bool CSimulatorFsx::guessAndUpdateRemoteAircraftParts(const CSimConnectObject &simObj, const CAircraftSituation &interpolatedSituation, const IInterpolator::InterpolationStatus &interpolationStatus) + bool CSimulatorFsx::guessAndUpdateRemoteAircraftParts(const CSimConnectObject &simObj, const CAircraftSituation &interpolatedSituation, const CInterpolationStatus &interpolationStatus) { if (!simObj.hasValidRequestAndObjectId()) { return false; } if (!interpolationStatus.didInterpolationSucceed()) { return false; } @@ -1017,7 +1017,7 @@ namespace BlackSimPlugin return this->sendRemoteAircraftPartsToSimulator(simObj, ddRemoteAircraftParts, lights); } - bool CSimulatorFsx::updateRemoteAircraftParts(const CSimConnectObject &simObj, const CAircraftParts &parts, const IInterpolator::PartsStatus &partsStatus) + bool CSimulatorFsx::updateRemoteAircraftParts(const CSimConnectObject &simObj, const CAircraftParts &parts, const CPartsStatus &partsStatus) { if (!simObj.hasValidRequestAndObjectId()) { return false; } if (!partsStatus.isSupportingParts()) { return false; } diff --git a/src/plugins/simulator/fsx/simulatorfsx.h b/src/plugins/simulator/fsx/simulatorfsx.h index 0ac862493..48da9f532 100644 --- a/src/plugins/simulator/fsx/simulatorfsx.h +++ b/src/plugins/simulator/fsx/simulatorfsx.h @@ -189,11 +189,11 @@ namespace BlackSimPlugin //! Update remote aircraft parts (send to FSX) bool updateRemoteAircraftParts(const CSimConnectObject &simObj, - const BlackMisc::Aviation::CAircraftParts &parts, const BlackMisc::Simulation::IInterpolator::PartsStatus &partsStatus); + const BlackMisc::Aviation::CAircraftParts &parts, const BlackMisc::Simulation::CPartsStatus &partsStatus); //! Update remote aircraft parts by guessing (send to FSX) bool guessAndUpdateRemoteAircraftParts(const CSimConnectObject &simObj, - const BlackMisc::Aviation::CAircraftSituation &interpolatedSituation, const BlackMisc::Simulation::IInterpolator::InterpolationStatus &interpolationStatus); + const BlackMisc::Aviation::CAircraftSituation &interpolatedSituation, const BlackMisc::Simulation::CInterpolationStatus &interpolationStatus); //! Send parts to simulator bool sendRemoteAircraftPartsToSimulator(const CSimConnectObject &simObj, DataDefinitionRemoteAircraftParts &ddRemoteAircraftParts, const BlackMisc::Aviation::CAircraftLights &lights); diff --git a/src/xbus/traffic.cpp b/src/xbus/traffic.cpp index a53694a16..e1cad7c36 100644 --- a/src/xbus/traffic.cpp +++ b/src/xbus/traffic.cpp @@ -49,7 +49,7 @@ namespace XBus // if the setup is needed more than once, store it here to avoid multiple locks BlackMisc::Simulation::CInterpolationAndRenderingSetup setup; BlackMisc::Simulation::CInterpolationHints hints; - BlackMisc::Simulation::IInterpolator::CPartsStatus status; + BlackMisc::Simulation::CPartsStatus status; hints.setAircraftParts(interpolator.getInterpolatedParts(callsign, -1, setup, status)); hints.setElevationProvider([this](const auto & situation) { @@ -333,7 +333,7 @@ namespace XBus case xpmpDataType_Position: { BlackMisc::Simulation::CInterpolationAndRenderingSetup setup; - BlackMisc::Simulation::IInterpolator::CInterpolationStatus status; + BlackMisc::Simulation::CInterpolationStatus status; const auto situation = plane->interpolator.getInterpolatedSituation(plane->callsign, -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 082a72b29..9e5695d70 100644 --- a/tests/blackmisc/testinterpolator.cpp +++ b/tests/blackmisc/testinterpolator.cpp @@ -84,7 +84,7 @@ namespace BlackMiscTest QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); // interpolation functional check - IInterpolator::InterpolationStatus status; + CInterpolationStatus status; const CInterpolationHints hints; const CInterpolationAndRenderingSetup setup; double latOld = 360.0; @@ -144,7 +144,7 @@ namespace BlackMiscTest timer.start(); for (qint64 currentTime = ts - 2 * deltaT; currentTime < ts; currentTime += 250) { - IInterpolator::PartsStatus partsStatus; + CPartsStatus partsStatus; CAircraftParts pl(interpolator.getInterpolatedParts(cs, ts, setup, partsStatus)); fetchedParts++; QVERIFY2(partsStatus.isSupportingParts(), "Parts not supported");