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:
parent
19a6eee044
commit
f434b753ff
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue