mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-04 17:30:12 +08:00
Ref T243, Ref T273, improved elevation fetching
* slightly shorter lock time * transfer elevation from last situation
This commit is contained in:
@@ -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())
|
||||||
|
|||||||
Reference in New Issue
Block a user