Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer/SituationMap/Symbology/sidc_codec.cpp
T
torstenandCopilot f15f342a47 QRegExp → QRegularExpression migration complete
Migrated all remaining QRegExp usage to QRegularExpression for Qt6 compatibility:

- Lts/Viewer/SituationMap/SymbologyImpl/symbol_dictionary_impl.cpp
  - Changed helper functions to use QRegularExpression::match().hasMatch()
  - Updated inline regex validation

- Lts/Plugins/PlanEditor/mil2525d_to_mil2525c.cpp
  - Fixed m_sidcQuery.exactMatch() → match().hasMatch()

- Lts/Plugins/PresentationManagement/Gui/Script/ScriptTimelineEditor/pre_script_dialog.cpp
  - Video file pattern matching migrated

- Lts/Proxies/TrainingAreaBase/Plugins/Nmea/nmea_handler_rx.cpp
  - NMEA message parsing with QRegularExpression

- Lts/Proxies/TrainingAreaBaseOC/handler_aes_data.cpp
  - AES data handler regex patterns migrated

- Lts/Services/AudioVideoManagement/stream_name_mapping.*
  - Stream name validation patterns

- Lts/Services/NmeaManagement/nmea_handler.cpp
  - NMEA handler regex patterns

- Lts/Viewer/SituationMap/Symbology/sidc_builder_base.cpp, sidc_codec.cpp
  - SIDC code validation patterns

- Test files updated for compilation

All QRegExp::exactMatch() calls replaced with QRegularExpression::match().hasMatch()
All QRegExp::cap(n) calls replaced with QRegularExpressionMatch::captured(n)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-24 19:10:44 +02:00

222 lines
8.7 KiB
C++
Executable File

/**
* @RDE_HEADER@
* SidcCodec for internal handling of SIDCs
* $Id$
* $HeadURL$
* $Author$
*/
// Own
#include "sidc_codec.h" // enbles highlighting and is harmless since 'pragma once'
#include "sidc_definitions.h"
#include <SymbologyXML/xml_symbol_codec.h>
// Qt
#include <QtCore/QRegularExpression>
namespace AdvancedSymbology
{
//
// SidcCodecHelper
//
namespace SidcCodecHelper
{
QString encode(SymbologyType symbologyType)
{
switch (symbologyType)
{
case SymbologyType::None: return QStringLiteral("NONE"); break;
case SymbologyType::APP6B: return QStringLiteral("AP6B"); break;
case SymbologyType::APP6D: return QStringLiteral("AP6D"); break;
case SymbologyType::MIL2525C: return QStringLiteral("M25C"); break;
case SymbologyType::MIL2525D: return QStringLiteral("M25D"); break;
};
return QLatin1String("EROR");
}
SymbologyType decodeSymbology(const QStringRef &symbologyTypeStr)
{
SymbologyType symbologyType = SymbologyType::None;
if (symbologyTypeStr.compare(QLatin1String("NONE")) == 0) symbologyType = SymbologyType::None;
else if (symbologyTypeStr.compare(QLatin1String("AP6B")) == 0) symbologyType = SymbologyType::APP6B;
else if (symbologyTypeStr.compare(QLatin1String("AP6D")) == 0) symbologyType = SymbologyType::APP6D;
else if (symbologyTypeStr.compare(QLatin1String("M25C")) == 0) symbologyType = SymbologyType::MIL2525C;
else if (symbologyTypeStr.compare(QLatin1String("M25D")) == 0) symbologyType = SymbologyType::MIL2525D;
return symbologyType;
}
QString encode(SidcCodec::SidcType sidcType)
{
switch (sidcType)
{
case SidcCodec::SidcType::None: return QStringLiteral("NONE"); break;
case SidcCodec::SidcType::Base: return QStringLiteral("BASE"); break;
case SidcCodec::SidcType::Complete: return QStringLiteral("CMPL"); break;
case SidcCodec::SidcType::CivilEts: return QStringLiteral("CVLE"); break;
case SidcCodec::SidcType::CivilXml: return QStringLiteral("CVLX"); break;
}
return QLatin1String("EROR");
}
SidcCodec::SidcType decodeSidc(const QStringRef &sidcTypeStr)
{
SidcCodec::SidcType symbologyType = SidcCodec::SidcType::None;
if ( sidcTypeStr.compare(QLatin1String("NONE")) == 0) symbologyType = SidcCodec::SidcType::None;
else if (sidcTypeStr.compare(QLatin1String("BASE")) == 0) symbologyType = SidcCodec::SidcType::Base;
else if (sidcTypeStr.compare(QLatin1String("CMPL")) == 0) symbologyType = SidcCodec::SidcType::Complete;
else if (sidcTypeStr.compare(QLatin1String("CVLE")) == 0) symbologyType = SidcCodec::SidcType::CivilEts;
else if (sidcTypeStr.compare(QLatin1String("CVLX")) == 0) symbologyType = SidcCodec::SidcType::CivilXml;
return symbologyType;
}
} // SidcCodecHelper
unsigned int SidcCodec::rawSidcOffset() { return 10; }
//
// isEncoded
//
bool SidcCodec::isEncoded(const QString &encodedSidc)
{
const QChar separator(QLatin1Char('|'));
return ((encodedSidc.size() > 9) && (encodedSidc.at(4) == separator) && (encodedSidc.at(9) == separator));
}
bool SidcCodec::checkSidcSyntax(const QString &encodedSidc)
{
if (!isEncoded(encodedSidc)) return false;
SidcCodec::SidcType sidcType = SidcCodecHelper::decodeSidc(QStringRef(&encodedSidc, 5, 4));
const QStringRef symbologyTypeStr(&encodedSidc, 0, 4);
if (symbologyTypeStr.compare(QLatin1String("NONE")) == 0) return true;
else if (symbologyTypeStr.compare(QLatin1String("AP6B")) == 0) return true;
else if (symbologyTypeStr.compare(QLatin1String("AP6D")) == 0) return true;
else if (symbologyTypeStr.compare(QLatin1String("M25C")) == 0) return true;
else if ((symbologyTypeStr.compare(QLatin1String("M25D")) == 0) || (symbologyTypeStr.compare(QLatin1String("AP6D")) == 0))
{
const QString &rawSidcStr(encodedSidc.mid(10));
QRegularExpression isDigit(QStringLiteral("^[0..9]*$"));
if (isDigit.match(rawSidcStr).hasMatch())
{
switch (sidcType)
{
case SidcCodec::SidcType::Base : return (rawSidcStr.size() == 8); break;
case SidcCodec::SidcType::Complete : return (rawSidcStr.size() == 20); break;
default: break;
}
}
}
return false;
}
bool SidcCodec::isCivil(const QString &encodedSidc)
{
SidcCodec::SidcType sidcType = SidcCodec::decodeSidcType(encodedSidc);
return ((sidcType == SidcCodec::SidcType::CivilEts) || (sidcType == SidcCodec::SidcType::CivilXml));
}
//
// ENCODE
//
QString SidcCodec::encodeBaseSymbolCode(SymbologyType symbologyType, const QString &baseSymboCodeSidc)
{
return QStringLiteral("%1|BASE|%3").arg(SidcCodecHelper::encode(symbologyType), baseSymboCodeSidc);
}
QString SidcCodec::encodeComplete(SymbologyType symbologyType, const QString &completeSidc)
{
return QStringLiteral("%1|CMPL|%3").arg(SidcCodecHelper::encode(symbologyType), completeSidc);
}
QString SidcCodec::encodeCivilEts(const QString &civilSidc)
{
return QStringLiteral("NONE|CVLE|%1").arg(civilSidc);
}
QString SidcCodec::encodeCivilXml(const QString &civilSidc)
{
return QStringLiteral("NONE|CVLX|%1").arg(civilSidc);
}
int SidcCodec::decodeCivilXml(const QString &civilSidc)
{
return decodeRawSidc(civilSidc).toInt();
}
//
// DECODE
//
// QStringRef(const QString *string, int position, int size);
// QString mid(int position, int n = -1) const Q_REQUIRED_RESULT;
//
SymbologyType SidcCodec::decodeSymbologyType(const QString &encodedSidc)
{
return SidcCodecHelper::decodeSymbology(QStringRef(&encodedSidc, 0, 4));
}
SidcCodec::SidcType SidcCodec::decodeSidcType(const QString &encodedSidc)
{
return SidcCodecHelper::decodeSidc(QStringRef(&encodedSidc, 5, 4));
}
QString SidcCodec::decodeRawSidc(const QString &encodedSidc)
{
return (isEncoded(encodedSidc)) ? encodedSidc.mid(rawSidcOffset()) : encodedSidc;
}
QString SidcCodec::encodeCivilXmlSymbolId( uint symbolId )
{
const QString &rawSidc = QString::number(symbolId);
return encodeCivilXml(rawSidc);
} // QString SidcCodec::encodeCivilXmlSymbolId( uint symbolId )
QString SidcCodec::encodeCivilXmlSymbolId( uint symbolId
, SymbologyXML::SymbolTypes::t_state state
, SymbologyXML::SymbolTypes::t_uncertainty uncertainty
, SymbologyXML::SymbolTypes::t_affil affil
, SymbologyXML::SymbolTypes::t_mob mob )
{
const QString &rawSidc = SymbologyXML::xmlSymbolEncodeId(symbolId,state,uncertainty,affil,mob);
return encodeCivilXml(rawSidc);
} // QString SidcCodec::encodeCivilXmlSymbolId(...)
QString SidcCodec::extractCivilXmlBaseSidc( const QString &sidc )
{
return SymbologyXML::xmlSymbolExtractBaseSidc(sidc);
} // QString SidcCodec::extractCivilXmlBaseSidc( const QString &sidc )
//
// Some convenience functions
QString SidcCodec::encodeBaseSymbolCode(SymbologyType symbologyType, const QStringRef &baseSymboCodeSidc) { return encodeBaseSymbolCode(symbologyType, *baseSymboCodeSidc.string()); }
QString SidcCodec::encodeBaseSymbolCode(SymbologyType symbologyType, const std::string &baseSymboCodeSidc) { return encodeBaseSymbolCode(symbologyType, QString::fromStdString(baseSymboCodeSidc));}
QString SidcCodec::encodeBaseSymbolCode(SymbologyType symbologyType, const char *baseSymboCodeSidc) { return encodeBaseSymbolCode(symbologyType, QString::fromLatin1(baseSymboCodeSidc));}
QString SidcCodec::encodeComplete(SymbologyType symbologyType, const QStringRef &completeSidc) { return encodeComplete(symbologyType, *completeSidc.string());}
QString SidcCodec::encodeComplete(SymbologyType symbologyType, const std::string &completeSidc) { return encodeComplete(symbologyType, QString::fromStdString(completeSidc)); }
QString SidcCodec::encodeComplete(SymbologyType symbologyType, const char *completeSidc) { return encodeComplete(symbologyType, QString::fromLatin1(completeSidc)); }
QString SidcCodec::encodeCivilEts(const QStringRef &civilSidc) { return encodeCivilEts(*civilSidc.string());}
QString SidcCodec::encodeCivilEts(const std::string &civilSidc) { return encodeCivilEts(QString::fromStdString(civilSidc)); }
QString SidcCodec::encodeCivilEts(const char *civilSidc) { return encodeCivilEts(QString::fromLatin1(civilSidc)); }
QString SidcCodec::encodeCivilXml(const QStringRef &civilSidc) { return encodeCivilXml(*civilSidc.string());}
QString SidcCodec::encodeCivilXml(const std::string &civilSidc) { return encodeCivilXml(QString::fromStdString(civilSidc)); }
QString SidcCodec::encodeCivilXml(const char *civilSidc) { return encodeCivilXml(QString::fromLatin1(civilSidc)); }
} // namespace AdvancedSymbology