From ce192fc10604159b158bbe5e01165503763b6385 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 30 Sep 2018 23:14:09 +0200 Subject: [PATCH] Ref T372, updateAircraftInRangeDistanceBearing with null check --- .../simulation/remoteaircraftprovider.cpp | 16 +++++++++++++++- .../simulation/remoteaircraftprovider.h | 5 +++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/blackmisc/simulation/remoteaircraftprovider.cpp b/src/blackmisc/simulation/remoteaircraftprovider.cpp index cfa4e7166..821e2c104 100644 --- a/src/blackmisc/simulation/remoteaircraftprovider.cpp +++ b/src/blackmisc/simulation/remoteaircraftprovider.cpp @@ -80,7 +80,7 @@ namespace BlackMisc CAircraftSituation CRemoteAircraftProvider::remoteAircraftSituation(const CCallsign &callsign, int index) const { - CAircraftSituationList situations = this->remoteAircraftSituations(callsign); + const CAircraftSituationList situations = this->remoteAircraftSituations(callsign); if (index < 0 || index >= situations.size()) { return CAircraftSituation::null(); } return situations[index]; } @@ -237,6 +237,20 @@ namespace BlackMisc return c; } + bool CRemoteAircraftProvider::updateAircraftInRangeDistanceBearing(const CCallsign &callsign, const CAircraftSituation &situation, const CLength &distance, const CAngle &bearing) + { + Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "Missing callsign"); + { + QWriteLocker l(&m_lockAircraft); + if (!m_aircraftInRange.contains(callsign)) { return false; } + CSimulatedAircraft &aircraft = m_aircraftInRange[callsign]; + aircraft.setSituation(situation); + if (!bearing.isNull()) { aircraft.setRelativeBearing(bearing); } + if (!distance.isNull()) { aircraft.setRelativeDistance(distance); } + } + return true; + } + CAircraftSituation CRemoteAircraftProvider::storeAircraftSituation(const CAircraftSituation &situation, bool allowTestOffset) { const CCallsign cs = situation.getCallsign(); diff --git a/src/blackmisc/simulation/remoteaircraftprovider.h b/src/blackmisc/simulation/remoteaircraftprovider.h index 3365623b6..80ceed4dd 100644 --- a/src/blackmisc/simulation/remoteaircraftprovider.h +++ b/src/blackmisc/simulation/remoteaircraftprovider.h @@ -414,6 +414,11 @@ namespace BlackMisc //! \threadsafe int updateAircraftInRange(const Aviation::CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues = true); + //! Update aircraft bearing, distance and situation + //! \threadsafe + //! \remark does NOT emit signals + bool updateAircraftInRangeDistanceBearing(const Aviation::CCallsign &callsign, const Aviation::CAircraftSituation &situation, const PhysicalQuantities::CLength &distance, const PhysicalQuantities::CAngle &bearing); + //! Store an aircraft situation //! \remark latest situations are kept first //! \threadsafe