Ref T280, using the QHash<CCallsign, T> definitions to unify use cases

This commit is contained in:
Klaus Basan
2018-06-12 00:47:49 +02:00
parent edde558f29
commit c5fb428fa9
8 changed files with 25 additions and 32 deletions

View File

@@ -37,7 +37,7 @@
#include <QJsonObject> #include <QJsonObject>
#include <QList> #include <QList>
#include <QMap> #include <QHash>
#include <QMetaObject> #include <QMetaObject>
#include <QObject> #include <QObject>
#include <QReadWriteLock> #include <QReadWriteLock>
@@ -167,9 +167,8 @@ namespace BlackCore
BlackMisc::Aviation::CAtcStationList m_atcStationsOnline; //!< online ATC stations BlackMisc::Aviation::CAtcStationList m_atcStationsOnline; //!< online ATC stations
BlackMisc::Aviation::CAtcStationList m_atcStationsBooked; //!< booked ATC stations BlackMisc::Aviation::CAtcStationList m_atcStationsBooked; //!< booked ATC stations
QMap<BlackMisc::Aviation::CCallsign, FsInnPacket> m_tempFsInnPackets; QHash<BlackMisc::Aviation::CCallsign, FsInnPacket> m_tempFsInnPackets;
QHash<BlackMisc::Aviation::CCallsign, BlackMisc::Aviation::CFlightPlan> m_flightPlanCache; //!< flight plan information retrieved from network and cached
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::Aviation::CFlightPlan> m_flightPlanCache; //!< flight plan information retrieved from network and cached
INetwork *m_network = nullptr; //!< corresponding network interface INetwork *m_network = nullptr; //!< corresponding network interface
CAirspaceAnalyzer *m_analyzer = nullptr; //!< owned analyzer CAirspaceAnalyzer *m_analyzer = nullptr; //!< owned analyzer

View File

@@ -739,9 +739,9 @@ namespace BlackCore
bool CSimulatorCommon::isEqualLastSent(const CAircraftSituation &compare) const bool CSimulatorCommon::isEqualLastSent(const CAircraftSituation &compare) const
{ {
Q_ASSERT_X(compare.hasCallsign(), Q_FUNC_INFO, "Need callsign"); Q_ASSERT_X(compare.hasCallsign(), Q_FUNC_INFO, "Need callsign");
if (!m_lastSentSituation.contains(compare.getCallsign())) { return false; } if (!m_lastSentSituations.contains(compare.getCallsign())) { return false; }
if (compare.isNull()) { return false; } if (compare.isNull()) { return false; }
return compare.equalPbhAndVector(m_lastSentSituation.value(compare.getCallsign())); return compare.equalPbhAndVector(m_lastSentSituations.value(compare.getCallsign()));
} }
bool CSimulatorCommon::isEqualLastSent(const CAircraftParts &compare, const CCallsign &callsign) const bool CSimulatorCommon::isEqualLastSent(const CAircraftParts &compare, const CCallsign &callsign) const
@@ -754,7 +754,7 @@ namespace BlackCore
void CSimulatorCommon::rememberLastSent(const CAircraftSituation &sent) void CSimulatorCommon::rememberLastSent(const CAircraftSituation &sent)
{ {
Q_ASSERT_X(sent.hasCallsign(), Q_FUNC_INFO, "Need callsign"); Q_ASSERT_X(sent.hasCallsign(), Q_FUNC_INFO, "Need callsign");
m_lastSentSituation.insert(sent.getCallsign(), sent); m_lastSentSituations.insert(sent.getCallsign(), sent);
} }
void CSimulatorCommon::rememberLastSent(const CAircraftParts &sent, const CCallsign &callsign) void CSimulatorCommon::rememberLastSent(const CAircraftParts &sent, const CCallsign &callsign)
@@ -846,7 +846,7 @@ namespace BlackCore
m_callsignsToBeRendered.clear(); m_callsignsToBeRendered.clear();
m_clampedLogMsg.clear(); m_clampedLogMsg.clear();
m_lastSentParts.clear(); m_lastSentParts.clear();
m_lastSentSituation.clear(); m_lastSentSituations.clear();
m_updateRemoteAircraftInProgress = false; m_updateRemoteAircraftInProgress = false;
this->resetHighlighting(); this->resetHighlighting();
@@ -891,7 +891,7 @@ namespace BlackCore
m_statsPhysicallyRemovedAircraft++; m_statsPhysicallyRemovedAircraft++;
m_clampedLogMsg.clear(); m_clampedLogMsg.clear();
m_lastSentParts.remove(remoteCallsign); m_lastSentParts.remove(remoteCallsign);
m_lastSentSituation.remove(remoteCallsign); m_lastSentSituations.remove(remoteCallsign);
m_clampedLogMsg.remove(remoteCallsign); m_clampedLogMsg.remove(remoteCallsign);
this->physicallyRemoveRemoteAircraft(remoteCallsign); this->physicallyRemoveRemoteAircraft(remoteCallsign);
} }

View File

@@ -283,9 +283,9 @@ namespace BlackCore
BlackMisc::Simulation::CSimulatorInternals m_simulatorInternals; //!< setup object BlackMisc::Simulation::CSimulatorInternals m_simulatorInternals; //!< setup object
BlackMisc::Simulation::CInterpolationLogger m_interpolationLogger; //!< log.interpolation BlackMisc::Simulation::CInterpolationLogger m_interpolationLogger; //!< log.interpolation
QMap<BlackMisc::Aviation::CCallsign, qint64> m_clampedLogMsg; //!< when logged last for this callsign, can be used so there is no log message overflow BlackMisc::Aviation::CTimestampPerCallsign m_clampedLogMsg; //!< when logged last for this callsign, can be used so there is no log message overflow
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::Aviation::CAircraftSituation> m_lastSentSituation; //!< last situation sent to simulator BlackMisc::Aviation::CAircraftSituationPerCallsign m_lastSentSituations; //!< last situation sent to simulator
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::Aviation::CAircraftParts> m_lastSentParts; //!< last parts sent to simulator BlackMisc::Aviation::CAircraftPartsPerCallsign m_lastSentParts; //!< last parts sent to simulator
// some optional functionality which can be used by the simulators as needed // some optional functionality which can be used by the simulators as needed
BlackMisc::Simulation::CSimulatedAircraftList m_addAgainAircraftWhenRemoved; //!< add this model again when removed, normally used to change model BlackMisc::Simulation::CSimulatedAircraftList m_addAgainAircraftWhenRemoved; //!< add this model again when removed, normally used to change model

View File

@@ -28,9 +28,9 @@ namespace BlackMisc
void CClientProvider::setClients(const CClientList &clients) void CClientProvider::setClients(const CClientList &clients)
{ {
const QMap<CCallsign, CClient> map = clients.asMap(); const CClientPerCallsign perCallsign(clients.asCallsignHash());
QWriteLocker l(&m_lockClient); QWriteLocker l(&m_lockClient);
m_clients = map; m_clients = perCallsign;
} }
void CClientProvider::clearClients() void CClientProvider::clearClients()

View File

@@ -102,7 +102,7 @@ namespace BlackMisc
//! @} //! @}
private: private:
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::Network::CClient> m_clients; CClientPerCallsign m_clients;
mutable QReadWriteLock m_lockClient; //!< lock clients: m_clients mutable QReadWriteLock m_lockClient; //!< lock clients: m_clients
}; };

View File

@@ -19,6 +19,7 @@
#include "blackmisc/aviation/aircraftpartslist.h" #include "blackmisc/aviation/aircraftpartslist.h"
#include "blackmisc/aviation/aircraftsituationlist.h" #include "blackmisc/aviation/aircraftsituationlist.h"
#include "blackmisc/aviation/aircraftsituationchange.h" #include "blackmisc/aviation/aircraftsituationchange.h"
#include "blackmisc/aviation/percallsign.h"
#include "blackmisc/aviation/callsignset.h" #include "blackmisc/aviation/callsignset.h"
#include "blackmisc/provider.h" #include "blackmisc/provider.h"
#include "blackmisc/blackmiscexport.h" #include "blackmisc/blackmiscexport.h"
@@ -50,12 +51,6 @@ namespace BlackMisc
static constexpr int MaxPartsAgePerCallsignSecs = 60; //!< How many seconds to keep parts for interpolation static constexpr int MaxPartsAgePerCallsignSecs = 60; //!< How many seconds to keep parts for interpolation
static constexpr int DefaultOffsetTimeMs = 6000; //!< \fixme copied from CNetworkVatlib::c_positionTimeOffsetMsec static constexpr int DefaultOffsetTimeMs = 6000; //!< \fixme copied from CNetworkVatlib::c_positionTimeOffsetMsec
//! Situations per callsign
using CSituationsPerCallsign = QHash<Aviation::CCallsign, Aviation::CAircraftSituationList>;
//! Parts per callsign
using CPartsPerCallsign = QHash<Aviation::CCallsign, Aviation::CAircraftPartsList>;
//! All remote aircraft //! All remote aircraft
//! \threadsafe //! \threadsafe
virtual CSimulatedAircraftList getAircraftInRange() const = 0; virtual CSimulatedAircraftList getAircraftInRange() const = 0;
@@ -378,19 +373,18 @@ namespace BlackMisc
Aviation::CAircraftSituation testAddAltitudeOffsetToSituation(const Aviation::CAircraftSituation &situation) const; Aviation::CAircraftSituation testAddAltitudeOffsetToSituation(const Aviation::CAircraftSituation &situation) const;
private: private:
// hashs, because not sorted by key but keeping order Aviation::CAircraftSituationListPerCallsign m_situationsByCallsign; //!< situations, for performance reasons per callsign, thread safe access required
CSituationsPerCallsign m_situationsByCallsign; //!< situations, for performance reasons per callsign, thread safe access required Aviation::CAircraftPartsListPerCallsign m_partsByCallsign; //!< parts, for performance reasons per callsign, thread safe access required
CPartsPerCallsign m_partsByCallsign; //!< parts, for performance reasons per callsign, thread safe access required Aviation::CCallsignSet m_aircraftWithParts; //!< aircraft supporting parts, 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_situationsAdded = 0; //!< total number of situations added, thread safe access required
int m_partsAdded = 0; //!< total number of parts added, thread safe access required int m_partsAdded = 0; //!< total number of parts added, thread safe access required
CSimulatedAircraftList m_aircraftInRange; //!< aircraft, thread safe access required CSimulatedAircraftList m_aircraftInRange; //!< aircraft, thread safe access required
QMap<Aviation::CCallsign, CStatusMessageList> m_reverseLookupMessages; Aviation::CStatusMessageListPerCallsign m_reverseLookupMessages; //!< reverse lookup messages
QMap<Aviation::CCallsign, CStatusMessageList> m_aircraftPartsHistory; //!< JSON aircraft parts history Aviation::CStatusMessageListPerCallsign m_aircraftPartsHistory; //!< status messages for parts history
QMap<Aviation::CCallsign, qint64> m_situationsLastModified; Aviation::CTimestampPerCallsign m_situationsLastModified; //!< when situations last modified
QMap<Aviation::CCallsign, qint64> m_partsLastModified; Aviation::CTimestampPerCallsign m_partsLastModified; //!< when parts last modified
QMap<Aviation::CCallsign, PhysicalQuantities::CLength> m_testOffset; QHash<Aviation::CCallsign, PhysicalQuantities::CLength> m_testOffset;
bool m_enableReverseLookupMsgs = false; //!< shall we log. information about the matching process bool m_enableReverseLookupMsgs = false; //!< shall we log. information about the matching process
bool m_enableAircraftPartsHistory = true; //!< shall we keep a history of aircraft parts bool m_enableAircraftPartsHistory = true; //!< shall we keep a history of aircraft parts

View File

@@ -105,7 +105,7 @@ namespace BlackMisc
CElevationPlane ISimulationEnvironmentProvider::findClosestElevationWithinRange(const ICoordinateGeodetic &reference, const CLength &range) const CElevationPlane ISimulationEnvironmentProvider::findClosestElevationWithinRange(const ICoordinateGeodetic &reference, const CLength &range) const
{ {
// for single point we use a slightly optimized version // for single point we use a slightly optimized version
const bool singlePoint = (range <= CElevationPlane::singlePointRadius()); const bool singlePoint = (&range == &CElevationPlane::singlePointRadius() || range <= CElevationPlane::singlePointRadius());
const CCoordinateGeodetic coordinate = singlePoint ? const CCoordinateGeodetic coordinate = singlePoint ?
this->getElevationCoordinates().findFirstWithinRangeOrDefault(reference, CElevationPlane::singlePointRadius()) : this->getElevationCoordinates().findFirstWithinRangeOrDefault(reference, CElevationPlane::singlePointRadius()) :
this->getElevationCoordinates().findClosestWithinRange(reference, range); this->getElevationCoordinates().findClosestWithinRange(reference, range);

View File

@@ -593,7 +593,7 @@ namespace BlackSimPlugin
// Near ground we use faster updates // Near ground we use faster updates
const CCallsign cs(simObject.getCallsign()); const CCallsign cs(simObject.getCallsign());
const CAircraftSituation lastSituation = m_lastSentSituation[cs]; const CAircraftSituation lastSituation = m_lastSentSituations[cs];
const bool moving = lastSituation.isMoving(); const bool moving = lastSituation.isMoving();
if (moving && remoteAircraftData.aboveGroundFt() <= 100.0) if (moving && remoteAircraftData.aboveGroundFt() <= 100.0)
{ {