From cec59c5d728df54a60af104a09a55fcff825f01d Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 2 Feb 2015 17:43:09 +0100 Subject: [PATCH] refs #369, revised atc station and client list * function to get only stations with valid callsign * use ICallsignObjectList in client list * removeByCallsign --- src/blackmisc/avatcstationlist.cpp | 26 +++++--------------------- src/blackmisc/avatcstationlist.h | 4 ++++ src/blackmisc/avcallsignobjectlist.cpp | 8 ++++++++ src/blackmisc/avcallsignobjectlist.h | 3 +++ src/blackmisc/nwclientlist.cpp | 16 ---------------- src/blackmisc/nwclientlist.h | 15 ++++++++++----- 6 files changed, 30 insertions(+), 42 deletions(-) diff --git a/src/blackmisc/avatcstationlist.cpp b/src/blackmisc/avatcstationlist.cpp index dd3e295d0..19cd55fc1 100644 --- a/src/blackmisc/avatcstationlist.cpp +++ b/src/blackmisc/avatcstationlist.cpp @@ -17,21 +17,12 @@ namespace BlackMisc { namespace Aviation { - /* - * Empty constructor - */ CAtcStationList::CAtcStationList() { } - /* - * Construct from base class object - */ CAtcStationList::CAtcStationList(const CSequence &other) : CSequence(other) { } - /* - * Register metadata - */ void CAtcStationList::registerMetadata() { qRegisterMetaType>(); @@ -43,9 +34,6 @@ namespace BlackMisc registerMetaValueType(); } - /* - * Find if on frequency of COM unit - */ CAtcStationList CAtcStationList::findIfComUnitTunedIn25KHz(const CComSystem &comUnit) const { return this->findBy([&](const CAtcStation & atcStation) @@ -54,17 +42,16 @@ namespace BlackMisc }); } - /* - * All controllers - */ + CAtcStationList CAtcStationList::stationsWithValidVoiceRoom() const + { + return this->findBy(&CAtcStation::hasValidVoiceRoom, true); + } + CUserList CAtcStationList::getControllers() const { return this->findBy(Predicates::MemberValid(&CAtcStation::getController)).transform(Predicates::MemberTransform(&CAtcStation::getController)); } - /* - * Merge with booking, both (online/booking will be updated) - */ int CAtcStationList::mergeWithBooking(CAtcStation &bookedAtcStation) { int c = 0; @@ -150,9 +137,6 @@ namespace BlackMisc return c; } - /* - * Merge with VATSIM data file - */ bool CAtcStationList::updateFromVatsimDataFileStation(CAtcStation &stationToBeUpdated) const { if (this->isEmpty()) return false; diff --git a/src/blackmisc/avatcstationlist.h b/src/blackmisc/avatcstationlist.h index 974fde621..c987b64d6 100644 --- a/src/blackmisc/avatcstationlist.h +++ b/src/blackmisc/avatcstationlist.h @@ -42,6 +42,10 @@ namespace BlackMisc //! Find 0..n stations tune in frequency of COM unit (with 25kHt channel spacing CAtcStationList findIfComUnitTunedIn25KHz(const BlackMisc::Aviation::CComSystem &comUnit) const; + //! Find 0..n stations with valid voice room + //! \sa CAtcStation::hasValid + CAtcStationList stationsWithValidVoiceRoom() const; + //! All controllers (with valid data) BlackMisc::Network::CUserList getControllers() const; diff --git a/src/blackmisc/avcallsignobjectlist.cpp b/src/blackmisc/avcallsignobjectlist.cpp index ed4a6aef0..8515ed141 100644 --- a/src/blackmisc/avcallsignobjectlist.cpp +++ b/src/blackmisc/avcallsignobjectlist.cpp @@ -12,6 +12,7 @@ #include "blackmisc/avatcstationlist.h" #include "blackmisc/avaircraftlist.h" #include "blackmisc/avaircraftsituationlist.h" +#include "blackmisc/nwclientlist.h" #include "blackmisc/simulation/simulatedaircraftlist.h" namespace BlackMisc @@ -71,6 +72,12 @@ namespace BlackMisc return r; } + template + int ICallsignObjectList::removeByCallsign(const CCallsign &callsign) + { + return this->getContainer().removeIf(&OBJ::getCallsign, callsign); + } + template QMap ICallsignObjectList::getSuffixes() const { @@ -124,6 +131,7 @@ namespace BlackMisc template class ICallsignObjectList; template class ICallsignObjectList; template class ICallsignObjectList; + template class ICallsignObjectList; } // namespace } // namespace diff --git a/src/blackmisc/avcallsignobjectlist.h b/src/blackmisc/avcallsignobjectlist.h index 193159b10..ba68fdefa 100644 --- a/src/blackmisc/avcallsignobjectlist.h +++ b/src/blackmisc/avcallsignobjectlist.h @@ -51,6 +51,9 @@ namespace BlackMisc //! All with given suffix, empty suffixes ignored CONTAINER findBySuffix(const QString &suffix) const; + //! Remove all objects with callsign + int removeByCallsign(const CCallsign &callsign); + //! All suffixes with their respective count QMap getSuffixes() const; diff --git a/src/blackmisc/nwclientlist.cpp b/src/blackmisc/nwclientlist.cpp index 251822c63..e619d7154 100644 --- a/src/blackmisc/nwclientlist.cpp +++ b/src/blackmisc/nwclientlist.cpp @@ -41,21 +41,5 @@ namespace BlackMisc registerMetaValueType(); } - /* - * Find by callsign - */ - CClientList CClientList::findByCallsign(const CCallsign &callsign) const - { - return findBy(&CClient::getCallsign, callsign); - } - - /* - * Find by callsign - */ - CClient CClientList::findFirstByCallsign(const CCallsign &callsign, const CClient &ifNotFound) const - { - return this->findByCallsign(callsign).frontOrDefault(ifNotFound); - } - } // namespace } // namespace diff --git a/src/blackmisc/nwclientlist.h b/src/blackmisc/nwclientlist.h index 597cb918e..f68bdba47 100644 --- a/src/blackmisc/nwclientlist.h +++ b/src/blackmisc/nwclientlist.h @@ -15,7 +15,9 @@ #include "nwclient.h" #include "sequence.h" #include "collection.h" +#include "blackmisc/avcallsignobjectlist.h" #include "blackmisc/avcallsign.h" + #include #include #include @@ -25,7 +27,9 @@ namespace BlackMisc namespace Network { //! Value object encapsulating a list of voice rooms. - class CClientList : public CSequence + class CClientList : + public CSequence, + public BlackMisc::Aviation::ICallsignObjectList { public: //! Default constructor. @@ -40,11 +44,12 @@ namespace BlackMisc //! Register metadata static void registerMetadata(); - //! Find by callsign - CClientList findByCallsign(const BlackMisc::Aviation::CCallsign &callsign) const; + protected: + //! Myself + virtual const CClientList &getContainer() const { return *this; } - //! First by callsign - CClient findFirstByCallsign(const BlackMisc::Aviation::CCallsign &callsign, const CClient &ifNotFound = CClient()) const; + //! Myself + virtual CClientList &getContainer() { return *this; } }; } //namespace