summaryrefslogtreecommitdiffhomepage
path: root/serialize
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2022-11-10 21:27:08 +0100
committerStanislaw Halik <sthalik@misaki.pl>2022-11-10 22:17:43 +0100
commitee1a527191db646850ee919b8fe3a6f8cb6cd693 (patch)
treea1ff23b8c0f93d689d51d3837caefaa72b9480cd /serialize
parent0e23ba9e5a565e34fee0f024e29ce162f420ec22 (diff)
get rid of std::string
Diffstat (limited to 'serialize')
-rw-r--r--serialize/anim.cpp1
-rw-r--r--serialize/anim.hpp6
-rw-r--r--serialize/corrade-string.cpp31
-rw-r--r--serialize/corrade-string.hpp18
-rw-r--r--serialize/tile-atlas.cpp5
5 files changed, 55 insertions, 6 deletions
diff --git a/serialize/anim.cpp b/serialize/anim.cpp
index 79608de0..b6882f1d 100644
--- a/serialize/anim.cpp
+++ b/serialize/anim.cpp
@@ -1,4 +1,5 @@
#include "serialize/magnum-vector2i.hpp"
+#include "serialize/corrade-string.hpp"
#include "serialize/anim.hpp"
namespace floormat::Serialize {
diff --git a/serialize/anim.hpp b/serialize/anim.hpp
index fa6b6d22..9d6db66c 100644
--- a/serialize/anim.hpp
+++ b/serialize/anim.hpp
@@ -1,7 +1,7 @@
#pragma once
#include <vector>
-#include <string>
+#include <Corrade/Containers/String.h>
#include <Magnum/Magnum.h>
#include <Magnum/Math/Vector2.h>
#include <nlohmann/json_fwd.hpp>
@@ -22,7 +22,7 @@ enum class anim_direction : unsigned char
struct anim_group final
{
- std::string name;
+ String name;
std::vector<anim_frame> frames;
Vector2ui ground;
};
@@ -31,7 +31,7 @@ struct anim final
{
static constexpr int default_fps = 24;
- std::string object_name, anim_name;
+ String object_name, anim_name;
std::vector<anim_group> groups;
Vector2ui pixel_size;
std::size_t nframes = 0, width = 0, height = 0, fps = default_fps, actionframe = 0;
diff --git a/serialize/corrade-string.cpp b/serialize/corrade-string.cpp
new file mode 100644
index 00000000..16ae23e1
--- /dev/null
+++ b/serialize/corrade-string.cpp
@@ -0,0 +1,31 @@
+#include "corrade-string.hpp"
+#include <nlohmann/json.hpp>
+#include <string_view>
+
+using namespace floormat;
+
+namespace nlohmann {
+
+void adl_serializer<String>::to_json(json& j, const String& val)
+{
+ std::string_view s{val.data(), val.size()};
+ using nlohmann::to_json;
+ to_json(j, s);
+}
+
+void adl_serializer<String>::from_json(const json& j, String& val)
+{
+ using nlohmann::from_json;
+ std::string_view s;
+ from_json(j, s);
+ val = String{s.data(), s.size()};
+}
+
+void adl_serializer<StringView>::to_json(json& j, StringView val)
+{
+ std::string_view s{val.data(), val.size()};
+ using nlohmann::to_json;
+ to_json(j, s);
+}
+
+} // namespace nlohmann
diff --git a/serialize/corrade-string.hpp b/serialize/corrade-string.hpp
new file mode 100644
index 00000000..81922367
--- /dev/null
+++ b/serialize/corrade-string.hpp
@@ -0,0 +1,18 @@
+#pragma once
+#include <Corrade/Containers/String.h>
+#include <nlohmann/json_fwd.hpp>
+
+namespace nlohmann {
+
+template<>
+struct adl_serializer<Corrade::Containers::String> {
+ static void to_json(json& j, const Corrade::Containers::String& val);
+ static void from_json(const json& j, Corrade::Containers::String& val);
+};
+
+template<>
+struct adl_serializer<Corrade::Containers::StringView> {
+ static void to_json(json& j, Corrade::Containers::StringView val);
+};
+
+} // namespace nlohmann
diff --git a/serialize/tile-atlas.cpp b/serialize/tile-atlas.cpp
index 8caaedd3..451fb48c 100644
--- a/serialize/tile-atlas.cpp
+++ b/serialize/tile-atlas.cpp
@@ -1,5 +1,6 @@
#include "src/tile-atlas.hpp"
#include "serialize/tile-atlas.hpp"
+#include "serialize/corrade-string.hpp"
#include "serialize/magnum-vector2i.hpp"
#include "loader.hpp"
#include <tuple>
@@ -10,8 +11,6 @@ using namespace floormat;
namespace nlohmann {
-using proxy_atlas = std::tuple<std::string, Vector2ub>;
-
void adl_serializer<std::shared_ptr<tile_atlas>>::to_json(json& j, const std::shared_ptr<const tile_atlas>& x)
{
using nlohmann::to_json;
@@ -27,7 +26,7 @@ void adl_serializer<std::shared_ptr<tile_atlas>>::from_json(const json& j, std::
x = nullptr;
else
{
- proxy_atlas proxy = j;
+ std::tuple<String, Vector2ub> proxy = j;
const auto& [name, num_tiles] = proxy;
x = loader.tile_atlas(name, num_tiles);
}