diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2022-11-22 15:06:39 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-11-22 15:06:39 +0100 |
commit | a917bb7c28b383c3c684bf75732188bfff0060bb (patch) | |
tree | 4b59f92cab7126a2e1a3b00c05ada385004c3657 | |
parent | 9bd0075cb57a0e08fff45a2b9967de287533aa44 (diff) |
fit local-coords in a single byte
-rw-r--r-- | serialize/tile.cpp | 11 | ||||
-rw-r--r-- | src/local-coords.hpp | 2 |
2 files changed, 8 insertions, 5 deletions
diff --git a/serialize/tile.cpp b/serialize/tile.cpp index abce91e1..8b756772 100644 --- a/serialize/tile.cpp +++ b/serialize/tile.cpp @@ -11,7 +11,11 @@ NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(tile_image_proto, atlas, variant) inline void to_json(nlohmann::json& j, const tile_image_ref& val) { j = tile_image_proto(val); } inline void from_json(const nlohmann::json& j, tile_image_ref& val) { val = tile_image_proto(j); } -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(local_coords, x, y) +struct local_coords_ final { + std::uint8_t x, y; +}; + +NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(local_coords_, x, y) NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(chunk_coords, x, y) struct global_coords_ final { @@ -30,8 +34,8 @@ namespace nlohmann { void adl_serializer<tile_image_ref>::to_json(json& j, const tile_image_ref& val) { using nlohmann::to_json; if (val.atlas) to_json(j, val); else j = nullptr; } void adl_serializer<tile_image_ref>::from_json(const json& j, tile_image_ref& val) { using nlohmann::from_json; if (j.is_null()) val = {}; else from_json(j, val); } -void adl_serializer<local_coords>::to_json(json& j, const local_coords& val) { using nlohmann::to_json; to_json(j, val); } -void adl_serializer<local_coords>::from_json(const json& j, local_coords& val) { using nlohmann::from_json; from_json(j, val); } +void adl_serializer<local_coords>::to_json(json& j, const local_coords& val) { using nlohmann::to_json; to_json(j, local_coords_{val.x, val.y}); } +void adl_serializer<local_coords>::from_json(const json& j, local_coords& val) { using nlohmann::from_json; local_coords_ proxy{}; from_json(j, proxy); val = {proxy.x, proxy.y}; } void adl_serializer<chunk_coords>::to_json(json& j, const chunk_coords& val) { using nlohmann::to_json; to_json(j, val); } void adl_serializer<chunk_coords>::from_json(const json& j, chunk_coords& val) { using nlohmann::from_json; from_json(j, val); } @@ -41,4 +45,3 @@ void adl_serializer<global_coords>::from_json(const json& j, global_coords& val) } // namespace nlohmann - diff --git a/src/local-coords.hpp b/src/local-coords.hpp index 949a90e0..30fb3617 100644 --- a/src/local-coords.hpp +++ b/src/local-coords.hpp @@ -6,7 +6,7 @@ namespace floormat { struct local_coords final { - std::uint8_t x = 0, y = 0; + std::uint8_t x : 4 = 0, y : 4 = 0; explicit constexpr local_coords(std::size_t idx) noexcept; constexpr local_coords() noexcept = default; template<std::integral T> requires (sizeof(T) <= sizeof(std::size_t)) |