summaryrefslogtreecommitdiffhomepage
path: root/serialize/magnum-vector.hpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2023-11-23 18:31:03 +0100
committerStanislaw Halik <sthalik@misaki.pl>2023-11-23 19:05:52 +0100
commite7d672ec1578319bad8e944e37c91fbcb8371e75 (patch)
treea6ac6b304ebcf5ada8323b755da68f7874da713b /serialize/magnum-vector.hpp
parent710c2e9df4683ded59048a48a1d21dba9dd86e17 (diff)
use explicit instantiation for vector serializers
Diffstat (limited to 'serialize/magnum-vector.hpp')
-rw-r--r--serialize/magnum-vector.hpp38
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