Ref T182, added coverageSummary / count functions

This commit is contained in:
Klaus Basan
2017-11-10 03:51:25 +01:00
parent 9a5a80146c
commit 0d3dcdae83
4 changed files with 114 additions and 2 deletions

View File

@@ -183,6 +183,17 @@ namespace BlackMisc
return objs.oldestDbTimestamp();
}
template<class OBJ, class CONTAINER, typename KEYTYPE>
int IDatastoreObjectList<OBJ, CONTAINER, KEYTYPE>::countWithValidDbKey() const
{
int count = 0;
for (const OBJ &obj : ITimestampObjectList<OBJ, CONTAINER>::container())
{
if (obj.hasValidDbKey()) { count++; }
}
return count;
}
template<class OBJ, class CONTAINER, typename KEYTYPE>
QDateTime IDatastoreObjectList<OBJ, CONTAINER, KEYTYPE>::latestDbTimestamp() const
{

View File

@@ -38,7 +38,7 @@ namespace BlackMisc
//! All keys as set
QSet<KEYTYPE> toDbKeySet() const;
//! All keys as string set (also int keys will be converted to string)
//! All keys as string set (also integer keys will be converted to string)
QSet<QString> toDbKeyStringSet() const;
//! The DB keys as string
@@ -62,6 +62,9 @@ namespace BlackMisc
//! Latest DB timestamp (means objects with DB key)
QDateTime oldestDbTimestamp() const;
//! Number of entries with valid DB key
int countWithValidDbKey() const;
//! From DB JSON with default prefixes
//! \remark Specialized classes might have their own fromDatabaseJson implementation
static CONTAINER fromDatabaseJson(const QJsonArray &array);

View File

@@ -18,6 +18,7 @@
#include "blackmisc/statusmessage.h"
#include "blackmisc/stringutils.h"
#include <QStringBuilder>
#include <QJsonValue>
#include <QList>
#include <QMultiMap>
@@ -623,6 +624,46 @@ namespace BlackMisc
return count;
}
int CAircraftModelList::countVtolAircraft() const
{
int count = 0;
for (const CAircraftModel &model : (*this))
{
if (model.isVtol()) { count++; }
}
return count;
}
int CAircraftModelList::countMilitaryAircraft() const
{
int count = 0;
for (const CAircraftModel &model : (*this))
{
if (model.isMilitary()) { count++; }
}
return count;
}
int CAircraftModelList::countCivilianAircraft() const
{
int count = 0;
for (const CAircraftModel &model : (*this))
{
if (model.isCivilian()) { count++; }
}
return count;
}
int CAircraftModelList::countDifferentAirlines() const
{
return this->getAirlineVDesignators().size();
}
int CAircraftModelList::countCombinedTypes() const
{
return this->getCombinedTypes().size();
}
void CAircraftModelList::updateDistributor(const CDistributor &distributor)
{
for (CAircraftModel &model : *this)
@@ -678,6 +719,23 @@ namespace BlackMisc
return designators;
}
QSet<QString> CAircraftModelList::getCombinedTypes() const
{
QSet<QString> combinedCodes;
for (const CAircraftModel &model : *this)
{
const QString ct = model.getAircraftIcaoCode().getCombinedType();
if (ct.isEmpty()) { continue; }
combinedCodes.insert(ct);
}
return combinedCodes;
}
QString CAircraftModelList::getCombinedTypesAsString(const QString &separator) const
{
return this->getCombinedTypes().values().join(separator);
}
void CAircraftModelList::updateAircraftIcao(const CAircraftIcaoCode &icao)
{
for (CAircraftModel &model : *this)
@@ -719,7 +777,8 @@ namespace BlackMisc
// normally prefer colors if there is no airline
CMatchingUtils::addLogDetailsToList(log, remoteModel.getCallsign(), QString("Prefer color liveries: '%1', airline: '%2', ignore zero scores: '%3'").arg(boolToYesNo(preferColorLiveries), remoteModel.getAirlineIcaoCodeDesignator(), boolToYesNo(ignoreZeroScores)));
CMatchingUtils::addLogDetailsToList(log, remoteModel.getCallsign(), QString("--- Start scoring in list with %1 models, airline liveries: %2, color liveries: %3").arg(this->size()).arg(this->countModelsWithAirlineLivery()).arg(this->countModelsWithColorLivery()));
CMatchingUtils::addLogDetailsToList(log, remoteModel.getCallsign(), QString("--- Start scoring in list with %1 models").arg(this->size()));
CMatchingUtils::addLogDetailsToList(log, remoteModel.getCallsign(), this->coverageSummary());
int c = 1;
for (const CAircraftModel &model : *this)
@@ -912,5 +971,20 @@ namespace BlackMisc
}
return html;
}
QString CAircraftModelList::coverageSummary(const QString &separator) const
{
return
QStringLiteral("Entries: ") % QString::number(this->size()) %
QStringLiteral(" valid DB keys: ") % QString::number(this->countWithValidDbKey()) % separator %
QStringLiteral("color liveries: ") % QString::number(this->countModelsWithColorLivery()) %
QStringLiteral(" airline liveries: ") % QString::number(this->countModelsWithAirlineLivery()) % separator %
QStringLiteral("VTOL: ") % QString::number(this->countVtolAircraft()) % separator %
QStringLiteral("Simulators: ") % this->countPerSimulator().toQString() % separator %
QStringLiteral("Military: ") % QString::number(this->countMilitaryAircraft()) %
QStringLiteral(" civilian: ") % QString::number(this->countCivilianAircraft()) % separator %
QStringLiteral("Different airlines: ") % QString::number(this->countDifferentAirlines()) % separator %
QStringLiteral("Combined types: ") % this->getCombinedTypesAsString();
}
} // namespace
} // namespace

View File

@@ -243,6 +243,21 @@ namespace BlackMisc
//! Models with an airline livery
int countModelsWithAirlineLivery() const;
//! Count VTOL aircraft
int countVtolAircraft() const;
//! Count military aircraft
int countMilitaryAircraft() const;
//! Count civilian aircraft
int countCivilianAircraft() const;
//! Number of different airlines
int countDifferentAirlines() const;
//! Count different combined types
int countCombinedTypes() const;
//! Update distributor, all models in list are set to given distributor
void updateDistributor(const CDistributor &distributor);
@@ -258,6 +273,12 @@ namespace BlackMisc
//! Airline virtual designators
QSet<QString> getAirlineVDesignators() const;
//! All combined types
QSet<QString> getCombinedTypes() const;
//! All combined types as string
QString getCombinedTypesAsString(const QString &separator = ", ") const;
//! Update aircraft ICAO
void updateAircraftIcao(const BlackMisc::Aviation::CAircraftIcaoCode &icao);
@@ -299,6 +320,9 @@ namespace BlackMisc
//! As HTML summary
QString asHtmlSummary() const;
//! What kind of models are represented here
QString coverageSummary(const QString &separator = "\n") const;
};
} // ns
} // ns