refs #395, moved thread safe aircraft parts / situations (from interpolator) to airspace

* access via provider, access now possible also beyond the scope of interpolator
* will be used in (to be written airpace analyzer)
* renamed some member functions as required
* fixed some asserts / Doxygen comments
* adjusted unit tests
* added vtolAircraft flag for interpolator, not fully used everywhere

remarks: update signals for parts / situation still only needed in XP driver
This commit is contained in:
Klaus Basan
2015-04-21 04:01:09 +02:00
committed by Mathew Sutcliffe
parent 32e65669a3
commit 48188dd28d
17 changed files with 356 additions and 506 deletions

View File

@@ -18,67 +18,91 @@ namespace BlackMisc
const CSimulatedAircraftList &CRemoteAircraftAwareReadOnly::remoteAircraft() const
{
Q_ASSERT_X(this->m_remoteAircraftProvider, "renderedAircraft", "No object available");
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->remoteAircraft();
}
const Aviation::CAircraftSituationList &CRemoteAircraftAwareReadOnly::remoteAircraftSituations() const
Aviation::CAircraftSituationList CRemoteAircraftAwareReadOnly::remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const
{
Q_ASSERT_X(this->m_remoteAircraftProvider, "renderedAircraftSituations", "No object available");
return this->m_remoteAircraftProvider->remoteAircraftSituations();
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->remoteAircraftSituations(callsign);
}
const Aviation::CAircraftPartsList &CRemoteAircraftAwareReadOnly::remoteAircraftParts() const
int CRemoteAircraftAwareReadOnly::remoteAircraftSituationsCount(const CCallsign &callsign) const
{
Q_ASSERT_X(this->m_remoteAircraftProvider, "renderedAircraftParts", "No object available");
return this->m_remoteAircraftProvider->remoteAircraftParts();
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->remoteAircraftSituationsCount(callsign);
}
CAircraftPartsList CRemoteAircraftAwareReadOnly::remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore) const
{
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->remoteAircraftParts(callsign, cutoffTimeBefore);
}
CCallsignSet CRemoteAircraftAwareReadOnly::remoteAircraftSupportingParts() const
{
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->remoteAircraftSupportingParts();
}
bool CRemoteAircraftAwareReadOnly::isRemoteAircraftSupportingParts(const CCallsign &callsign) const
{
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->isRemoteAircraftSupportingParts(callsign);
}
const CSimulatedAircraftList &CRemoteAircraftAware::remoteAircraft() const
{
Q_ASSERT_X(this->m_remoteAircraftProvider, "renderedAircraft", "No object available");
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->remoteAircraft();
}
CSimulatedAircraftList &CRemoteAircraftAware::remoteAircraft()
{
Q_ASSERT_X(this->m_remoteAircraftProvider, "renderedAircraft", "No object available");
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->remoteAircraft();
}
const CAircraftSituationList &CRemoteAircraftAware::remoteAircraftSituations() const
CAircraftSituationList CRemoteAircraftAware::remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const
{
Q_ASSERT_X(this->m_remoteAircraftProvider, "renderedAircraftSituations", "No object available");
return this->m_remoteAircraftProvider->remoteAircraftSituations();
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->remoteAircraftSituations(callsign);
}
CAircraftSituationList &CRemoteAircraftAware::remoteAircraftSituations()
CAircraftPartsList CRemoteAircraftAware::remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign) const
{
Q_ASSERT_X(this->m_remoteAircraftProvider, "renderedAircraftSituations", "No object available");
return this->m_remoteAircraftProvider->remoteAircraftSituations();
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->remoteAircraftParts(callsign);
}
const CAircraftPartsList &CRemoteAircraftAware::remoteAircraftParts() const
CCallsignSet CRemoteAircraftAware::remoteAircraftSupportingParts() const
{
Q_ASSERT_X(this->m_remoteAircraftProvider, "renderedAircraftParts", "No object available");
return this->m_remoteAircraftProvider->remoteAircraftParts();
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->remoteAircraftSupportingParts();
}
CAircraftPartsList &CRemoteAircraftAware::remoteAircraftParts()
int CRemoteAircraftAware::remoteAircraftSituationsCount(const CCallsign &callsign) const
{
Q_ASSERT_X(this->m_remoteAircraftProvider, "renderedAircraftParts", "No object available");
return this->m_remoteAircraftProvider->remoteAircraftParts();
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->remoteAircraftSituationsCount(callsign);
}
bool CRemoteAircraftAware::providerUpdateAircraftModel(const Aviation::CCallsign &callsign, const CAircraftModel &model, const QString &originator)
{
Q_ASSERT_X(this->m_remoteAircraftProvider, "providerUpdateAircraftModel", "No object available");
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->updateAircraftModel(callsign, model, originator);
}
bool CRemoteAircraftAware::isRemoteAircraftSupportingParts(const CCallsign &callsign) const
{
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->isRemoteAircraftSupportingParts(callsign);
}
bool CRemoteAircraftAware::providerUpdateAircraftEnabled(const Aviation::CCallsign &callsign, bool enabledForRedering, const QString &originator)
{
Q_ASSERT_X(this->m_remoteAircraftProvider, "providerUpdateAircraftEnabled", "No object available");
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->updateAircraftEnabled(callsign, enabledForRedering, originator);
}

View File

@@ -28,14 +28,34 @@ namespace BlackMisc
class BLACKMISC_EXPORT IRemoteAircraftProviderReadOnly
{
public:
//! Situations per callsign
typedef QHash<BlackMisc::Aviation::CCallsign, BlackMisc::Aviation::CAircraftSituationList> CSituationsPerCallsign;
//! Parts per callsign
typedef QHash<BlackMisc::Aviation::CCallsign, BlackMisc::Aviation::CAircraftPartsList> CPartsPerCallsign;
//! All rendered aircraft
virtual const CSimulatedAircraftList &remoteAircraft() const = 0;
//! All situation (per callsign, time history)
virtual const BlackMisc::Aviation::CAircraftSituationList &remoteAircraftSituations() const = 0;
//! Rendered aircraft situations (per callsign, time history)
//! \threadsafe
virtual BlackMisc::Aviation::CAircraftSituationList remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const = 0;
//! Number of remote aircraft situations for callsign
//! \threadsafe
virtual int remoteAircraftSituationsCount(const BlackMisc::Aviation::CCallsign &callsign) const = 0;
//! All parts (per callsign, time history)
virtual const BlackMisc::Aviation::CAircraftPartsList &remoteAircraftParts() const = 0;
//! \threadsafe
virtual BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const = 0;
//! Is remote aircraft supporting parts?
//! \threadsafe
virtual bool isRemoteAircraftSupportingParts(const BlackMisc::Aviation::CCallsign &callsign) const = 0;
//! Remote aircraft supporting parts.
//! \threadsafe
virtual BlackMisc::Aviation::CCallsignSet remoteAircraftSupportingParts() const = 0;
//! Destructor
virtual ~IRemoteAircraftProviderReadOnly() {}
@@ -47,11 +67,11 @@ namespace BlackMisc
std::function<void(const BlackMisc::Aviation::CCallsign &)> removedAircraftSlot
) = 0;
static const int MaxSituationsPerCallsign = 6; //!< How many situations per callsign
static const int MaxPartsPerCallsign = 3; //!< How many parts per callsign
// those signals have to be implemented by classes using the interface.
signals:
//! A new situation got added
void addedRemoteAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation);
//! New parts got added
void addedRemoteAircraftParts(const BlackMisc::Aviation::CAircraftParts &parts);
@@ -65,21 +85,13 @@ namespace BlackMisc
{
public:
//! The read only /sa IRemoteAircraftProviderReadOnly::remoteAircraft
using IRemoteAircraftProviderReadOnly::remoteAircraft;
using IRemoteAircraftProviderReadOnly::remoteAircraftParts;
using IRemoteAircraftProviderReadOnly::remoteAircraftSituations;
//! All rendered aircraft
//! \note in memory reference, not thread safe
virtual CSimulatedAircraftList &remoteAircraft() = 0;
//! Rendered aircraft situations (history)
virtual BlackMisc::Aviation::CAircraftSituationList &remoteAircraftSituations() = 0;
//! All parts (per callsign, time history)
//! \note in memory reference, not thread safe
virtual BlackMisc::Aviation::CAircraftPartsList &remoteAircraftParts() = 0;
//! Enable/disable rendering
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRendering, const QString &originator) = 0;
@@ -97,11 +109,20 @@ namespace BlackMisc
//! \copydoc IRemoteAircraftProviderReadOnly::renderedAircraft
virtual const CSimulatedAircraftList &remoteAircraft() const;
//!\copydoc IRemoteAircraftProviderReadOnly::renderedAircraftSituations
virtual const BlackMisc::Aviation::CAircraftSituationList &remoteAircraftSituations() const;
//! \copydoc IRemoteAircraftProviderReadOnly::remoteAircraftSituations
virtual BlackMisc::Aviation::CAircraftSituationList remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const;
//!\copydoc IRemoteAircraftProviderReadOnly::renderedAircraftParts
virtual const BlackMisc::Aviation::CAircraftPartsList &remoteAircraftParts() const;
//! \copydoc IRemoteAircraftProviderReadOnly::remoteAircraftSituationsCount
virtual int remoteAircraftSituationsCount(const BlackMisc::Aviation::CCallsign &callsign) const;
//! \copydoc IRemoteAircraftProviderReadOnly::remoteAircraftParts
virtual BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const;
//! \copydoc IRemoteAircraftProviderReadOnly::remoteAircraftSupportingParts
virtual BlackMisc::Aviation::CCallsignSet remoteAircraftSupportingParts() const;
//! \copydoc IRemoteAircraftProviderReadOnly::isRemoteAircraftSupportingParts
virtual bool isRemoteAircraftSupportingParts(const BlackMisc::Aviation::CCallsign &callsign) const;
//! Destructor
virtual ~CRemoteAircraftAwareReadOnly() {}
@@ -116,23 +137,23 @@ namespace BlackMisc
class BLACKMISC_EXPORT CRemoteAircraftAware
{
public:
//! \copydoc IRemoteAircraftProviderReadOnly::renderedAircraft
//! \copydoc IRemoteAircraftProviderReadOnly::remoteAircraft
virtual const CSimulatedAircraftList &remoteAircraft() const;
//! \copydoc IRemoteAircraftProvider::renderedAircraft
//! \copydoc IRemoteAircraftProvider::remoteAircraft
virtual CSimulatedAircraftList &remoteAircraft();
//!\copydoc IRemoteAircraftProviderReadOnly::renderedAircraftSituations
virtual const BlackMisc::Aviation::CAircraftSituationList &remoteAircraftSituations() const;
//! \copydoc IRemoteAircraftProviderReadOnly::remoteAircraftSituations
virtual BlackMisc::Aviation::CAircraftSituationList remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const;
//!\copydoc IRemoteAircraftProvider::remoteAircraftSituations
virtual BlackMisc::Aviation::CAircraftSituationList &remoteAircraftSituations();
//! \copydoc IRemoteAircraftProviderReadOnly::remoteAircraftParts
virtual BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign) const;
//!\copydoc IRemoteAircraftProviderReadOnly::renderedAircraftParts
virtual const BlackMisc::Aviation::CAircraftPartsList &remoteAircraftParts() const;
//! \copydoc IRemoteAircraftProviderReadOnly::remoteAircraftSupportingParts
virtual BlackMisc::Aviation::CCallsignSet remoteAircraftSupportingParts() const;
//!\copydoc IRemoteAircraftProvider::remoteAircraftParts
virtual BlackMisc::Aviation::CAircraftPartsList &remoteAircraftParts();
//! \copydoc IRemoteAircraftProviderReadOnly::remoteAircraftSituationsCount
virtual int remoteAircraftSituationsCount(const BlackMisc::Aviation::CCallsign &callsign) const;
//! \copydoc IRemoteAircraftProvider::updateAircraftEnabled
virtual bool providerUpdateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering, const QString &originator);
@@ -140,6 +161,9 @@ namespace BlackMisc
//! \copydoc IRemoteAircraftProvider::updateAircraftModel
virtual bool providerUpdateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const QString &originator);
//! \copydoc IRemoteAircraftProviderReadOnly::isRemoteAircraftSupportingParts
virtual bool isRemoteAircraftSupportingParts(const BlackMisc::Aviation::CCallsign &callsign) const;
//! Destructor
virtual ~CRemoteAircraftAware() {}

View File

@@ -29,24 +29,30 @@ namespace BlackMisc
return m_aircraft;
}
const CAircraftPartsList &CRemoteAircraftProviderDummy::remoteAircraftParts() const
CAircraftPartsList CRemoteAircraftProviderDummy::remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore) const
{
return m_parts;
if (cutoffTimeBefore < 0) { return m_parts.findByCallsign(callsign); }
return m_parts.findByCallsign(callsign).findBefore(cutoffTimeBefore);
}
CAircraftPartsList &CRemoteAircraftProviderDummy::remoteAircraftParts()
CAircraftSituationList CRemoteAircraftProviderDummy::remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const
{
return m_parts;
return m_situations.findByCallsign(callsign);
}
const CAircraftSituationList &CRemoteAircraftProviderDummy::remoteAircraftSituations() const
int CRemoteAircraftProviderDummy::remoteAircraftSituationsCount(const CCallsign &callsign) const
{
return m_situations;
return remoteAircraftSituations(callsign).size();
}
CAircraftSituationList &CRemoteAircraftProviderDummy::remoteAircraftSituations()
CCallsignSet CRemoteAircraftProviderDummy::remoteAircraftSupportingParts() const
{
return m_situations;
return m_parts.getCallsigns();
}
bool CRemoteAircraftProviderDummy::isRemoteAircraftSupportingParts(const CCallsign &callsign) const
{
return remoteAircraftParts(callsign).size() > 0;
}
bool CRemoteAircraftProviderDummy::connectRemoteAircraftProviderSignals(std::function<void (const CAircraftSituation &)> situationSlot, std::function<void (const CAircraftParts &)> partsSlot, std::function<void (const CCallsign &)> removedAircraftSlot)
@@ -83,14 +89,14 @@ namespace BlackMisc
void CRemoteAircraftProviderDummy::insertNewSituation(const CAircraftSituation &situation)
{
this->m_situations.push_frontMaxElements(situation, 20);
this->m_situations.push_front(situation);
this->m_situations.sortLatestFirst(); // like in real world, latest should be first
emit addedRemoteAircraftSituation(situation);
}
void CRemoteAircraftProviderDummy::insertNewAircraftParts(const CAircraftParts &parts)
{
this->m_parts.push_frontMaxElements(parts, 20);
this->m_parts.push_front(parts);
this->m_parts.sortLatestFirst(); // like in real world, latest should be first
emit addedRemoteAircraftParts(parts);
}

View File

@@ -39,16 +39,19 @@ namespace BlackMisc
virtual CSimulatedAircraftList &remoteAircraft() override;
//! \copydoc IRemoteAircraftProviderReadOnly::remoteAircraftParts
virtual const BlackMisc::Aviation::CAircraftPartsList &remoteAircraftParts() const override;
//! \copydoc IRemoteAircraftProvider::remoteAircraftParts
virtual BlackMisc::Aviation::CAircraftPartsList &remoteAircraftParts() override;
virtual BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const override;
//! \copydoc IRemoteAircraftProviderReadOnly::remoteAircraftSituations
virtual const BlackMisc::Aviation::CAircraftSituationList &remoteAircraftSituations() const override;
virtual BlackMisc::Aviation::CAircraftSituationList remoteAircraftSituations(const Aviation::CCallsign &callsign) const override;
//! \copydoc IRemoteAircraftProvider::remoteAircraftSituations
virtual BlackMisc::Aviation::CAircraftSituationList &remoteAircraftSituations() override;
//! \copydoc IRemoteAircraftProviderReadOnly::remoteAircraftSituationsCount
virtual int remoteAircraftSituationsCount(const Aviation::CCallsign &callsign) const override;
//! \copydoc IRemoteAircraftProviderReadOnly::remoteAircraftSupportingParts
virtual BlackMisc::Aviation::CCallsignSet remoteAircraftSupportingParts() const override;
//! \copydoc IRemoteAircraftProviderReadOnly::isRemoteAircraftSupportingParts
virtual bool isRemoteAircraftSupportingParts(const Aviation::CCallsign &callsign) const override;
//! \copydoc IRemoteAircraftProviderReadOnly::connectRemoteAircraftProviderSignals
virtual bool connectRemoteAircraftProviderSignals(