diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2022-11-10 21:27:08 +0100 |
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-11-10 22:17:43 +0100 |
| commit | ee1a527191db646850ee919b8fe3a6f8cb6cd693 (patch) | |
| tree | a1ff23b8c0f93d689d51d3837caefaa72b9480cd /serialize | |
| parent | 0e23ba9e5a565e34fee0f024e29ce162f420ec22 (diff) | |
get rid of std::string
Diffstat (limited to 'serialize')
| -rw-r--r-- | serialize/anim.cpp | 1 | ||||
| -rw-r--r-- | serialize/anim.hpp | 6 | ||||
| -rw-r--r-- | serialize/corrade-string.cpp | 31 | ||||
| -rw-r--r-- | serialize/corrade-string.hpp | 18 | ||||
| -rw-r--r-- | serialize/tile-atlas.cpp | 5 |
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); } |
