refs #877, CSimulatedAircraft DBus signature size

* reduce size by storing models in list
* using an array for the models failed - not supported by tuple system
This commit is contained in:
Klaus Basan
2017-02-08 00:20:28 +01:00
committed by Mathew Sutcliffe
parent 113fe2ec5a
commit 3de16cbec1
2 changed files with 50 additions and 40 deletions

View File

@@ -32,7 +32,7 @@ namespace BlackMisc
init();
}
CSimulatedAircraft::CSimulatedAircraft(const CAircraftModel &model) : m_model(model), m_networkModel(model)
CSimulatedAircraft::CSimulatedAircraft(const CAircraftModel &model) : m_models( {model, model})
{
this->setCallsign(model.getCallsign());
init();
@@ -46,6 +46,8 @@ namespace BlackMisc
void CSimulatedAircraft::init()
{
Q_ASSERT_X(m_models.size() == 2, Q_FUNC_INFO, "Wrong model size");
// sync some values, order here is crucial
// set get/set thing here updates the redundant data (e.g. livery / model.livery)
this->setCallsign(this->getCallsign());
@@ -93,7 +95,7 @@ namespace BlackMisc
const CAircraftIcaoCode &CSimulatedAircraft::getAircraftIcaoCode() const
{
return m_model.getAircraftIcaoCode();
return m_models[CurrentModel].getAircraftIcaoCode();
}
void CSimulatedAircraft::setPilot(const Network::CUser &user)
@@ -120,20 +122,18 @@ namespace BlackMisc
bool CSimulatedAircraft::setIcaoCodes(const CAircraftIcaoCode &aircraftIcaoCode, const CAirlineIcaoCode &airlineIcaoCode)
{
//! \note to be compatible with old version I still allow to set airline here but I should actually set a livery
if (this->getLivery().getAirlineIcaoCode() != airlineIcaoCode)
{
// create a dummy livery for given ICAO code
CLivery newLivery(CLivery::getStandardCode(airlineIcaoCode), airlineIcaoCode, "Standard auto generated");
this->m_model.setLivery(newLivery);
this->m_models[CurrentModel].setLivery(newLivery);
}
return this->m_model.setAircraftIcaoCode(aircraftIcaoCode);
return this->m_models[CurrentModel].setAircraftIcaoCode(aircraftIcaoCode);
}
const CAirlineIcaoCode &CSimulatedAircraft::getAirlineIcaoCode() const
{
return this->m_model.getAirlineIcaoCode();
return this->m_models[CurrentModel].getAirlineIcaoCode();
}
const QString &CSimulatedAircraft::getAirlineIcaoCodeDesignator() const
@@ -143,7 +143,7 @@ namespace BlackMisc
void CSimulatedAircraft::setAircraftIcaoDesignator(const QString &designator)
{
this->m_model.setAircraftIcaoDesignator(designator);
this->m_models[CurrentModel].setAircraftIcaoDesignator(designator);
}
bool CSimulatedAircraft::hasAircraftDesignator() const
@@ -364,11 +364,11 @@ namespace BlackMisc
this->m_parts.setPropertyByIndex(index.copyFrontRemoved(), variant);
break;
case IndexModel:
this->m_model.setPropertyByIndex(index.copyFrontRemoved(), variant);
this->setModel(this->m_model); // sync some values
this->m_models[CurrentModel].setPropertyByIndex(index.copyFrontRemoved(), variant);
this->setModel(this->m_models[CurrentModel]); // sync some values
break;
case IndexNetworkModel:
this->m_networkModel.setPropertyByIndex(index.copyFrontRemoved(), variant);
this->m_models[NetworkModel].setPropertyByIndex(index.copyFrontRemoved(), variant);
break;
case IndexEnabled:
this->m_enabled = variant.toBool();
@@ -423,9 +423,9 @@ namespace BlackMisc
case IndexParts:
return this->m_parts.comparePropertyByIndex(index.copyFrontRemoved(), compareValue.getParts());
case IndexModel:
return m_model.comparePropertyByIndex(index.copyFrontRemoved(), compareValue.getModel());
return m_models[CurrentModel].comparePropertyByIndex(index.copyFrontRemoved(), compareValue.getModel());
case IndexNetworkModel:
return m_networkModel.comparePropertyByIndex(index.copyFrontRemoved(), compareValue.getModel());
return m_models[NetworkModel].comparePropertyByIndex(index.copyFrontRemoved(), compareValue.getModel());
case IndexNetworkModelAircraftIcaoDifference:
return this->getNetworkModelAircraftIcaoDifference().compare(compareValue.getNetworkModelAircraftIcaoDifference());
case IndexNetworkModelAirlineIcaoDifference:
@@ -455,12 +455,14 @@ namespace BlackMisc
const CAircraftModel &CSimulatedAircraft::getNetworkModelOrModel() const
{
return this->hasNetworkModel() ? this->m_networkModel : this->m_model;
Q_ASSERT_X(m_models.size() == 2, Q_FUNC_INFO, "Wrong model size");
return this->hasNetworkModel() ? this->m_models[NetworkModel] : this->m_models[CurrentModel];
}
bool CSimulatedAircraft::hasNetworkModel() const
{
return this->m_networkModel.hasModelString() || !this->m_networkModel.getCallsign().isEmpty();
Q_ASSERT_X(m_models.size() == 2, Q_FUNC_INFO, "Wrong model size");
return this->m_models[NetworkModel].hasModelString() || !this->m_models[NetworkModel].getCallsign().isEmpty();
}
QString CSimulatedAircraft::getNetworkModelAircraftIcaoDifference() const
@@ -483,6 +485,8 @@ namespace BlackMisc
QString CSimulatedAircraft::getNetworkModelLiveryDifference() const
{
Q_ASSERT_X(m_models.size() == 2, Q_FUNC_INFO, "Wrong model size");
const CLivery livery(this->getModel().getLivery());
const CLivery liveryNw(this->getNetworkModel().getLivery());
if (livery == liveryNw) { return "[=] " + livery.getCombinedCodePlusInfo(); }
@@ -492,27 +496,32 @@ namespace BlackMisc
void CSimulatedAircraft::setModel(const CAircraftModel &model)
{
Q_ASSERT_X(m_models.size() == 2, Q_FUNC_INFO, "Wrong model size");
// sync the callsigns
this->m_model = model;
this->m_models[CurrentModel] = model;
this->setCallsign(this->hasValidCallsign() ? this->getCallsign() : model.getCallsign());
this->setIcaoCodes(model.getAircraftIcaoCode(), model.getAirlineIcaoCode());
}
void CSimulatedAircraft::setNetworkModel(const CAircraftModel &model)
{
this->m_networkModel = model;
Q_ASSERT_X(m_models.size() == 2, Q_FUNC_INFO, "Wrong model size");
this->m_models[NetworkModel] = model;
}
void CSimulatedAircraft::setModelString(const QString &modelString)
{
this->m_model.setModelString(modelString);
Q_ASSERT_X(m_models.size() == 2, Q_FUNC_INFO, "Wrong model size");
this->m_models[CurrentModel].setModelString(modelString);
}
void CSimulatedAircraft::setCallsign(const CCallsign &callsign)
{
Q_ASSERT_X(m_models.size() == 2, Q_FUNC_INFO, "Wrong model size");
this->m_callsign = callsign;
this->m_model.setCallsign(callsign);
this->m_networkModel.setCallsign(callsign);
this->m_models[CurrentModel].setCallsign(callsign);
this->m_models[NetworkModel].setCallsign(callsign);
this->m_pilot.setCallsign(callsign);
}

View File

@@ -131,13 +131,14 @@ namespace BlackMisc
const QString &getAircraftIcaoCombinedType() const;
//! Set aicraft ICAO code
bool setAircraftIcaoCode(const BlackMisc::Aviation::CAircraftIcaoCode &aircraftIcaoCode) { return m_model.setAircraftIcaoCode(aircraftIcaoCode);}
bool setAircraftIcaoCode(const BlackMisc::Aviation::CAircraftIcaoCode &aircraftIcaoCode) { return m_models[CurrentModel].setAircraftIcaoCode(aircraftIcaoCode);}
//! Set ICAO info
//! \note to be compatible with old version I still allow to set airline here, but I should actually set a livery
bool setIcaoCodes(const BlackMisc::Aviation::CAircraftIcaoCode &aircraftIcaoCode, const BlackMisc::Aviation::CAirlineIcaoCode &airlineIcaoCode);
//! Get livery
const BlackMisc::Aviation::CLivery &getLivery() const { return m_model.getLivery(); }
const BlackMisc::Aviation::CLivery &getLivery() const { return m_models[CurrentModel].getLivery(); }
//! Airline ICAO code if any
const BlackMisc::Aviation::CAirlineIcaoCode &getAirlineIcaoCode() const;
@@ -158,7 +159,7 @@ namespace BlackMisc
bool hasAircraftDesignator() const;
//! Valid airline designator
bool hasAirlineDesignator() const { return this->m_model.getLivery().hasValidAirlineDesignator(); }
bool hasAirlineDesignator() const { return this->m_models[CurrentModel].getLivery().hasValidAirlineDesignator(); }
//! Valid designators?
bool hasAircraftAndAirlineDesignator() const;
@@ -329,10 +330,10 @@ namespace BlackMisc
int comparePropertyByIndex(const CPropertyIndex &index, const CSimulatedAircraft &compareValue) const;
//! Get model
const BlackMisc::Simulation::CAircraftModel &getModel() const { return m_model; }
const BlackMisc::Simulation::CAircraftModel &getModel() const { return m_models[CurrentModel]; }
//! Get network model
const BlackMisc::Simulation::CAircraftModel &getNetworkModel() const { return m_networkModel; }
const BlackMisc::Simulation::CAircraftModel &getNetworkModel() const { return m_models[NetworkModel]; }
//! Get network model or (if not existing) model
const BlackMisc::Simulation::CAircraftModel &getNetworkModelOrModel() const;
@@ -350,16 +351,16 @@ namespace BlackMisc
QString getNetworkModelLiveryDifference() const;
//! \copydoc BlackMisc::Simulation::CAircraftModel::getIconPath
const QString &getIconPath() const { return m_model.getIconPath(); }
const QString &getIconPath() const { return m_models[CurrentModel].getIconPath(); }
//! Get model string
const QString &getModelString() const { return m_model.getModelString(); }
const QString &getModelString() const { return m_models[CurrentModel].getModelString(); }
//! Set model string
void setModelString(const QString &modelString);
//! Has model string?
bool hasModelString() const { return m_model.hasModelString(); }
bool hasModelString() const { return m_models[CurrentModel].hasModelString(); }
//! Set model
void setModel(const BlackMisc::Simulation::CAircraftModel &model);
@@ -410,16 +411,17 @@ namespace BlackMisc
BlackMisc::CIcon toIcon() const { return this->m_callsign.toIcon(); }
private:
BlackMisc::Aviation::CCallsign m_callsign;
BlackMisc::Network::CUser m_pilot;
BlackMisc::Aviation::CAircraftSituation m_situation;
BlackMisc::Aviation::CComSystem m_com1system;
BlackMisc::Aviation::CComSystem m_com2system;
BlackMisc::Aviation::CTransponder m_transponder;
BlackMisc::Aviation::CAircraftParts m_parts;
BlackMisc::Aviation::CSelcal m_selcal;
BlackMisc::Simulation::CAircraftModel m_model;
BlackMisc::Simulation::CAircraftModel m_networkModel; //!< model received from network
static constexpr int CurrentModel = 0; //!< m_models
static constexpr int NetworkModel = 1; //!< m_models
BlackMisc::Aviation::CCallsign m_callsign;
BlackMisc::Network::CUser m_pilot;
BlackMisc::Aviation::CAircraftSituation m_situation;
BlackMisc::Aviation::CComSystem m_com1system;
BlackMisc::Aviation::CComSystem m_com2system;
BlackMisc::Aviation::CTransponder m_transponder;
BlackMisc::Aviation::CAircraftParts m_parts;
BlackMisc::Aviation::CSelcal m_selcal;
BlackMisc::Simulation::CAircraftModelList m_models = { { CAircraftModel(), CAircraftModel() } }; //!< Shorter DBus signature: current model, and model received from network
bool m_enabled = true; //!< to be displayed in simulator
bool m_rendered = false; //!< really shown in simulator
bool m_partsSynchronized = false; //!< synchronize parts
@@ -438,8 +440,7 @@ namespace BlackMisc
BLACK_METAMEMBER(transponder),
BLACK_METAMEMBER(parts),
BLACK_METAMEMBER(selcal),
BLACK_METAMEMBER(model),
// BLACK_METAMEMBER(networkModel),
BLACK_METAMEMBER(models),
BLACK_METAMEMBER(enabled),
BLACK_METAMEMBER(rendered),
BLACK_METAMEMBER(partsSynchronized),