Fix flags being listed out of order

This commit is contained in:
GriffinR
2020-07-13 16:36:43 -04:00
committed by huderlem
parent 70b8806737
commit 00ad1ec22a
4 changed files with 16 additions and 10 deletions

View File

@@ -252,8 +252,7 @@ QString ParseUtil::readCIncbin(QString filename, QString label) {
return path;
}
QMap<QString, int> ParseUtil::readCDefines(QString filename, QStringList prefixes) {
QMap<QString, int> allDefines;
QMap<QString, int> ParseUtil::readCDefines(QString filename, QStringList prefixes, QMap<QString, int> allDefines) {
QMap<QString, int> filteredDefines;
file = filename;
@@ -293,8 +292,8 @@ QMap<QString, int> ParseUtil::readCDefines(QString filename, QStringList prefixe
return filteredDefines;
}
void ParseUtil::readCDefinesSorted(QString filename, QStringList prefixes, QStringList* definesToSet) {
QMap<QString, int> defines = readCDefines(filename, prefixes);
void ParseUtil::readCDefinesSorted(QString filename, QStringList prefixes, QStringList* definesToSet, QMap<QString, int> knownDefines) {
QMap<QString, int> defines = readCDefines(filename, prefixes, knownDefines);
// The defines should to be sorted by their underlying value, not alphabetically.
// Reverse the map and read out the resulting keys in order.

View File

@@ -2171,13 +2171,19 @@ bool Project::readItemNames() {
}
bool Project::readFlagNames() {
// First read MAX_TRAINERS_COUNT, used to skip over trainer flags
// If this fails flags may simply be out of order, no need to check for success
QString opponentsFilename = "include/constants/opponents.h";
fileWatcher.addPath(root + "/" + opponentsFilename);
QMap<QString, int> maxTrainers = parser.readCDefines(opponentsFilename, QStringList() << "MAX_");
// Parse flags
flagNames->clear();
QStringList prefixes = (QStringList() << "FLAG_");
QString filename = "include/constants/flags.h";
fileWatcher.addPath(root + "/" + filename);
parser.readCDefinesSorted(filename, prefixes, flagNames);
QString flagsFilename = "include/constants/flags.h";
fileWatcher.addPath(root + "/" + flagsFilename);
parser.readCDefinesSorted(flagsFilename, prefixes, flagNames, maxTrainers);
if (flagNames->isEmpty()) {
logError(QString("Failed to read flag constants from %1").arg(filename));
logError(QString("Failed to read flag constants from %1").arg(flagsFilename));
return false;
}
return true;