From c5fb428fa9812dc89da0ba2e86851dfbd9c1d4ee Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 12 Jun 2018 00:47:49 +0200 Subject: [PATCH] Ref T280, using the QHash definitions to unify use cases --- src/blackcore/airspacemonitor.h | 7 +++--- src/blackcore/simulatorcommon.cpp | 10 ++++---- src/blackcore/simulatorcommon.h | 6 ++--- src/blackmisc/network/clientprovider.cpp | 4 ++-- src/blackmisc/network/clientprovider.h | 2 +- .../simulation/remoteaircraftprovider.h | 24 +++++++------------ .../simulationenvironmentprovider.cpp | 2 +- .../fsxcommon/simulatorfsxcommon.cpp | 2 +- 8 files changed, 25 insertions(+), 32 deletions(-) diff --git a/src/blackcore/airspacemonitor.h b/src/blackcore/airspacemonitor.h index 115d82355..1864314e0 100644 --- a/src/blackcore/airspacemonitor.h +++ b/src/blackcore/airspacemonitor.h @@ -37,7 +37,7 @@ #include #include -#include +#include #include #include #include @@ -167,9 +167,8 @@ namespace BlackCore BlackMisc::Aviation::CAtcStationList m_atcStationsOnline; //!< online ATC stations BlackMisc::Aviation::CAtcStationList m_atcStationsBooked; //!< booked ATC stations - QMap m_tempFsInnPackets; - - QMap m_flightPlanCache; //!< flight plan information retrieved from network and cached + QHash m_tempFsInnPackets; + QHash m_flightPlanCache; //!< flight plan information retrieved from network and cached INetwork *m_network = nullptr; //!< corresponding network interface CAirspaceAnalyzer *m_analyzer = nullptr; //!< owned analyzer diff --git a/src/blackcore/simulatorcommon.cpp b/src/blackcore/simulatorcommon.cpp index 378187635..423cbe16c 100644 --- a/src/blackcore/simulatorcommon.cpp +++ b/src/blackcore/simulatorcommon.cpp @@ -739,9 +739,9 @@ namespace BlackCore bool CSimulatorCommon::isEqualLastSent(const CAircraftSituation &compare) const { 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; } - 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 @@ -754,7 +754,7 @@ namespace BlackCore void CSimulatorCommon::rememberLastSent(const CAircraftSituation &sent) { 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) @@ -846,7 +846,7 @@ namespace BlackCore m_callsignsToBeRendered.clear(); m_clampedLogMsg.clear(); m_lastSentParts.clear(); - m_lastSentSituation.clear(); + m_lastSentSituations.clear(); m_updateRemoteAircraftInProgress = false; this->resetHighlighting(); @@ -891,7 +891,7 @@ namespace BlackCore m_statsPhysicallyRemovedAircraft++; m_clampedLogMsg.clear(); m_lastSentParts.remove(remoteCallsign); - m_lastSentSituation.remove(remoteCallsign); + m_lastSentSituations.remove(remoteCallsign); m_clampedLogMsg.remove(remoteCallsign); this->physicallyRemoveRemoteAircraft(remoteCallsign); } diff --git a/src/blackcore/simulatorcommon.h b/src/blackcore/simulatorcommon.h index 952c4996e..f03d453eb 100644 --- a/src/blackcore/simulatorcommon.h +++ b/src/blackcore/simulatorcommon.h @@ -283,9 +283,9 @@ namespace BlackCore BlackMisc::Simulation::CSimulatorInternals m_simulatorInternals; //!< setup object BlackMisc::Simulation::CInterpolationLogger m_interpolationLogger; //!< log.interpolation - QMap m_clampedLogMsg; //!< when logged last for this callsign, can be used so there is no log message overflow - QMap m_lastSentSituation; //!< last situation sent to simulator - QMap m_lastSentParts; //!< last parts sent to simulator + BlackMisc::Aviation::CTimestampPerCallsign m_clampedLogMsg; //!< when logged last for this callsign, can be used so there is no log message overflow + BlackMisc::Aviation::CAircraftSituationPerCallsign m_lastSentSituations; //!< last situation 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 BlackMisc::Simulation::CSimulatedAircraftList m_addAgainAircraftWhenRemoved; //!< add this model again when removed, normally used to change model diff --git a/src/blackmisc/network/clientprovider.cpp b/src/blackmisc/network/clientprovider.cpp index e04cd9d95..6dd7e1096 100644 --- a/src/blackmisc/network/clientprovider.cpp +++ b/src/blackmisc/network/clientprovider.cpp @@ -28,9 +28,9 @@ namespace BlackMisc void CClientProvider::setClients(const CClientList &clients) { - const QMap map = clients.asMap(); + const CClientPerCallsign perCallsign(clients.asCallsignHash()); QWriteLocker l(&m_lockClient); - m_clients = map; + m_clients = perCallsign; } void CClientProvider::clearClients() diff --git a/src/blackmisc/network/clientprovider.h b/src/blackmisc/network/clientprovider.h index 97978bf46..5d79c0cfd 100644 --- a/src/blackmisc/network/clientprovider.h +++ b/src/blackmisc/network/clientprovider.h @@ -102,7 +102,7 @@ namespace BlackMisc //! @} private: - QMap m_clients; + CClientPerCallsign m_clients; mutable QReadWriteLock m_lockClient; //!< lock clients: m_clients }; diff --git a/src/blackmisc/simulation/remoteaircraftprovider.h b/src/blackmisc/simulation/remoteaircraftprovider.h index 22a3cb4ba..8a47c0ec9 100644 --- a/src/blackmisc/simulation/remoteaircraftprovider.h +++ b/src/blackmisc/simulation/remoteaircraftprovider.h @@ -19,6 +19,7 @@ #include "blackmisc/aviation/aircraftpartslist.h" #include "blackmisc/aviation/aircraftsituationlist.h" #include "blackmisc/aviation/aircraftsituationchange.h" +#include "blackmisc/aviation/percallsign.h" #include "blackmisc/aviation/callsignset.h" #include "blackmisc/provider.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 DefaultOffsetTimeMs = 6000; //!< \fixme copied from CNetworkVatlib::c_positionTimeOffsetMsec - //! Situations per callsign - using CSituationsPerCallsign = QHash; - - //! Parts per callsign - using CPartsPerCallsign = QHash; - //! All remote aircraft //! \threadsafe virtual CSimulatedAircraftList getAircraftInRange() const = 0; @@ -378,19 +373,18 @@ namespace BlackMisc Aviation::CAircraftSituation testAddAltitudeOffsetToSituation(const Aviation::CAircraftSituation &situation) const; private: - // hashs, because not sorted by key but keeping order - CSituationsPerCallsign m_situationsByCallsign; //!< situations, 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::CAircraftSituationListPerCallsign 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 + 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 CSimulatedAircraftList m_aircraftInRange; //!< aircraft, thread safe access required - QMap m_reverseLookupMessages; - QMap m_aircraftPartsHistory; //!< JSON aircraft parts history - QMap m_situationsLastModified; - QMap m_partsLastModified; - QMap m_testOffset; + Aviation::CStatusMessageListPerCallsign m_reverseLookupMessages; //!< reverse lookup messages + Aviation::CStatusMessageListPerCallsign m_aircraftPartsHistory; //!< status messages for parts history + Aviation::CTimestampPerCallsign m_situationsLastModified; //!< when situations last modified + Aviation::CTimestampPerCallsign m_partsLastModified; //!< when parts last modified + QHash m_testOffset; bool m_enableReverseLookupMsgs = false; //!< shall we log. information about the matching process bool m_enableAircraftPartsHistory = true; //!< shall we keep a history of aircraft parts diff --git a/src/blackmisc/simulation/simulationenvironmentprovider.cpp b/src/blackmisc/simulation/simulationenvironmentprovider.cpp index a2d7c495a..bfacf9fd5 100644 --- a/src/blackmisc/simulation/simulationenvironmentprovider.cpp +++ b/src/blackmisc/simulation/simulationenvironmentprovider.cpp @@ -105,7 +105,7 @@ namespace BlackMisc CElevationPlane ISimulationEnvironmentProvider::findClosestElevationWithinRange(const ICoordinateGeodetic &reference, const CLength &range) const { // 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 ? this->getElevationCoordinates().findFirstWithinRangeOrDefault(reference, CElevationPlane::singlePointRadius()) : this->getElevationCoordinates().findClosestWithinRange(reference, range); diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index 8cd7f01e8..964b63acb 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -593,7 +593,7 @@ namespace BlackSimPlugin // Near ground we use faster updates const CCallsign cs(simObject.getCallsign()); - const CAircraftSituation lastSituation = m_lastSentSituation[cs]; + const CAircraftSituation lastSituation = m_lastSentSituations[cs]; const bool moving = lastSituation.isMoving(); if (moving && remoteAircraftData.aboveGroundFt() <= 100.0) {