Ref T275, added "latestOnGroundProviderElevation" to improve average elevation

This commit is contained in:
Klaus Basan
2018-06-18 19:03:45 +02:00
parent 2c55015d26
commit 7cc350974c
6 changed files with 62 additions and 10 deletions

View File

@@ -85,6 +85,14 @@ namespace BlackMisc
return CAircraftSituationList(situations);
}
CAircraftSituationList CRemoteAircraftProvider::latestOnGroundProviderElevations() const
{
QReadLocker l(&m_lockSituations);
const QList<CAircraftSituation> situations(m_latestOnGroundProviderElevation.values());
l.unlock();
return CAircraftSituationList(situations);
}
int CRemoteAircraftProvider::remoteAircraftSituationsCount(const CCallsign &callsign) const
{
QReadLocker l(&m_lockSituations);
@@ -162,6 +170,7 @@ namespace BlackMisc
QWriteLocker l(&m_lockSituations);
m_situationsByCallsign.clear();
m_latestSituationByCallsign.clear();
m_latestOnGroundProviderElevation.clear();
m_situationsAdded = 0;
m_situationsLastModified.clear();
m_testOffset.clear();
@@ -466,9 +475,15 @@ namespace BlackMisc
{
QWriteLocker l(&m_lockSituations);
CAircraftSituationList &situations = m_situationsByCallsign[callsign];
if (situations.isEmpty()) { return 0; }
updated = situations.setGroundElevationCheckedAndGuessGround(elevation, info, model, &change);
if (updated < 1) { return 0; }
m_situationsLastModified[callsign] = ts;
const CAircraftSituation latest = situations.front();
if (info == CAircraftSituation::FromProvider && latest.isOnGround())
{
m_latestOnGroundProviderElevation[callsign] = latest;
}
}
// update change
@@ -629,7 +644,7 @@ namespace BlackMisc
CElevationPlane CRemoteAircraftProvider::averageElevationOfNonMovingAircraft(const CAircraftSituation &reference, const CLength &range, int minValues) const
{
const CAircraftSituationList situations = this->latestRemoteAircraftSituations();
const CAircraftSituationList situations = this->latestOnGroundProviderElevations();
return situations.averageElevationOfNonMovingAircraft(reference, range, minValues);
}
@@ -691,8 +706,19 @@ namespace BlackMisc
bool CRemoteAircraftProvider::removeAircraft(const CCallsign &callsign)
{
{ QWriteLocker l1(&m_lockParts); m_partsByCallsign.remove(callsign); m_aircraftWithParts.remove(callsign); m_partsLastModified.remove(callsign); }
{ QWriteLocker l2(&m_lockSituations); m_situationsByCallsign.remove(callsign); m_latestSituationByCallsign.remove(callsign); m_situationsLastModified.remove(callsign); }
{
QWriteLocker l1(&m_lockParts);
m_partsByCallsign.remove(callsign);
m_aircraftWithParts.remove(callsign);
m_partsLastModified.remove(callsign);
}
{
QWriteLocker l2(&m_lockSituations);
m_situationsByCallsign.remove(callsign);
m_latestSituationByCallsign.remove(callsign);
m_latestOnGroundProviderElevation.remove(callsign);
m_situationsLastModified.remove(callsign);
}
{ QWriteLocker l4(&m_lockPartsHistory); m_aircraftPartsMessages.remove(callsign); }
bool removedCallsign = false;
{
@@ -769,6 +795,12 @@ namespace BlackMisc
return this->provider()->latestRemoteAircraftSituations();
}
CAircraftSituationList CRemoteAircraftAware::latestOnGroundProviderElevations() const
{
Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available");
return this->provider()->latestOnGroundProviderElevations();
}
CAircraftSituationChangeList CRemoteAircraftAware::remoteAircraftSituationChanges(const CCallsign &callsign) const
{
Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available");

View File

@@ -101,6 +101,10 @@ namespace BlackMisc
//! \threadsafe
virtual Aviation::CAircraftSituationList latestRemoteAircraftSituations() const = 0;
//! Latest aircraft situation "on ground" having a provider elevation
//! \threadsafe
virtual Aviation::CAircraftSituationList latestOnGroundProviderElevations() const = 0;
//! Number of remote aircraft situations for callsign
//! \remark latest situations first
//! \threadsafe
@@ -266,6 +270,7 @@ namespace BlackMisc
virtual Aviation::CAircraftSituationList remoteAircraftSituations(const Aviation::CCallsign &callsign) const override;
virtual Aviation::CAircraftSituation remoteAircraftSituation(const Aviation::CCallsign &callsign, int index) const override;
virtual Aviation::CAircraftSituationList latestRemoteAircraftSituations() const override;
virtual Aviation::CAircraftSituationList latestOnGroundProviderElevations() const override;
virtual int remoteAircraftSituationsCount(const Aviation::CCallsign &callsign) const override;
virtual Aviation::CAircraftPartsList remoteAircraftParts(const Aviation::CCallsign &callsign) const override;
virtual int remoteAircraftPartsCount(const Aviation::CCallsign &callsign) const override;
@@ -406,11 +411,12 @@ namespace BlackMisc
//! \threadsafe
void storeChange(const Aviation::CAircraftSituationChange &change);
Aviation::CAircraftSituationListPerCallsign m_situationsByCallsign; //!< situations, for performance reasons per callsign, thread safe access required
Aviation::CAircraftSituationPerCallsign m_latestSituationByCallsign; //!< latest situations, for performance reasons per callsign, thread safe access required
Aviation::CAircraftPartsListPerCallsign m_partsByCallsign; //!< parts, for performance reasons per callsign, thread safe access required
Aviation::CAircraftSituationChangeListPerCallsign m_changesByCallsign; //!< changes, for performance reasons per callsign, thread safe access required
Aviation::CCallsignSet m_aircraftWithParts; //!< aircraft supporting parts, thread safe access required
Aviation::CAircraftSituationListPerCallsign m_situationsByCallsign; //!< situations, for performance reasons per callsign, thread safe access required
Aviation::CAircraftSituationPerCallsign m_latestSituationByCallsign; //!< latest situations, for performance reasons per callsign, thread safe access required
Aviation::CAircraftSituationPerCallsign m_latestOnGroundProviderElevation; //!< situation on ground with elevation from provider
Aviation::CAircraftPartsListPerCallsign m_partsByCallsign; //!< parts, for performance reasons per callsign, thread safe access required
Aviation::CAircraftSituationChangeListPerCallsign m_changesByCallsign; //!< changes, for performance reasons per callsign, thread safe access required
Aviation::CCallsignSet m_aircraftWithParts; //!< aircraft supporting parts, thread safe access required
int m_situationsAdded = 0; //!< total number of situations added, thread safe access required
int m_partsAdded = 0; //!< total number of parts added, thread safe access required
@@ -470,6 +476,9 @@ namespace BlackMisc
//! \copydoc IRemoteAircraftProvider::latestRemoteAircraftSituations
Aviation::CAircraftSituationList latestRemoteAircraftSituations() const;
//! \copydoc IRemoteAircraftProvider::latestOnGroundProviderElevations
Aviation::CAircraftSituationList latestOnGroundProviderElevations() const;
//! \copydoc IRemoteAircraftProvider::remoteAircraftSituationsCount
int remoteAircraftSituationsCount(const Aviation::CCallsign &callsign) const;