From ee1a527191db646850ee919b8fe3a6f8cb6cd693 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 10 Nov 2022 21:27:08 +0100 Subject: get rid of std::string --- serialize/anim.cpp | 1 + serialize/anim.hpp | 6 +++--- serialize/corrade-string.cpp | 31 +++++++++++++++++++++++++++++++ serialize/corrade-string.hpp | 18 ++++++++++++++++++ serialize/tile-atlas.cpp | 5 ++--- 5 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 serialize/corrade-string.cpp create mode 100644 serialize/corrade-string.hpp (limited to 'serialize') 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 -#include +#include #include #include #include @@ -22,7 +22,7 @@ enum class anim_direction : unsigned char struct anim_group final { - std::string name; + String name; std::vector 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 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 +#include + +using namespace floormat; + +namespace nlohmann { + +void adl_serializer::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::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::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 +#include + +namespace nlohmann { + +template<> +struct adl_serializer { + 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 { + 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 @@ -10,8 +11,6 @@ using namespace floormat; namespace nlohmann { -using proxy_atlas = std::tuple; - void adl_serializer>::to_json(json& j, const std::shared_ptr& x) { using nlohmann::to_json; @@ -27,7 +26,7 @@ void adl_serializer>::from_json(const json& j, std:: x = nullptr; else { - proxy_atlas proxy = j; + std::tuple proxy = j; const auto& [name, num_tiles] = proxy; x = loader.tile_atlas(name, num_tiles); } -- cgit v1.2.3