diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2023-11-23 18:31:03 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-11-23 19:05:52 +0100 |
commit | e7d672ec1578319bad8e944e37c91fbcb8371e75 (patch) | |
tree | a6ac6b304ebcf5ada8323b755da68f7874da713b /serialize/magnum-vector.hpp | |
parent | 710c2e9df4683ded59048a48a1d21dba9dd86e17 (diff) |
use explicit instantiation for vector serializers
Diffstat (limited to 'serialize/magnum-vector.hpp')
-rw-r--r-- | serialize/magnum-vector.hpp | 38 |
1 files changed, 7 insertions, 31 deletions
diff --git a/serialize/magnum-vector.hpp b/serialize/magnum-vector.hpp index ddd09228..ac6206d6 100644 --- a/serialize/magnum-vector.hpp +++ b/serialize/magnum-vector.hpp @@ -1,41 +1,17 @@ #pragma once -#include "magnum-vector2i.hpp" -#include <Magnum/Math/Vector.h> -#include <nlohmann/json.hpp> +#include <nlohmann/json_fwd.hpp> namespace nlohmann { -template<size_t N, typename T> -struct adl_serializer<Magnum::Math::Vector<N, T>> { - using vec = Magnum::Math::Vector<N, T>; - static void to_json(json& j, const vec& val); - static void from_json(const json& j, vec& val); -}; - -template <size_t N, typename T> -void adl_serializer<Magnum::Math::Vector<N, T>>::to_json(json& j, const vec& val) +template<floormat::size_t N, typename T> +struct adl_serializer<Magnum::Math::Vector<N, T>> { - std::array<T, N> array{}; - for (auto i = 0uz; i < N; i++) - array[i] = val[i]; - using nlohmann::to_json; - to_json(j, array); -} - -template <size_t N, typename T> -void adl_serializer<Magnum::Math::Vector<N, T>>::from_json(const json& j, vec& val) -{ - std::array<T, N> array{}; - using nlohmann::from_json; - from_json(j, array); - for (auto i = 0uz; i < N; i++) - val[i] = array[i]; -} + static void to_json(json& j, Magnum::Math::Vector<N, T> val); + static void from_json(const json& j, Magnum::Math::Vector<N, T>& val); +}; -template<typename T> requires (!std::is_integral_v<T>) struct adl_serializer<Magnum::Math::Vector2<T>> : adl_serializer<Magnum::Math::Vector<2, T>> {}; +template<typename T> struct adl_serializer<Magnum::Math::Vector2<T>> : adl_serializer<Magnum::Math::Vector<2, T>> {}; template<typename T> struct adl_serializer<Magnum::Math::Vector3<T>> : adl_serializer<Magnum::Math::Vector<3, T>> {}; template<typename T> struct adl_serializer<Magnum::Math::Vector4<T>> : adl_serializer<Magnum::Math::Vector<4, T>> {}; -template<typename T> struct adl_serializer<Magnum::Math::Color3<T>> : adl_serializer<Magnum::Math::Vector<3, T>> {}; -template<typename T> struct adl_serializer<Magnum::Math::Color4<T>> : adl_serializer<Magnum::Math::Vector<4, T>> {}; } // namespace nlohmann |