diff --git a/include/Nazara/Core/Algorithm.hpp b/include/Nazara/Core/Algorithm.hpp index b8a3206af..be25f4773 100644 --- a/include/Nazara/Core/Algorithm.hpp +++ b/include/Nazara/Core/Algorithm.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -38,11 +39,13 @@ namespace Nz struct TypeTag {}; inline bool Serialize(SerializationContext& context, bool value); + inline bool Serialize(SerializationContext& context, const std::string& value); template std::enable_if_t::value, bool> Serialize(SerializationContext& context, T value); inline bool Unserialize(SerializationContext& context, bool* value); + inline bool Unserialize(SerializationContext& context, std::string* value); template std::enable_if_t::value, bool> Unserialize(SerializationContext& context, T* value); diff --git a/include/Nazara/Core/Algorithm.inl b/include/Nazara/Core/Algorithm.inl index 0cadd1631..dc770eae6 100644 --- a/include/Nazara/Core/Algorithm.inl +++ b/include/Nazara/Core/Algorithm.inl @@ -6,6 +6,7 @@ // Merci à Ryan "FullMetal Alchemist" Lahfa // Merci aussi à Freedom de siteduzero.com +#include #include #include #include @@ -192,7 +193,7 @@ namespace Nz /*! * \ingroup core * \brief Serializes a boolean - * \return true if serialization succedeed + * \return true if serialization succeeded * * \param context Context for the serialization * \param value Boolean to serialize @@ -216,10 +217,26 @@ namespace Nz return true; } + /*! + * \ingroup core + * \brief Serializes a std::string + * \return true if successful + * + * \param context Context for the serialization + * \param value String to serialize + */ + bool Serialize(SerializationContext& context, const std::string& value) + { + if (!Serialize(context, value.size())) + return false; + + return context.stream->Write(value.data(), value.size()) == value.size(); + } + /*! * \ingroup core * \brief Serializes an arithmetic type - * \return true if serialization succedeed + * \return true if serialization succeeded * * \param context Context for the serialization * \param value Arithmetic type to serialize @@ -266,6 +283,23 @@ namespace Nz return true; } + /*! + * \brief Unserializes a string + * \return true if successful + * + * \param context Context of unserialization + * \param string std::string to unserialize + */ + bool Unserialize(SerializationContext& context, std::string* string) + { + UInt32 size; + if (!Unserialize(context, &size)) + return false; + + string->resize(size); + return context.stream->Read(&string[0], size) == size; + } + /*! * \ingroup core * \brief Unserializes an arithmetic type