From f434b753ff920ee4fd1b9165439cc3f36b2cae4a Mon Sep 17 00:00:00 2001 From: Lynix Date: Sun, 25 Sep 2016 01:48:57 +0200 Subject: [PATCH] Core/Algorithm: Add serialize/unserialize overload for std::string Former-commit-id: c4aa07b3ab8fcac85ac290ae5168bd841ce16dfd [formerly ee0f4fa822ec65aa72d43c9ab370402976713206] [formerly 9ec403e92a60b8ca97d7bc3e579ca5983089ba76 [formerly d7e17cc3ff72d43e23f11a70d785efcff3f4cba2]] Former-commit-id: 190337087a987ca5ef1ac9789f04e3b9f2fc47af [formerly fc6bed4363a90b165db7fde093a6df37eeb9f45a] Former-commit-id: 28d6dfe4b4217e91a7283e0fbe45d20ac982f79c --- include/Nazara/Core/Algorithm.hpp | 3 +++ include/Nazara/Core/Algorithm.inl | 38 +++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) 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