Ref T259, Ref T243 prefill provider situations, so interpolator can immediately start

This commit is contained in:
Klaus Basan
2018-03-26 00:55:10 +02:00
parent 1c89f4c8e3
commit 60c70c34f6
3 changed files with 25 additions and 1 deletions

View File

@@ -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");

View File

@@ -377,6 +377,20 @@ namespace BlackMisc
// 0: os 5 adj 5
}
template<class OBJ, class CONTAINER>
void ITimestampWithOffsetObjectList<OBJ, CONTAINER>::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<class OBJ, class CONTAINER>
bool ITimestampWithOffsetObjectList<OBJ, CONTAINER>::isSortedAdjustedLatestLast() const
{

View File

@@ -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;