refs #820, utility functions for score and groupBy

This commit is contained in:
Klaus Basan
2016-12-02 02:50:12 +01:00
parent d398fc7e9e
commit 630ec78d38
13 changed files with 250 additions and 40 deletions

View File

@@ -584,6 +584,13 @@ namespace BlackMisc
this->m_modelString.startsWith(modelString, sensitivity);
}
int CAircraftModel::calculateScore(const CAircraftModel &compareModel) const
{
int score = this->getAircraftIcaoCode().calculateScore(compareModel.getAircraftIcaoCode());
score += this->getLivery().calculateScore(compareModel.getLivery());
return 0.5 * score;
}
CStatusMessageList CAircraftModel::validate(bool withNestedObjects) const
{
static const CLogCategoryList cats(CLogCategoryList(this).join({ CLogCategory::validation() }));

View File

@@ -338,6 +338,9 @@ namespace BlackMisc
//! Matches model string?
bool matchesModelString(const QString &modelString, Qt::CaseSensitivity sensitivity) const;
//! Calculate score
int calculateScore(const CAircraftModel &compareModel) const;
//! Validate
BlackMisc::CStatusMessageList validate(bool withNestedObjects) const;
@@ -368,7 +371,7 @@ namespace BlackMisc
//! Model mode
static ModelMode modelModeFromString(const QString &mode);
//! Model mode-
//! Model mode
static const QString &modelModeToString(ModelMode mode);
//! From swift DB JSON

View File

@@ -528,6 +528,18 @@ namespace BlackMisc
}
}
ScoredModels CAircraftModelList::scoreFull(const CAircraftModel &remoteModel, bool ignoreZeroScores) const
{
ScoredModels scoreMap;
for (const CAircraftModel &model : *this)
{
const int score = model.calculateScore(remoteModel);
if (ignoreZeroScores && score < 1) { continue; }
scoreMap.insertMulti(score, model);
}
return scoreMap;
}
QStringList CAircraftModelList::toCompleterStrings(bool sorted) const
{
QStringList c;

View File

@@ -43,6 +43,9 @@ namespace BlackMisc
namespace Simulation
{
//! Individual (matching) score for each model
using ScoredModels = QMap<int, CAircraftModel>;
//! Value object encapsulating a list of aircraft models
class BLACKMISC_EXPORT CAircraftModelList :
public BlackMisc::CSequence<CAircraftModel>,
@@ -204,6 +207,9 @@ namespace BlackMisc
//! File name normalized for DB
void normalizeFileNamesForDb();
//! Score by aircraft ICAO code
ScoredModels scoreFull(const CAircraftModel &remoteModel, bool ignoreZeroScores = true) const;
//! Completer strings
QStringList toCompleterStrings(bool sorted = true) const;