2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-09 17:47:43 +00:00

Start implementing options tab; bug fixes & logging performance improvement

This commit is contained in:
2020-04-18 06:08:11 -04:00
parent 3487423d78
commit 2b6851f7bf
10 changed files with 333 additions and 422 deletions

View File

@@ -92,39 +92,74 @@ VectorISA StringToVectorISA(const QString& str) {
URDEVersion::URDEVersion(const QString& filename) {
int idx;
QString useFilename = filename;
if ((idx = filename.indexOf(QLatin1Char{'.'})) >= 0) {
if ((idx = filename.lastIndexOf(QLatin1Char{'.'})) >= 0) {
m_extension = QString(filename).remove(0, idx);
useFilename.truncate(idx);
}
const QStringList list = useFilename.split(QLatin1Char{'-'});
if (list.size() >= 2) {
m_version = list[1].toInt();
}
if (list.size() >= 3) {
m_platform = StringToPlatform(list[2]);
}
if (list.size() >= 4) {
m_architecture = StringToArchitecture(list[3]);
}
if (list.size() >= 5) {
m_vectorISA = StringToVectorISA(list[4]);
enum {
version,
platform,
architecture,
vectorISA,
extra
} state = version;
for (size_t i = 1; i < list.size(); ++i) {
if (state == version) {
if (m_version.isEmpty()) {
m_version = list[i];
continue;
}
bool ok;
int patch = list[i].toInt(&ok);
if (ok) {
m_version += QLatin1Char('-') + QString::number(patch);
continue;
}
state = platform;
}
if (state == platform) {
state = architecture;
Platform platValue = StringToPlatform(list[i]);
if (platValue != Platform::Invalid) {
m_platform = platValue;
continue;
}
}
if (state == architecture) {
state = vectorISA;
Architecture archValue = StringToArchitecture(list[i]);
if (archValue != Architecture::Invalid) {
m_architecture = archValue;
continue;
}
}
if (state == vectorISA) {
state = extra;
VectorISA isa = StringToVectorISA(list[i]);
if (isa != VectorISA::Invalid) {
m_vectorISA = isa;
continue;
}
}
m_extra += QLatin1Char('-') + list[i];
}
}
QString URDEVersion::fileString(bool withExtension) const {
if (m_version < 0) {
if (m_version.isEmpty()) {
return {};
}
if (withExtension && !m_extension.isEmpty()) {
return QStringLiteral("urde-%1-%2-%3-%4%5")
.arg(QString::number(m_version), PlatformToString(m_platform), ArchitectureToString(m_architecture),
VectorISAToString(m_vectorISA), m_extension);
return QStringLiteral("urde-%1-%2-%3-%4%5%6")
.arg(m_version, PlatformToString(m_platform), ArchitectureToString(m_architecture),
VectorISAToString(m_vectorISA), m_extra, m_extension);
} else {
return QStringLiteral("urde-%1-%2-%3-%4")
.arg(QString::number(m_version), PlatformToString(m_platform), ArchitectureToString(m_architecture),
VectorISAToString(m_vectorISA));
return QStringLiteral("urde-%1-%2-%3-%4%5")
.arg(m_version, PlatformToString(m_platform), ArchitectureToString(m_architecture),
VectorISAToString(m_vectorISA), m_extra);
}
}