From bd9de9308c88319828afefa5d65f74a11fa6f193 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 12 Apr 2016 12:42:17 +0200 Subject: [PATCH] refs #640, alternatives for combined code --- src/blackmisc/aviation/aircrafticaocode.cpp | 37 +++++++++++++++++++++ src/blackmisc/aviation/aircrafticaocode.h | 3 ++ 2 files changed, 40 insertions(+) diff --git a/src/blackmisc/aviation/aircrafticaocode.cpp b/src/blackmisc/aviation/aircrafticaocode.cpp index 03bf156f1..d32c9ce2f 100644 --- a/src/blackmisc/aviation/aircrafticaocode.cpp +++ b/src/blackmisc/aviation/aircrafticaocode.cpp @@ -492,6 +492,43 @@ namespace BlackMisc return n.remove(regexp); } + QStringList CAircraftIcaoCode::alternativeCombinedCodes(const QString &combinedCode) + { + // manually add some replacements for frequently used types + static const QMultiMap knownCodes + { + { "L1P", "L2P" }, { "L1P", "S1P" }, + { "L2J", "L3J" }, { "L2J", "L4J" }, + { "L3J", "L4J" } + }; + + if (isValidCombinedType(combinedCode)) { return QStringList(); } + if (knownCodes.contains(combinedCode)) + { + return knownCodes.values(combinedCode); + } + + // turn E to P engine + if (combinedCode.endsWith("E")) { return QStringList({ combinedCode.left(2) + "P"}); } + + // turn T to H plane (tilt wing to helicopter + if (combinedCode.startsWith("T")) { return QStringList({ "H" + combinedCode.right(2)}); } + + // based on engine count + QStringList codes; + int engineCount = combinedCode[1].digitValue(); + if (engineCount > 1) + { + for (int c = 2; c < 5; c++) + { + if (c == engineCount) { continue; } + const QString code(combinedCode.left(1) + QString::number(c) + combinedCode.right(1)); + codes.push_back(code); + } + } + return codes; + } + CAircraftIcaoCode CAircraftIcaoCode::fromDatabaseJson(const QJsonObject &json, const QString &prefix) { if (!existsKey(json, prefix)) diff --git a/src/blackmisc/aviation/aircrafticaocode.h b/src/blackmisc/aviation/aircrafticaocode.h index 67a936e43..60b3d20e9 100644 --- a/src/blackmisc/aviation/aircrafticaocode.h +++ b/src/blackmisc/aviation/aircrafticaocode.h @@ -255,6 +255,9 @@ namespace BlackMisc //! Normalize designator, remove illegal characters static const QString normalizeDesignator(const QString candidate); + //! Create relaxed combined codes, e.g "L2J" -> "L3J", ... + static QStringList alternativeCombinedCodes(const QString &combinedCode); + //! From our database JSON format static CAircraftIcaoCode fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString());