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
This commit is contained in:
Lynix 2016-09-25 01:48:57 +02:00
parent 19a6eee044
commit f434b753ff
2 changed files with 39 additions and 2 deletions

View File

@ -11,6 +11,7 @@
#include <Nazara/Core/Enums.hpp>
#include <Nazara/Core/SerializationContext.hpp>
#include <functional>
#include <string>
#include <tuple>
#include <type_traits>
@ -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<typename T>
std::enable_if_t<std::is_arithmetic<T>::value, bool> Serialize(SerializationContext& context, T value);
inline bool Unserialize(SerializationContext& context, bool* value);
inline bool Unserialize(SerializationContext& context, std::string* value);
template<typename T>
std::enable_if_t<std::is_arithmetic<T>::value, bool> Unserialize(SerializationContext& context, T* value);

View File

@ -6,6 +6,7 @@
// Merci à Ryan "FullMetal Alchemist" Lahfa
// Merci aussi à Freedom de siteduzero.com
#include <Nazara/Core/Algorithm.hpp>
#include <Nazara/Core/AbstractHash.hpp>
#include <Nazara/Core/ByteArray.hpp>
#include <Nazara/Core/Error.hpp>
@ -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<UInt32>(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