From a27717cf8b509a4265c588e10d459ea36165a520 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sat, 4 Mar 2017 21:51:49 +0100 Subject: [PATCH] refs #895, also log when parts are empty * added empty flag * move logging into own function (because it is called in multiple places now) --- .../simulation/interpolationlogger.cpp | 2 +- .../simulation/interpolationlogger.h | 1 + src/blackmisc/simulation/interpolator.cpp | 30 +++++++++++++------ src/blackmisc/simulation/interpolator.h | 3 ++ 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/blackmisc/simulation/interpolationlogger.cpp b/src/blackmisc/simulation/interpolationlogger.cpp index 97cefc619..ff72b1745 100644 --- a/src/blackmisc/simulation/interpolationlogger.cpp +++ b/src/blackmisc/simulation/interpolationlogger.cpp @@ -228,7 +228,7 @@ namespace BlackMisc QLatin1String("") % log.callsign.asString() % QLatin1String("") % QLatin1String("") % msSinceEpochToTime(log.timestamp) % QLatin1String("") % (changedParts ? QLatin1String("*") : QLatin1String("")) % - QLatin1String("") % log.parts.toQString() % QLatin1String(""); + QLatin1String("") % (log.empty ? QLatin1String("empty") : log.parts.toQString()) % QLatin1String(""); } tableRows += QLatin1String("\n"); return QLatin1String("\n") % tableHeader % tableRows % QLatin1String("
\n"); diff --git a/src/blackmisc/simulation/interpolationlogger.h b/src/blackmisc/simulation/interpolationlogger.h index 9f1094f8d..6d4c02491 100644 --- a/src/blackmisc/simulation/interpolationlogger.h +++ b/src/blackmisc/simulation/interpolationlogger.h @@ -78,6 +78,7 @@ namespace BlackMisc qint64 timestamp = -1; //!< current timestamp BlackMisc::Aviation::CCallsign callsign; //!< current callsign BlackMisc::Aviation::CAircraftParts parts; //!< parts to be logged + bool empty = false; }; //! Log current interpolation cycle, only stores in memory, for performance reasons diff --git a/src/blackmisc/simulation/interpolator.cpp b/src/blackmisc/simulation/interpolator.cpp index af9fca36e..9f57709ec 100644 --- a/src/blackmisc/simulation/interpolator.cpp +++ b/src/blackmisc/simulation/interpolator.cpp @@ -182,6 +182,14 @@ namespace BlackMisc partsStatus.reset(); if (currentTimeMsSinceEpoch < 0) { currentTimeMsSinceEpoch = QDateTime::currentMSecsSinceEpoch(); } + // log for empty parts aircraft parts + if (m_aircraftParts.isEmpty()) + { + static const CAircraftParts emptyParts; + this->logParts(currentTimeMsSinceEpoch, emptyParts, true, log); + emptyParts; + } + // find the first parts not in the correct order, keep only the parts before that one const auto end = std::is_sorted_until(m_aircraftParts.begin(), m_aircraftParts.end(), [](auto && a, auto && b) { return b.getAdjustedMSecsSinceEpoch() < a.getAdjustedMSecsSinceEpoch(); }); const auto validParts = makeRange(m_aircraftParts.begin(), end); @@ -226,18 +234,22 @@ namespace BlackMisc } while (false); - if (m_logger && log) - { - CInterpolationLogger::PartsLog log; - log.callsign = m_callsign; - log.timestamp = currentTimeMsSinceEpoch; - log.parts = currentParts; - m_logger->logParts(log); - } - + this->logParts(currentTimeMsSinceEpoch, currentParts, false, log); return currentParts; } + template + void CInterpolator::logParts(qint64 timestamp, const CAircraftParts &parts, bool empty, bool log) + { + if (!log || !m_logger) { return; } + CInterpolationLogger::PartsLog logInfo; + logInfo.callsign = m_callsign; + logInfo.timestamp = timestamp; + logInfo.parts = parts; + logInfo.empty = empty; + m_logger->logParts(logInfo); + } + template void CInterpolator::addAircraftSituation(const CAircraftSituation &situation) { diff --git a/src/blackmisc/simulation/interpolator.h b/src/blackmisc/simulation/interpolator.h index acdf18fbd..c57723cf9 100644 --- a/src/blackmisc/simulation/interpolator.h +++ b/src/blackmisc/simulation/interpolator.h @@ -88,6 +88,9 @@ namespace BlackMisc private: CInterpolationLogger *m_logger = nullptr; + //! Log parts + void logParts(qint64 timestamp, const Aviation::CAircraftParts &parts, bool empty, bool log); + Derived *derived() { return static_cast(this); } const Derived *derived() const { return static_cast(this); } };