Ref T259, Ref T243 remove aircraft parts and situations from interpolator

* no longer using the add parts/situations signals
* will use the remote aircraft provider parts directly

Result: all parts/situations are stored only once in memory and in one single place
This commit is contained in:
Klaus Basan
2018-03-24 17:27:16 +01:00
parent 4248c1b689
commit 9abc57bb3d
27 changed files with 140 additions and 351 deletions

View File

@@ -76,6 +76,12 @@ namespace BlackMisc
return this->provider()->remoteAircraftParts(callsign, cutoffTimeBefore);
}
int CRemoteAircraftAware::remoteAircraftPartsCount(const CCallsign &callsign, qint64 cutoffTimeBefore) const
{
Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available");
return this->provider()->remoteAircraftPartsCount(callsign, cutoffTimeBefore);
}
CCallsignSet CRemoteAircraftAware::remoteAircraftSupportingParts() const
{
Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available");

View File

@@ -101,7 +101,11 @@ namespace BlackMisc
//! All parts (per callsign, time history)
//! \threadsafe
virtual BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore) const = 0;
virtual BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const = 0;
//! All parts (per callsign, time history)
//! \threadsafe
virtual int remoteAircraftPartsCount(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const = 0;
//! Is remote aircraft supporting parts?
//! \threadsafe
@@ -220,15 +224,18 @@ namespace BlackMisc
//! \copydoc IRemoteAircraftProvider::remoteAircraftSituations
BlackMisc::Aviation::CAircraftSituationList remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const;
//! \copydoc IRemoteAircraftProvider::remoteAircraftSituationsCount
int remoteAircraftSituationsCount(const BlackMisc::Aviation::CCallsign &callsign) const;
//! \copydoc IRemoteAircraftProvider::remoteAircraftParts
BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore) const;
BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const;
//! \copydoc IRemoteAircraftProvider::remoteAircraftPartsCount
int remoteAircraftPartsCount(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const;
//! \copydoc IRemoteAircraftProvider::remoteAircraftSupportingParts
BlackMisc::Aviation::CCallsignSet remoteAircraftSupportingParts() const;
//! \copydoc IRemoteAircraftProvider::remoteAircraftSituationsCount
int remoteAircraftSituationsCount(const BlackMisc::Aviation::CCallsign &callsign) const;
//! \copydoc IRemoteAircraftProvider::isRemoteAircraftSupportingParts
bool isRemoteAircraftSupportingParts(const BlackMisc::Aviation::CCallsign &callsign) const;

View File

@@ -15,7 +15,7 @@
#include "blackmisc/dictionary.h"
#include "blackmisc/propertyindexvariantmap.h"
#include "blackmisc/variant.h"
#include <QTimer>
#include <QHash>
using namespace BlackMisc::Aviation;
@@ -53,6 +53,16 @@ namespace BlackMisc
return getAircraftInRangeForCallsign(callsign).getModel();
}
bool CRemoteAircraftProviderDummy::isAircraftInRange(const CCallsign &callsign) const
{
return m_aircraft.containsCallsign(callsign);
}
bool CRemoteAircraftProviderDummy::isVtolAircraft(const CCallsign &callsign) const
{
return m_aircraft.findFirstByCallsign(callsign).isVtol();
}
CAirspaceAircraftSnapshot CRemoteAircraftProviderDummy::getLatestAirspaceAircraftSnapshot() const
{
return CAirspaceAircraftSnapshot(m_aircraft);
@@ -64,6 +74,11 @@ namespace BlackMisc
return m_parts.value(callsign).findBefore(cutoffTimeBefore);
}
int CRemoteAircraftProviderDummy::remoteAircraftPartsCount(const CCallsign &callsign, qint64 cutoffTimeBefore) const
{
return this->remoteAircraftParts(callsign, cutoffTimeBefore).size();
}
CAircraftSituationList CRemoteAircraftProviderDummy::remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const
{
return m_situations.findByCallsign(callsign);
@@ -74,6 +89,11 @@ namespace BlackMisc
return remoteAircraftSituations(callsign).size();
}
int CRemoteAircraftProviderDummy::getRemoteAircraftSupportingPartsCount() const
{
return m_parts.keys().size();
}
CCallsignSet CRemoteAircraftProviderDummy::remoteAircraftSupportingParts() const
{
return CCollection<CCallsign>(m_parts.keys());
@@ -95,9 +115,9 @@ namespace BlackMisc
Q_ASSERT_X(receiver, Q_FUNC_INFO, "Missing receiver");
QList<QMetaObject::Connection> c(
{
connect(this, &CRemoteAircraftProviderDummy::addedRemoteAircraftSituation, receiver, situationSlot) ,
connect(this, &CRemoteAircraftProviderDummy::addedRemoteAircraftParts, receiver, partsSlot) ,
connect(this, &CRemoteAircraftProviderDummy::removedRemoteAircraft, receiver, removedAircraftSlot) ,
connect(this, &CRemoteAircraftProviderDummy::addedRemoteAircraftSituation, receiver, situationSlot),
connect(this, &CRemoteAircraftProviderDummy::addedRemoteAircraftParts, receiver, partsSlot),
connect(this, &CRemoteAircraftProviderDummy::removedRemoteAircraft, receiver, removedAircraftSlot),
connect(this, &CRemoteAircraftProviderDummy::airspaceAircraftSnapshot, receiver, aircraftSnapshotSlot)
});
return c;
@@ -106,7 +126,7 @@ namespace BlackMisc
bool CRemoteAircraftProviderDummy::updateAircraftEnabled(const CCallsign &callsign, bool enabledForRendering)
{
CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexEnabled, CVariant::fromValue(enabledForRendering));
const int n = this->m_aircraft.applyIfCallsign(callsign, vm);
const int n = m_aircraft.applyIfCallsign(callsign, vm);
return n > 0;
}
@@ -114,7 +134,7 @@ namespace BlackMisc
{
Q_UNUSED(originator);
CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexModel, CVariant::from(model));
const int n = this->m_aircraft.applyIfCallsign(callsign, vm);
const int n = m_aircraft.applyIfCallsign(callsign, vm);
return n > 0;
}
@@ -122,34 +142,34 @@ namespace BlackMisc
{
Q_UNUSED(originator);
CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexNetworkModel, CVariant::from(model));
const int n = this->m_aircraft.applyIfCallsign(callsign, vm);
const int n = m_aircraft.applyIfCallsign(callsign, vm);
return n > 0;
}
bool CRemoteAircraftProviderDummy::updateFastPositionEnabled(const CCallsign &callsign, bool enableFastPositionUpdates)
{
CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexFastPositionUpdates, CVariant::fromValue(enableFastPositionUpdates));
const int n = this->m_aircraft.applyIfCallsign(callsign, vm);
const int n = m_aircraft.applyIfCallsign(callsign, vm);
return n > 0;
}
bool CRemoteAircraftProviderDummy::updateAircraftRendered(const CCallsign &callsign, bool rendered)
{
CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexRendered, CVariant::fromValue(rendered));
const int n = this->m_aircraft.applyIfCallsign(callsign, vm);
const int n = m_aircraft.applyIfCallsign(callsign, vm);
return n > 0;
}
bool CRemoteAircraftProviderDummy::updateAircraftGroundElevation(const CCallsign &callsign, const CElevationPlane &elevation)
{
CPropertyIndexVariantMap vm({ CSimulatedAircraft::IndexSituation, CAircraftSituation::IndexGroundElevationPlane }, CVariant::fromValue(elevation));
const int c = this->m_aircraft.applyIfCallsign(callsign, vm);
const int c = m_aircraft.applyIfCallsign(callsign, vm);
return c > 0;
}
void CRemoteAircraftProviderDummy::updateMarkAllAsNotRendered()
{
this->m_aircraft.markAllAsNotRendered();
m_aircraft.markAllAsNotRendered();
}
CStatusMessageList CRemoteAircraftProviderDummy::getReverseLookupMessages(const CCallsign &callsign) const
@@ -186,22 +206,46 @@ namespace BlackMisc
void CRemoteAircraftProviderDummy::insertNewSituation(const CAircraftSituation &situation)
{
this->m_situations.push_front(situation);
m_situations.push_frontKeepLatestAdjustedFirst(situation);
emit addedRemoteAircraftSituation(situation);
}
void CRemoteAircraftProviderDummy::insertNewSituations(const CAircraftSituationList &situations)
{
for (const CAircraftSituation &situation : situations)
{
m_situations.push_frontKeepLatestAdjustedFirst(situation);
QTimer::singleShot(0, this, [ = ]
{
emit this->addedRemoteAircraftSituation(situation);
});
}
}
void CRemoteAircraftProviderDummy::insertNewAircraftParts(const CCallsign &callsign, const CAircraftParts &parts)
{
this->m_parts[callsign].push_front(parts);
m_parts[callsign].push_frontKeepLatestAdjustedFirst(parts);
emit addedRemoteAircraftParts(callsign, parts);
}
void CRemoteAircraftProviderDummy::insertNewAircraftParts(const CCallsign &callsign, const CAircraftPartsList &partsList)
{
CAircraftPartsList &pl = m_parts[callsign];
for (const CAircraftParts &parts : partsList)
{
pl.push_frontKeepLatestAdjustedFirst(parts);
QTimer::singleShot(0, this, [ = ]
{
emit this->addedRemoteAircraftParts(callsign, parts);
});
}
}
void CRemoteAircraftProviderDummy::clear()
{
m_situations.clear();
m_parts.clear();
m_aircraft.clear();
}
} // namespace
} // namespace

View File

@@ -32,13 +32,6 @@
namespace BlackMisc
{
namespace Aviation
{
class CAircraftParts;
class CAircraftSituation;
class CCallsign;
}
namespace Simulation
{
//! Dummy implementation for testing purpose, not thread safe
@@ -56,9 +49,15 @@ namespace BlackMisc
//! For testing, add new situation and fire signals
void insertNewSituation(const BlackMisc::Aviation::CAircraftSituation &situation);
//! For testing, add new situation and fire signals
void insertNewSituations(const BlackMisc::Aviation::CAircraftSituationList &situations);
//! For testing, add new parts and fire signals
void insertNewAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts);
//! For testing, add new parts and fire signals
void insertNewAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftPartsList &partsList);
//! Clear all data
void clear();
@@ -68,17 +67,21 @@ namespace BlackMisc
virtual Aviation::CCallsignSet getAircraftInRangeCallsigns() const override;
virtual BlackMisc::Simulation::CSimulatedAircraft getAircraftInRangeForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual BlackMisc::Simulation::CAircraftModel getAircraftInRangeModelForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual bool isAircraftInRange(const Aviation::CCallsign &callsign) const override;
virtual bool isVtolAircraft(const Aviation::CCallsign &callsign) const override;
virtual BlackMisc::Simulation::CAirspaceAircraftSnapshot getLatestAirspaceAircraftSnapshot() const override;
virtual BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const override;
virtual int remoteAircraftPartsCount(const Aviation::CCallsign &callsign, qint64 cutoffTimeBefore) const override;
virtual BlackMisc::Aviation::CAircraftSituationList remoteAircraftSituations(const Aviation::CCallsign &callsign) const override;
virtual int remoteAircraftSituationsCount(const Aviation::CCallsign &callsign) const override;
virtual int getRemoteAircraftSupportingPartsCount() const override;
virtual BlackMisc::Aviation::CCallsignSet remoteAircraftSupportingParts() const override;
virtual bool isRemoteAircraftSupportingParts(const Aviation::CCallsign &callsign) const override;
virtual QList<QMetaObject::Connection> connectRemoteAircraftProviderSignals(
QObject *receiver,
std::function<void(const BlackMisc::Aviation::CAircraftSituation &)> addedSituationSlot,
std::function<void(const BlackMisc::Aviation::CAircraftSituation &)> addedSituationSlot,
std::function<void(const BlackMisc::Aviation::CCallsign &, const BlackMisc::Aviation::CAircraftParts &)> addedPartsSlot,
std::function<void(const BlackMisc::Aviation::CCallsign &)> removedAircraftSlot,
std::function<void(const BlackMisc::Aviation::CCallsign &)> removedAircraftSlot,
std::function<void(const BlackMisc::Simulation::CAirspaceAircraftSnapshot &)> aircraftSnapshotSlot
) override;
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRendering) override;
@@ -113,7 +116,6 @@ namespace BlackMisc
BlackMisc::Aviation::CAircraftSituationList m_situations;
CPartsPerCallsign m_parts;
};
} // namespace
} // namespace