From 60c70c34f641c5772fb273bd80c0453f13d40837 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 26 Mar 2018 00:55:10 +0200 Subject: [PATCH] Ref T259, Ref T243 prefill provider situations, so interpolator can immediately start --- .../simulation/remoteaircraftprovider.cpp | 9 ++++++++- src/blackmisc/timestampobjectlist.cpp | 14 ++++++++++++++ src/blackmisc/timestampobjectlist.h | 3 +++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/blackmisc/simulation/remoteaircraftprovider.cpp b/src/blackmisc/simulation/remoteaircraftprovider.cpp index ef9cf8acf..81e3aedb5 100644 --- a/src/blackmisc/simulation/remoteaircraftprovider.cpp +++ b/src/blackmisc/simulation/remoteaircraftprovider.cpp @@ -167,7 +167,14 @@ namespace BlackMisc // list from new to old QWriteLocker lock(&m_lockSituations); CAircraftSituationList &situationList = m_situationsByCallsign[situation.getCallsign()]; - situationList.push_frontKeepLatestFirstAdjustOffset(situation, IRemoteAircraftProvider::MaxSituationsPerCallsign); + if (situationList.isEmpty()) + { + situationList.prefillLatestAdjustedFirst(situation, IRemoteAircraftProvider::MaxSituationsPerCallsign); + } + else + { + situationList.push_frontKeepLatestFirstAdjustOffset(situation, IRemoteAircraftProvider::MaxSituationsPerCallsign); + } // check sort order Q_ASSERT_X(situationList.isSortedAdjustedLatestFirst(), Q_FUNC_INFO, "wrong sort order"); diff --git a/src/blackmisc/timestampobjectlist.cpp b/src/blackmisc/timestampobjectlist.cpp index 9f108c1d1..9e7db1548 100644 --- a/src/blackmisc/timestampobjectlist.cpp +++ b/src/blackmisc/timestampobjectlist.cpp @@ -377,6 +377,20 @@ namespace BlackMisc // 0: os 5 adj 5 } + template + void ITimestampWithOffsetObjectList::prefillLatestAdjustedFirst(const OBJ &value, int elements, qint64 deltaTimeMs) + { + this->container().clear(); + const qint64 os = -1 * qAbs(deltaTimeMs < 0 ? value.getTimeOffsetMs() : deltaTimeMs); + this->container().push_front(value); + for (int i = 1; i < elements; i++) + { + OBJ copy(value); + copy.addMsecs(os * i); + this->container().push_back(copy); + } + } + template bool ITimestampWithOffsetObjectList::isSortedAdjustedLatestLast() const { diff --git a/src/blackmisc/timestampobjectlist.h b/src/blackmisc/timestampobjectlist.h index ed97760c1..67171c916 100644 --- a/src/blackmisc/timestampobjectlist.h +++ b/src/blackmisc/timestampobjectlist.h @@ -147,6 +147,9 @@ namespace BlackMisc //! \remark adjust offset to average offset of two adjacent elements so adjusted values are sorted void push_frontKeepLatestFirstAdjustOffset(const OBJ &value, int maxElements = -1); + //! Prefill with elements + void prefillLatestAdjustedFirst(const OBJ &value, int elements, qint64 deltaTimeMs = -1); + //! Is completely sorted: latest last //! \remark all object must have a valid timestamp bool isSortedAdjustedLatestLast() const;