From dacf2c58631632d03c46542afd5db889258cd1c4 Mon Sep 17 00:00:00 2001 From: Lars Toenning Date: Thu, 26 Dec 2024 11:05:38 +0100 Subject: [PATCH] refactor: Use composition over inheritance --- src/core/airspacemonitor.cpp | 9 +++---- src/core/airspacemonitor.h | 4 +-- .../simulation/aircraftmodelsetprovider.cpp | 21 +++------------- .../simulation/aircraftmodelsetprovider.h | 25 ++----------------- 4 files changed, 11 insertions(+), 48 deletions(-) diff --git a/src/core/airspacemonitor.cpp b/src/core/airspacemonitor.cpp index 03ba64964..bf7490d0f 100644 --- a/src/core/airspacemonitor.cpp +++ b/src/core/airspacemonitor.cpp @@ -57,9 +57,8 @@ namespace swift::core CAirspaceMonitor::CAirspaceMonitor(IOwnAircraftProvider *ownAircraftProvider, IAircraftModelSetProvider *modelSetProvider, CFSDClient *fsdClient, QObject *parent) - : CRemoteAircraftProvider(parent), COwnAircraftAware(ownAircraftProvider), - CAircraftModelSetAware(modelSetProvider), m_fsdClient(fsdClient), - m_analyzer(new CAirspaceAnalyzer(ownAircraftProvider, m_fsdClient, this)) + : CRemoteAircraftProvider(parent), COwnAircraftAware(ownAircraftProvider), m_modelSetProvider(modelSetProvider), + m_fsdClient(fsdClient), m_analyzer(new CAirspaceAnalyzer(ownAircraftProvider, m_fsdClient, this)) { this->setObjectName("CAirspaceMonitor"); this->enableReverseLookupMessages(sApp->isDeveloperFlagSet() || CBuildConfig::isLocalDeveloperDebugBuild() ? @@ -891,7 +890,7 @@ namespace swift::core const QString &liveryString, const QString &modelString, CAircraftModel::ModelType type, CStatusMessageList *log, bool runMatchinScript) { - const int modelSetCount = this->getModelSetCount(); + const int modelSetCount = m_modelSetProvider->getModelSetCount(); CCallsign::addLogDetailsToList( log, callsign, QStringLiteral("Reverse lookup (with FP data), model set count: %1").arg(modelSetCount), CAirspaceMonitor::getLogCategories()); @@ -901,7 +900,7 @@ namespace swift::core if (hasAnyId) { this->markAsSwiftClient(callsign); } CAircraftModel lookupModel; // result - const CAircraftModelList modelSet = this->getModelSet(); + const CAircraftModelList modelSet = m_modelSetProvider->getModelSet(); const CAircraftMatcherSetup setup = m_matchingSettings.get(); do { // directly check model string diff --git a/src/core/airspacemonitor.h b/src/core/airspacemonitor.h index 39e851770..4b5ca72b8 100644 --- a/src/core/airspacemonitor.h +++ b/src/core/airspacemonitor.h @@ -58,8 +58,7 @@ namespace swift::core // CAirspaceMonitor public swift::misc::network::CClientProvider, // those data will be provided from the class CAirspaceMonitor public swift::misc::simulation::COwnAircraftAware, // used to obtain in memory information about own aircraft - public swift::misc::simulation::CSimulationEnvironmentAware, // elevation info etc. from simulator - public swift::misc::simulation::CAircraftModelSetAware // model set for reverse lookup + public swift::misc::simulation::CSimulationEnvironmentAware // elevation info etc. from simulator { // CRemoteAircraftProvider is QObject Q_OBJECT @@ -279,6 +278,7 @@ namespace swift::core }; //!< settings QQueue m_queryAtis; //!< query the ATIS QQueue m_queryPilot; //!< query the pilot data + misc::simulation::IAircraftModelSetProvider *m_modelSetProvider = nullptr; //!< model set for reverse lookup fsd::CFSDClient *m_fsdClient = nullptr; //!< corresponding network interface CAirspaceAnalyzer *m_analyzer = nullptr; //!< owned analyzer int m_maxDistanceNM = 125; //!< position range / FSD range diff --git a/src/misc/simulation/aircraftmodelsetprovider.cpp b/src/misc/simulation/aircraftmodelsetprovider.cpp index f8909d446..65b04fac4 100644 --- a/src/misc/simulation/aircraftmodelsetprovider.cpp +++ b/src/misc/simulation/aircraftmodelsetprovider.cpp @@ -1,23 +1,8 @@ // SPDX-FileCopyrightText: Copyright (C) 2019 swift Project Community / Contributors // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1 - #include "misc/simulation/aircraftmodelsetprovider.h" - namespace swift::misc::simulation { - // pin vtables to this file - void CAircraftModelSetAware::anchor() {} - - CAircraftModelList CAircraftModelSetAware::getModelSet() const - { - if (!this->hasProvider()) { return CAircraftModelList(); } - return this->provider()->getModelSet(); - } - - int CAircraftModelSetAware::getModelSetCount() const - { - if (!this->hasProvider()) { return -1; } - return this->provider()->getModelSetCount(); - } - -} // namespace swift::misc::simulation + // pin vtable to this file + void IAircraftModelSetProvider::anchor() {} +} // namespace swift::misc::simulation \ No newline at end of file diff --git a/src/misc/simulation/aircraftmodelsetprovider.h b/src/misc/simulation/aircraftmodelsetprovider.h index c1aa5da8b..f7a206931 100644 --- a/src/misc/simulation/aircraftmodelsetprovider.h +++ b/src/misc/simulation/aircraftmodelsetprovider.h @@ -15,6 +15,8 @@ namespace swift::misc::simulation //! Value object encapsulating a list of aircraft models class SWIFT_MISC_EXPORT IAircraftModelSetProvider : public IProvider { + virtual void anchor(); + public: //! Get the model set models virtual CAircraftModelList getModelSet() const = 0; @@ -26,29 +28,6 @@ namespace swift::misc::simulation IAircraftModelSetProvider() = default; }; - //! Delegating class which can be directly used to access an \sa IAircraftModelSetProvider instance - class SWIFT_MISC_EXPORT CAircraftModelSetAware : public IProviderAware - { - virtual void anchor(); - - public: - //! Set the provider - void setAircraftModelSetProvider(IAircraftModelSetProvider *provider) { this->setProvider(provider); } - - //! \copydoc IAircraftModelSetProvider::getModelSet - CAircraftModelList getModelSet() const; - - //! \copydoc IAircraftModelSetProvider::getModelSetCount - int getModelSetCount() const; - - protected: - //! Constructor - CAircraftModelSetAware(IAircraftModelSetProvider *modelSetProvider) : IProviderAware(modelSetProvider) - { - Q_ASSERT(modelSetProvider); - } - }; - } // namespace swift::misc::simulation Q_DECLARE_INTERFACE(swift::misc::simulation::IAircraftModelSetProvider,