|
| 1 | +#ifndef PIXF_SERIALIZATION_HPP |
| 2 | +#define PIXF_SERIALIZATION_HPP |
| 3 | + |
| 4 | +#include <cereal/cereal.hpp> |
| 5 | + |
| 6 | +#define PIXF_SERIALIZE(Type) \ |
| 7 | + template<typename Archive> \ |
| 8 | + void serialize(Archive &archive, Type &obj) { \ |
| 9 | + Serialize(archive, obj); \ |
| 10 | + } |
| 11 | + |
| 12 | +namespace Pixf::Core::Serialization { |
| 13 | + template<typename Archive, typename T> |
| 14 | + void SerializeNvp(Archive &archive, const std::string &name, T &obj) { |
| 15 | + archive(cereal::make_nvp(name, obj)); |
| 16 | + } |
| 17 | + |
| 18 | + template<typename Archive, typename T> |
| 19 | + void Serialize(Archive &archive, T &obj) { |
| 20 | + archive(obj); |
| 21 | + } |
| 22 | +} // namespace Pixf::Core::Serialization |
| 23 | + |
| 24 | +namespace Pixf::Core::Math { |
| 25 | + template<typename Archive, typename T> |
| 26 | + void Serialize(Archive &archive, Vector2<T> &vector) { |
| 27 | + Serialization::SerializeNvp(archive, "x", vector.x); |
| 28 | + Serialization::SerializeNvp(archive, "y", vector.y); |
| 29 | + } |
| 30 | + |
| 31 | + template<typename Archive, typename T> |
| 32 | + void Serialize(Archive &archive, Vector3<T> &vector) { |
| 33 | + Serialization::SerializeNvp(archive, "x", vector.x); |
| 34 | + Serialization::SerializeNvp(archive, "y", vector.y); |
| 35 | + Serialization::SerializeNvp(archive, "z", vector.z); |
| 36 | + } |
| 37 | + |
| 38 | + template<typename Archive, typename T> |
| 39 | + void Serialize(Archive &archive, Vector4<T> &vector) { |
| 40 | + Serialization::SerializeNvp(archive, "x", vector.x); |
| 41 | + Serialization::SerializeNvp(archive, "y", vector.y); |
| 42 | + Serialization::SerializeNvp(archive, "z", vector.z); |
| 43 | + Serialization::SerializeNvp(archive, "w", vector.w); |
| 44 | + } |
| 45 | + |
| 46 | + template<typename Archive, typename T> |
| 47 | + void Serialize(Archive &archive, Color3<T> &color) { |
| 48 | + Serialization::SerializeNvp(archive, "r", color.r); |
| 49 | + Serialization::SerializeNvp(archive, "g", color.g); |
| 50 | + Serialization::SerializeNvp(archive, "b", color.b); |
| 51 | + } |
| 52 | + |
| 53 | + template<typename Archive, typename T> |
| 54 | + void Serialize(Archive &archive, Color4<T> &color) { |
| 55 | + Serialization::SerializeNvp(archive, "r", color.r); |
| 56 | + Serialization::SerializeNvp(archive, "g", color.g); |
| 57 | + Serialization::SerializeNvp(archive, "b", color.b); |
| 58 | + Serialization::SerializeNvp(archive, "a", color.a); |
| 59 | + } |
| 60 | + |
| 61 | + template<typename Archive> |
| 62 | + void Serialize(Archive &archive, Quaternion &quat) { |
| 63 | + Serialization::SerializeNvp(archive, "x", quat.x); |
| 64 | + Serialization::SerializeNvp(archive, "y", quat.y); |
| 65 | + Serialization::SerializeNvp(archive, "z", quat.z); |
| 66 | + Serialization::SerializeNvp(archive, "w", quat.w); |
| 67 | + } |
| 68 | + |
| 69 | + PIXF_SERIALIZE(Vector2f) |
| 70 | + PIXF_SERIALIZE(Vector3f) |
| 71 | + PIXF_SERIALIZE(Vector4f) |
| 72 | + |
| 73 | + PIXF_SERIALIZE(Vector2d) |
| 74 | + PIXF_SERIALIZE(Vector3d) |
| 75 | + PIXF_SERIALIZE(Vector4d) |
| 76 | + |
| 77 | + PIXF_SERIALIZE(Vector2i) |
| 78 | + PIXF_SERIALIZE(Vector3i) |
| 79 | + PIXF_SERIALIZE(Vector4i) |
| 80 | + |
| 81 | + PIXF_SERIALIZE(Vector2u) |
| 82 | + PIXF_SERIALIZE(Vector3u) |
| 83 | + PIXF_SERIALIZE(Vector4u) |
| 84 | + |
| 85 | + PIXF_SERIALIZE(Color3u8) |
| 86 | + PIXF_SERIALIZE(Color4u8) |
| 87 | + |
| 88 | + PIXF_SERIALIZE(Color3u16) |
| 89 | + PIXF_SERIALIZE(Color4u16) |
| 90 | + |
| 91 | + PIXF_SERIALIZE(Quaternion) |
| 92 | +} // namespace Pixf::Core::Math |
| 93 | + |
| 94 | +namespace Pixf::Core::Uuid { |
| 95 | + template<typename Archive> |
| 96 | + void Serialize(Archive &archive, Uuid &uuid) { |
| 97 | + std::string str = uuid.ToString(); |
| 98 | + Serialization::SerializeNvp(archive, "value", str); |
| 99 | + uuid = Uuid::FromString(str.c_str()).value(); |
| 100 | + } |
| 101 | + |
| 102 | + PIXF_SERIALIZE(Uuid) |
| 103 | +} // namespace Pixf::Core::Uuid |
| 104 | +#endif // PIXF_SERIALIZATION_HPP |
0 commit comments