summaryrefslogtreecommitdiffstats
path: root/src/WorldStorage/StatisticsSerializer.cpp
diff options
context:
space:
mode:
authorTiger Wang <ziwei.tiger@outlook.com>2021-07-28 23:08:07 +0200
committerTiger Wang <ziwei.tiger@outlook.com>2021-07-31 13:11:29 +0200
commitc6de5e9bc58288ee1bf88436ab2355282e7e7e43 (patch)
treecbc198b6cedc3d54e762e750ff099c488ff082fd /src/WorldStorage/StatisticsSerializer.cpp
parentIt is time to remove the statistics upgrade map (diff)
downloadcuberite-c6de5e9bc58288ee1bf88436ab2355282e7e7e43.tar
cuberite-c6de5e9bc58288ee1bf88436ab2355282e7e7e43.tar.gz
cuberite-c6de5e9bc58288ee1bf88436ab2355282e7e7e43.tar.bz2
cuberite-c6de5e9bc58288ee1bf88436ab2355282e7e7e43.tar.lz
cuberite-c6de5e9bc58288ee1bf88436ab2355282e7e7e43.tar.xz
cuberite-c6de5e9bc58288ee1bf88436ab2355282e7e7e43.tar.zst
cuberite-c6de5e9bc58288ee1bf88436ab2355282e7e7e43.zip
Diffstat (limited to 'src/WorldStorage/StatisticsSerializer.cpp')
-rw-r--r--src/WorldStorage/StatisticsSerializer.cpp113
1 files changed, 55 insertions, 58 deletions
diff --git a/src/WorldStorage/StatisticsSerializer.cpp b/src/WorldStorage/StatisticsSerializer.cpp
index 70abd711b..df7aa9895 100644
--- a/src/WorldStorage/StatisticsSerializer.cpp
+++ b/src/WorldStorage/StatisticsSerializer.cpp
@@ -13,96 +13,93 @@
-namespace StatisticsSerializer
+static auto MakeStatisticsDirectory(const std::string & WorldPath, std::string && FileName)
{
- static auto MakeStatisticsDirectory(const std::string & WorldPath, std::string && FileName)
- {
- // Even though stats are shared between worlds, they are (usually) saved
- // inside the folder of the default world.
+ // Even though stats are shared between worlds, they are (usually) saved
+ // inside the folder of the default world.
- // Path to the world's statistics folder.
- const auto Path = WorldPath + cFile::GetPathSeparator() + "stats";
+ // Path to the world's statistics folder.
+ const auto Path = WorldPath + cFile::GetPathSeparator() + "stats";
- // Ensure that the directory exists.
- cFile::CreateFolder(Path);
+ // Ensure that the directory exists.
+ cFile::CreateFolder(Path);
- return Path + cFile::GetPathSeparator() + std::move(FileName) + ".json";
- }
+ return Path + cFile::GetPathSeparator() + std::move(FileName) + ".json";
+}
- static void SaveStatToJSON(const StatisticsManager & Manager, Json::Value & a_Out)
+static void SaveStatToJSON(const StatisticsManager & Manager, Json::Value & a_Out)
+{
+ if (Manager.Custom.empty())
{
- if (Manager.Custom.empty())
- {
- // Avoid saving "custom": null to disk:
- return;
- }
+ // Avoid saving "custom": null to disk:
+ return;
+ }
- auto & Custom = a_Out["custom"];
- for (const auto & [Statistic, Value] : Manager.Custom)
- {
- Custom[NamespaceSerializer::From(Statistic).data()] = Value;
- }
+ auto & Custom = a_Out["custom"];
+ for (const auto & [Statistic, Value] : Manager.Custom)
+ {
+ Custom[NamespaceSerializer::From(Statistic).data()] = Value;
}
+}
- static void LoadCustomStatFromJSON(StatisticsManager & Manager, const Json::Value & a_In)
+static void LoadCustomStatFromJSON(StatisticsManager & Manager, const Json::Value & a_In)
+{
+ for (auto it = a_In.begin(); it != a_In.end(); ++it)
{
- for (auto it = a_In.begin(); it != a_In.end(); ++it)
+ const auto & Key = it.key().asString();
+ const auto StatInfo = NamespaceSerializer::SplitNamespacedID(Key);
+ if (StatInfo.first == NamespaceSerializer::Namespace::Unknown)
{
- const auto & Key = it.key().asString();
- const auto StatInfo = NamespaceSerializer::SplitNamespacedID(Key);
- if (StatInfo.first == NamespaceSerializer::Namespace::Unknown)
- {
- // Ignore non-Vanilla, non-Cuberite namespaces for now:
- continue;
- }
-
- const auto & StatName = StatInfo.second;
- try
- {
- Manager.Custom[NamespaceSerializer::ToCustomStatistic(StatName)] = it->asUInt();
- }
- catch (const std::out_of_range &)
- {
- FLOGWARNING("Invalid statistic type \"{}\"", StatName);
- }
- catch (const Json::LogicError &)
- {
- FLOGWARNING("Invalid statistic value for type \"{}\"", StatName);
- }
+ // Ignore non-Vanilla, non-Cuberite namespaces for now:
+ continue;
+ }
+
+ const auto & StatName = StatInfo.second;
+ try
+ {
+ Manager.Custom[NamespaceSerializer::ToCustomStatistic(StatName)] = it->asUInt();
+ }
+ catch (const std::out_of_range &)
+ {
+ FLOGWARNING("Invalid statistic type \"{}\"", StatName);
+ }
+ catch (const Json::LogicError &)
+ {
+ FLOGWARNING("Invalid statistic value for type \"{}\"", StatName);
}
}
+}
- void Load(StatisticsManager & Manager, const std::string & WorldPath, std::string && FileName)
- {
- Json::Value Root;
- InputFileStream(MakeStatisticsDirectory(WorldPath, std::move(FileName))) >> Root;
+void StatisticsSerializer::Load(StatisticsManager & Manager, const std::string & WorldPath, std::string && FileName)
+{
+ Json::Value Root;
+ InputFileStream(MakeStatisticsDirectory(WorldPath, std::move(FileName))) >> Root;
- LoadCustomStatFromJSON(Manager, Root["stats"]["custom"]);
- }
+ LoadCustomStatFromJSON(Manager, Root["stats"]["custom"]);
+}
- void Save(const StatisticsManager & Manager, const std::string & WorldPath, std::string && FileName)
- {
- Json::Value Root;
+void StatisticsSerializer::Save(const StatisticsManager & Manager, const std::string & WorldPath, std::string && FileName)
+{
+ Json::Value Root;
- SaveStatToJSON(Manager, Root["stats"]);
- Root["DataVersion"] = NamespaceSerializer::DataVersion();
+ SaveStatToJSON(Manager, Root["stats"]);
+ Root["DataVersion"] = NamespaceSerializer::DataVersion();
- OutputFileStream(MakeStatisticsDirectory(WorldPath, std::move(FileName))) << Root;
- }
+ OutputFileStream(MakeStatisticsDirectory(WorldPath, std::move(FileName))) << Root;
}