diff --git a/include/Nazara/Core/Serialization.hpp b/include/Nazara/Core/Serialization.hpp index ab8be9b38..e46b74460 100644 --- a/include/Nazara/Core/Serialization.hpp +++ b/include/Nazara/Core/Serialization.hpp @@ -76,6 +76,7 @@ namespace Nz inline bool Serialize(SerializationContext& context, std::string_view name, const bool& value, TypeTag); inline bool Serialize(SerializationContext& context, std::string_view name, const std::string& value, TypeTag); + inline bool Serialize(SerializationContext& context, std::string_view name, const std::filesystem::path& value, TypeTag); template bool Serialize(SerializationContext& context, std::string_view name, const T (&values)[N]); @@ -95,6 +96,9 @@ namespace Nz template inline bool Serialize(SerializationContext& context, std::string_view name, const T& value, TypeTag); + template + inline bool Serialize(SerializationContext& context, std::string_view name, const Flags& flags, TypeTag>); + template inline bool Unserialize(SerializationContext&, T*, TypeTag) { return false; } @@ -105,11 +109,9 @@ namespace Nz template bool Unserialize(SerializationContext& context, std::string_view name, T* value, TypeTag); - template <> inline bool Unserialize(SerializationContext& context, std::string_view name, bool* value, TypeTag); - - template <> inline bool Unserialize(SerializationContext& context, std::string_view name, std::string* value, TypeTag); + inline bool Unserialize(SerializationContext& context, std::string_view name, std::filesystem::path* value, TypeTag); template bool Unserialize(SerializationContext& context, std::string_view name, T (*values)[N]); @@ -128,6 +130,9 @@ namespace Nz template bool Unserialize(SerializationContext& context, std::string_view name, T* value, TypeTag); + + template + inline bool Unserialize(SerializationContext& context, std::string_view name, Flags* flags, TypeTag>); } #include diff --git a/include/Nazara/Core/Serialization.inl b/include/Nazara/Core/Serialization.inl index b7fd27b69..e39860449 100644 --- a/include/Nazara/Core/Serialization.inl +++ b/include/Nazara/Core/Serialization.inl @@ -52,6 +52,12 @@ namespace Nz return context.Write(name, value); } + inline bool Serialize(SerializationContext& context, std::string_view name, const std::filesystem::path& value, TypeTag) + { + std::string str = value.string(); + return context.Write(name, str); + } + template bool Serialize(SerializationContext& context, std::string_view name, const T(&values)[N]) { @@ -187,6 +193,16 @@ namespace Nz return context.Read(name, string); } + inline bool Unserialize(SerializationContext& context, std::string_view name, std::filesystem::path* value, TypeTag) + { + std::string str; + if (!context.Read(name, &str)) + return false; + + *value = str; + return true; + } + template bool Unserialize(SerializationContext& context, std::string_view name, T(*values)[N]) { @@ -292,5 +308,19 @@ namespace Nz return false; } + template + inline bool Serialize(SerializationContext& context, std::string_view name, const Flags& flags, TypeTag>) + { + return Serialize(context, name, static_cast::BitField>(flags), TypeTag::BitField>>()); + } + + template + inline bool Unserialize(SerializationContext& context, std::string_view name, Flags* flags, TypeTag>) + { + typename Flags::BitField v; + if (Unserialize(context, name, &v, TypeTag::BitField>>())) + *flags = v; + return true; + } }