Performance improvements for dealing with json
This commit is contained in:
parent
9dafa51e9d
commit
01b2f29db6
|
@ -5,10 +5,11 @@
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
|
|
||||||
#define GET(o, objectKey, key) \
|
#define GET(o, objectKey, key) \
|
||||||
auto _##objectKey = o[#objectKey]; \
|
auto& _##objectKey = o[#objectKey]; \
|
||||||
if (_##objectKey.is_null()) { \
|
if (_##objectKey.is_null()) { \
|
||||||
std::cout << "Failed to retrieve key '" << #objectKey << "' for object with value '" << key << "' in file '" \
|
auto errorKeyFunc = [=]() { return key; }; \
|
||||||
<< path << "'\n"; \
|
std::cout << "Failed to retrieve key '" << #objectKey << "' for object with key '" << errorKeyFunc() << path \
|
||||||
|
<< "'\n"; \
|
||||||
return nullptr; \
|
return nullptr; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,7 +46,7 @@ PkmnLib::Library::ItemLibrary* BuildItems::Build(const std::string& path) {
|
||||||
if (i.key().starts_with("$")) {
|
if (i.key().starts_with("$")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
auto val = i.value();
|
auto& val = i.value();
|
||||||
GET(val, name, i);
|
GET(val, name, i);
|
||||||
GET(val, itemType, i);
|
GET(val, itemType, i);
|
||||||
GET(val, flags, i);
|
GET(val, flags, i);
|
||||||
|
@ -57,15 +58,15 @@ PkmnLib::Library::ItemLibrary* BuildItems::Build(const std::string& path) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
auto flags = std::unordered_set<uint>();
|
auto flags = std::unordered_set<uint>();
|
||||||
for (auto flagIndex : _flags.items()) {
|
for (auto& flagIndex : _flags.items()) {
|
||||||
flags.insert(ArbUt::StringView(flagIndex.value().get<std::string>().c_str()));
|
flags.insert(ArbUt::StringView(flagIndex.value().get<std::string>().c_str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
CreatureLib::Library::SecondaryEffect* effect = nullptr;
|
CreatureLib::Library::SecondaryEffect* effect = nullptr;
|
||||||
auto effectJson = val["effect"];
|
auto& effectJson = val["effect"];
|
||||||
if (effectJson != nullptr) {
|
if (effectJson != nullptr) {
|
||||||
auto effectName = effectJson["name"];
|
auto& effectName = effectJson["name"];
|
||||||
auto parametersJson = effectJson["parameters"];
|
auto& parametersJson = effectJson["parameters"];
|
||||||
ArbUt::List<CreatureLib::Library::EffectParameter*> parameters;
|
ArbUt::List<CreatureLib::Library::EffectParameter*> parameters;
|
||||||
if (parametersJson != nullptr) {
|
if (parametersJson != nullptr) {
|
||||||
for (auto& kv : parametersJson.items()) {
|
for (auto& kv : parametersJson.items()) {
|
||||||
|
|
|
@ -5,9 +5,10 @@
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
|
|
||||||
#define GET(o, objectKey, key) \
|
#define GET(o, objectKey, key) \
|
||||||
auto _##objectKey = o[#objectKey]; \
|
auto& _##objectKey = o[#objectKey]; \
|
||||||
if (_##objectKey.is_null()) { \
|
if (_##objectKey.is_null()) { \
|
||||||
std::cout << "Failed to retrieve key '" << #objectKey << "' for object with value '" << key << "' in file '" \
|
auto errorKeyFunc = [=]() { return key; }; \
|
||||||
|
std::cout << "Failed to retrieve key '" << #objectKey << "' for object with key '" << errorKeyFunc() \
|
||||||
<< path << "'\n"; \
|
<< path << "'\n"; \
|
||||||
return nullptr; \
|
return nullptr; \
|
||||||
}
|
}
|
||||||
|
@ -34,7 +35,7 @@ PkmnLib::Library::MoveLibrary* BuildMoves::Build(const std::string& path,
|
||||||
json j;
|
json j;
|
||||||
fileStream >> j;
|
fileStream >> j;
|
||||||
for (const auto& i : j["data"].items()) {
|
for (const auto& i : j["data"].items()) {
|
||||||
auto val = i.value();
|
auto& val = i.value();
|
||||||
GET(val, name, i);
|
GET(val, name, i);
|
||||||
GET(val, type, i);
|
GET(val, type, i);
|
||||||
GET(val, power, i);
|
GET(val, power, i);
|
||||||
|
@ -57,15 +58,15 @@ PkmnLib::Library::MoveLibrary* BuildMoves::Build(const std::string& path,
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
auto flags = std::unordered_set<uint32_t>();
|
auto flags = std::unordered_set<uint32_t>();
|
||||||
for (auto flagIndex : _flags.items()) {
|
for (auto& flagIndex : _flags.items()) {
|
||||||
flags.insert(ArbUt::StringView(flagIndex.value().get<std::string>().c_str()));
|
flags.insert(ArbUt::StringView(flagIndex.value().get<std::string>().c_str()));
|
||||||
}
|
}
|
||||||
CreatureLib::Library::SecondaryEffect* effect = nullptr;
|
CreatureLib::Library::SecondaryEffect* effect = nullptr;
|
||||||
auto jsonEffect = val["effect"];
|
auto& jsonEffect = val["effect"];
|
||||||
if (jsonEffect != nullptr) {
|
if (jsonEffect != nullptr) {
|
||||||
auto name = jsonEffect["name"];
|
auto& name = jsonEffect["name"];
|
||||||
auto chanceJson = jsonEffect["chance"];
|
auto& chanceJson = jsonEffect["chance"];
|
||||||
auto parametersJson = jsonEffect["parameters"];
|
auto& parametersJson = jsonEffect["parameters"];
|
||||||
if (name != nullptr) {
|
if (name != nullptr) {
|
||||||
ArbUt::List<CreatureLib::Library::EffectParameter*> parameters;
|
ArbUt::List<CreatureLib::Library::EffectParameter*> parameters;
|
||||||
auto chance = -1.0f;
|
auto chance = -1.0f;
|
||||||
|
|
|
@ -3,10 +3,11 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#define GET(o, objectKey, key) \
|
#define GET(o, objectKey, key) \
|
||||||
auto _##objectKey = o[#objectKey]; \
|
auto& _##objectKey = o[#objectKey]; \
|
||||||
if (_##objectKey.is_null()) { \
|
if (_##objectKey.is_null()) { \
|
||||||
std::cout << "Failed to retrieve key '" << #objectKey << "' for object with key '" << key << "' in file '" \
|
auto errorKeyFunc = [=]() { return key; }; \
|
||||||
<< path << "'\n"; \
|
std::cout << "Failed to retrieve key '" << #objectKey << "' for object with key '" << errorKeyFunc() \
|
||||||
|
<< "' in file '" << path << "'\n"; \
|
||||||
return nullptr; \
|
return nullptr; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,11 +23,11 @@ PkmnLib::Library::SpeciesLibrary* BuildSpecies::BuildLibrary(const std::string&
|
||||||
json j;
|
json j;
|
||||||
fileStream >> j;
|
fileStream >> j;
|
||||||
|
|
||||||
for (json::iterator it = j.begin(); it != j.end(); ++it) {
|
for (const auto& it : j.items()) {
|
||||||
if (it.key().starts_with("$")) {
|
if (it.key().starts_with("$")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
auto val = it.value();
|
auto& val = it.value();
|
||||||
GET(val, id, it.key());
|
GET(val, id, it.key());
|
||||||
GET(val, species, it.key());
|
GET(val, species, it.key());
|
||||||
GET(val, genderRatio, it.key());
|
GET(val, genderRatio, it.key());
|
||||||
|
@ -47,7 +48,7 @@ PkmnLib::Library::SpeciesLibrary* BuildSpecies::BuildLibrary(const std::string&
|
||||||
eggGroups.Append(eg.get<std::string>().c_str());
|
eggGroups.Append(eg.get<std::string>().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
auto defaultForme = _formes["default"];
|
auto& defaultForme = _formes["default"];
|
||||||
if (!defaultForme.is_null()) {
|
if (!defaultForme.is_null()) {
|
||||||
auto forme = BuildForme("default", defaultForme, it.key(), path, types, moveLibrary);
|
auto forme = BuildForme("default", defaultForme, it.key(), path, types, moveLibrary);
|
||||||
species = new PkmnLib::Library::PokemonSpecies(
|
species = new PkmnLib::Library::PokemonSpecies(
|
||||||
|
@ -57,7 +58,7 @@ PkmnLib::Library::SpeciesLibrary* BuildSpecies::BuildLibrary(const std::string&
|
||||||
_baseHappiness.get<uint8_t>(), eggGroups);
|
_baseHappiness.get<uint8_t>(), eggGroups);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (json::iterator formeIt = _formes.begin(); formeIt != _formes.end(); ++formeIt) {
|
for (const auto& formeIt : _formes.items()) {
|
||||||
if (formeIt.key() == "default") {
|
if (formeIt.key() == "default") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -99,15 +100,15 @@ const PkmnLib::Library::PokemonForme* BuildSpecies::BuildForme(const std::string
|
||||||
const std::string& baseKeyName, const std::string& path,
|
const std::string& baseKeyName, const std::string& path,
|
||||||
const CreatureLib::Library::TypeLibrary* typeLibrary,
|
const CreatureLib::Library::TypeLibrary* typeLibrary,
|
||||||
const PkmnLib::Library::MoveLibrary* moveLibrary) {
|
const PkmnLib::Library::MoveLibrary* moveLibrary) {
|
||||||
GET(forme, abilities, baseKeyName << " -> " << name);
|
GET(forme, abilities, baseKeyName + " -> " + name);
|
||||||
GET(forme, hiddenAbilities, baseKeyName << " -> " << name);
|
GET(forme, hiddenAbilities, baseKeyName + " -> " + name);
|
||||||
GET(forme, baseStats, baseKeyName << " -> " << name);
|
GET(forme, baseStats, baseKeyName + " -> " + name);
|
||||||
GET(forme, evReward, baseKeyName << " -> " << name);
|
GET(forme, evReward, baseKeyName + " -> " + name);
|
||||||
GET(forme, types, baseKeyName << " -> " << name);
|
GET(forme, types, baseKeyName + " -> " + name);
|
||||||
GET(forme, height, baseKeyName << " -> " << name);
|
GET(forme, height, baseKeyName + " -> " + name);
|
||||||
GET(forme, weight, baseKeyName << " -> " << name);
|
GET(forme, weight, baseKeyName + " -> " + name);
|
||||||
GET(forme, baseExp, baseKeyName << " -> " << name);
|
GET(forme, baseExp, baseKeyName + " -> " + name);
|
||||||
GET(forme, moves, baseKeyName << " -> " << name);
|
GET(forme, moves, baseKeyName + " -> " + name);
|
||||||
|
|
||||||
auto typeStrings = _types.get<std::vector<std::string>>();
|
auto typeStrings = _types.get<std::vector<std::string>>();
|
||||||
auto types = ArbUt::List<uint8_t>(typeStrings.size());
|
auto types = ArbUt::List<uint8_t>(typeStrings.size());
|
||||||
|
@ -121,15 +122,15 @@ const PkmnLib::Library::PokemonForme* BuildSpecies::BuildForme(const std::string
|
||||||
for (size_t i = 0; i < abilityStrings.size(); i++) {
|
for (size_t i = 0; i < abilityStrings.size(); i++) {
|
||||||
abilities.Append(ArbUt::StringView(abilityStrings[i].c_str()));
|
abilities.Append(ArbUt::StringView(abilityStrings[i].c_str()));
|
||||||
}
|
}
|
||||||
auto hiddenAbilityStrings = _abilities.get<std::vector<std::string>>();
|
auto hiddenAbilityStrings = _hiddenAbilities.get<std::vector<std::string>>();
|
||||||
auto hiddenAbilities = ArbUt::List<ArbUt::StringView>(hiddenAbilityStrings.size());
|
auto hiddenAbilities = ArbUt::List<ArbUt::StringView>(hiddenAbilityStrings.size());
|
||||||
for (size_t i = 0; i < hiddenAbilityStrings.size(); i++) {
|
for (size_t i = 0; i < hiddenAbilityStrings.size(); i++) {
|
||||||
hiddenAbilities.Append(ArbUt::StringView(abilityStrings[i].c_str()));
|
hiddenAbilities.Append(ArbUt::StringView(hiddenAbilityStrings[i].c_str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto moves = new PkmnLib::Library::LearnableMoves(100);
|
auto moves = new PkmnLib::Library::LearnableMoves(100);
|
||||||
auto movesJson = forme["moves"];
|
auto& movesJson = forme["moves"];
|
||||||
auto levelMovesJson = movesJson["levelMoves"];
|
auto& levelMovesJson = movesJson["levelMoves"];
|
||||||
for (auto& levelMoveObj : levelMovesJson) {
|
for (auto& levelMoveObj : levelMovesJson) {
|
||||||
auto levelMoveName = levelMoveObj["name"].get<std::string>();
|
auto levelMoveName = levelMoveObj["name"].get<std::string>();
|
||||||
auto level = levelMoveObj["level"].get<u8>();
|
auto level = levelMoveObj["level"].get<u8>();
|
||||||
|
|
Loading…
Reference in New Issue