Ref T243, Ref T273, improved elevation fetching

* slightly shorter lock time
* transfer elevation from last situation
This commit is contained in:
Klaus Basan
2018-06-03 00:31:17 +02:00
parent a3b8d776a0
commit b257c693ff

View File

@@ -194,10 +194,6 @@ namespace BlackMisc
{ {
const CCallsign cs = situation.getCallsign(); const CCallsign cs = situation.getCallsign();
if (cs.isEmpty()) { return; } if (cs.isEmpty()) { return; }
const qint64 ts = QDateTime::currentMSecsSinceEpoch();
// for testing only
const CAircraftSituation situationOffset(this->testAddAltitudeOffsetToSituation(situation));
// verify // verify
if (CBuildConfig::isLocalDeveloperDebugBuild()) if (CBuildConfig::isLocalDeveloperDebugBuild())
@@ -205,7 +201,12 @@ namespace BlackMisc
BLACK_VERIFY_X(situation.getTimeOffsetMs() > 0, Q_FUNC_INFO, "Missing offset"); BLACK_VERIFY_X(situation.getTimeOffsetMs() > 0, Q_FUNC_INFO, "Missing offset");
} }
// add offset (for testing only)
CAircraftSituation situationCorrected(this->testAddAltitudeOffsetToSituation(situation));
// list from new to old // list from new to old
const qint64 ts = QDateTime::currentMSecsSinceEpoch();
{
QWriteLocker lock(&m_lockSituations); QWriteLocker lock(&m_lockSituations);
m_situationsAdded++; m_situationsAdded++;
m_situationsLastModified[cs] = ts; m_situationsLastModified[cs] = ts;
@@ -213,18 +214,19 @@ namespace BlackMisc
const int situations = situationList.size(); const int situations = situationList.size();
if (situations < 1) if (situations < 1)
{ {
situationList.prefillLatestAdjustedFirst(situationOffset, IRemoteAircraftProvider::MaxSituationsPerCallsign); situationList.prefillLatestAdjustedFirst(situationCorrected, IRemoteAircraftProvider::MaxSituationsPerCallsign);
} }
else else
{ {
situationList.push_frontKeepLatestFirstAdjustOffset(situationOffset, IRemoteAircraftProvider::MaxSituationsPerCallsign); situationList.front().transferGroundElevation(situationCorrected); // transfer last situation if possible
} situationList.push_frontKeepLatestFirstAdjustOffset(situationCorrected, IRemoteAircraftProvider::MaxSituationsPerCallsign);
// unify all inbound ground information // unify all inbound ground information
if (situation.hasInboundGroundDetails()) if (situation.hasInboundGroundDetails())
{ {
situationList.setOnGroundDetails(situation.getOnGroundDetails()); situationList.setOnGroundDetails(situation.getOnGroundDetails());
} }
}
// check sort order // check sort order
if (CBuildConfig::isLocalDeveloperDebugBuild()) if (CBuildConfig::isLocalDeveloperDebugBuild())
@@ -232,8 +234,9 @@ namespace BlackMisc
BLACK_VERIFY_X(situationList.isSortedAdjustedLatestFirstWithoutNullPositions(), Q_FUNC_INFO, "wrong sort order"); BLACK_VERIFY_X(situationList.isSortedAdjustedLatestFirstWithoutNullPositions(), Q_FUNC_INFO, "wrong sort order");
BLACK_VERIFY_X(situationList.size() <= IRemoteAircraftProvider::MaxSituationsPerCallsign, Q_FUNC_INFO, "Wrong size"); BLACK_VERIFY_X(situationList.size() <= IRemoteAircraftProvider::MaxSituationsPerCallsign, Q_FUNC_INFO, "Wrong size");
} }
} // lock
emit this->addedAircraftSituation(situation); emit this->addedAircraftSituation(situationCorrected);
} }
void CRemoteAircraftProvider::storeAircraftParts(const CCallsign &callsign, const CAircraftParts &parts, bool removeOutdated) void CRemoteAircraftProvider::storeAircraftParts(const CCallsign &callsign, const CAircraftParts &parts, bool removeOutdated)
@@ -258,7 +261,7 @@ namespace BlackMisc
// check sort order // check sort order
Q_ASSERT_X(partsList.isSortedAdjustedLatestFirst(), Q_FUNC_INFO, "wrong sort order"); Q_ASSERT_X(partsList.isSortedAdjustedLatestFirst(), Q_FUNC_INFO, "wrong sort order");
Q_ASSERT_X(partsList.size() <= IRemoteAircraftProvider::MaxPartsPerCallsign, Q_FUNC_INFO, "Wrong size"); Q_ASSERT_X(partsList.size() <= IRemoteAircraftProvider::MaxPartsPerCallsign, Q_FUNC_INFO, "Wrong size");
} } // lock
// adjust gnd.flag from parts // adjust gnd.flag from parts
if (!correctiveParts.isEmpty()) if (!correctiveParts.isEmpty())