Browse Source

Only resize monster data vectors when needed

pull/8126/head
Anders Jenbo 7 months ago
parent
commit
62d2ff607c
  1. 2
      Source/lua/modules/monsters.cpp
  2. 15
      Source/monstdat.cpp
  3. 2
      Source/monstdat.h

2
Source/lua/modules/monsters.cpp

@ -18,7 +18,7 @@ namespace {
void AddMonsterDataFromTsv(const std::string_view path)
{
DataFile dataFile = DataFile::loadOrDie(path);
LoadMonstDatFromFile(dataFile, path);
LoadMonstDatFromFile(dataFile, path, true);
}
void AddUniqueMonsterDataFromTsv(const std::string_view path)

15
Source/monstdat.cpp

@ -322,11 +322,13 @@ tl::expected<UniqueMonsterPack, std::string> ParseUniqueMonsterPack(std::string_
} // namespace
void LoadMonstDatFromFile(DataFile &dataFile, const std::string_view filename)
void LoadMonstDatFromFile(DataFile &dataFile, const std::string_view filename, bool grow)
{
dataFile.skipHeaderOrDie(filename);
MonstersData.reserve(MonstersData.size() + dataFile.numRecords());
if (grow) {
MonstersData.reserve(MonstersData.size() + dataFile.numRecords());
}
for (DataFileRecord record : dataFile) {
if (MonstersData.size() >= static_cast<size_t>(NUM_MAX_MTYPES)) {
@ -396,7 +398,6 @@ void LoadMonstDatFromFile(DataFile &dataFile, const std::string_view filename)
reader.readInt("exp", monster.exp);
}
MonstersData.shrink_to_fit();
}
namespace {
@ -408,9 +409,11 @@ void LoadMonstDat()
MonstersData.clear();
AdditionalMonsterIdStringsToIndices.clear();
MonstersData.resize(NUM_DEFAULT_MTYPES); // ensure the hardcoded monster type slots are filled
LoadMonstDatFromFile(dataFile, filename);
LoadMonstDatFromFile(dataFile, filename, false);
LuaEvent("MonsterDataLoaded");
MonstersData.shrink_to_fit();
}
} // namespace
@ -451,8 +454,6 @@ void LoadUniqueMonstDatFromFile(DataFile &dataFile, std::string_view filename)
return tl::make_unexpected("Invalid value. NOTE: Parser is incomplete");
});
}
UniqueMonstersData.shrink_to_fit();
}
namespace {
@ -466,6 +467,8 @@ void LoadUniqueMonstDat()
LoadUniqueMonstDatFromFile(dataFile, filename);
LuaEvent("UniqueMonsterDataLoaded");
UniqueMonstersData.shrink_to_fit();
}
} // namespace

2
Source/monstdat.h

@ -337,7 +337,7 @@ extern std::vector<MonsterData> MonstersData;
extern const _monster_id MonstConvTbl[];
extern std::vector<UniqueMonsterData> UniqueMonstersData;
void LoadMonstDatFromFile(DataFile &dataFile, std::string_view filename);
void LoadMonstDatFromFile(DataFile &dataFile, std::string_view filename, bool grow);
void LoadUniqueMonstDatFromFile(DataFile &dataFile, std::string_view filename);
void LoadMonsterData();

Loading…
Cancel
Save