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/Enums.hpp>
|
||||||
#include <Nazara/Core/SerializationContext.hpp>
|
#include <Nazara/Core/SerializationContext.hpp>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include <string>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
|
|
@ -38,11 +39,13 @@ namespace Nz
|
||||||
struct TypeTag {};
|
struct TypeTag {};
|
||||||
|
|
||||||
inline bool Serialize(SerializationContext& context, bool value);
|
inline bool Serialize(SerializationContext& context, bool value);
|
||||||
|
inline bool Serialize(SerializationContext& context, const std::string& value);
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
std::enable_if_t<std::is_arithmetic<T>::value, bool> Serialize(SerializationContext& context, T value);
|
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, bool* value);
|
||||||
|
inline bool Unserialize(SerializationContext& context, std::string* value);
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
std::enable_if_t<std::is_arithmetic<T>::value, bool> Unserialize(SerializationContext& context, T* value);
|
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 à Ryan "FullMetal Alchemist" Lahfa
|
||||||
// Merci aussi à Freedom de siteduzero.com
|
// Merci aussi à Freedom de siteduzero.com
|
||||||
|
|
||||||
|
#include <Nazara/Core/Algorithm.hpp>
|
||||||
#include <Nazara/Core/AbstractHash.hpp>
|
#include <Nazara/Core/AbstractHash.hpp>
|
||||||
#include <Nazara/Core/ByteArray.hpp>
|
#include <Nazara/Core/ByteArray.hpp>
|
||||||
#include <Nazara/Core/Error.hpp>
|
#include <Nazara/Core/Error.hpp>
|
||||||
|
|
@ -192,7 +193,7 @@ namespace Nz
|
||||||
/*!
|
/*!
|
||||||
* \ingroup core
|
* \ingroup core
|
||||||
* \brief Serializes a boolean
|
* \brief Serializes a boolean
|
||||||
* \return true if serialization succedeed
|
* \return true if serialization succeeded
|
||||||
*
|
*
|
||||||
* \param context Context for the serialization
|
* \param context Context for the serialization
|
||||||
* \param value Boolean to serialize
|
* \param value Boolean to serialize
|
||||||
|
|
@ -216,10 +217,26 @@ namespace Nz
|
||||||
return true;
|
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
|
* \ingroup core
|
||||||
* \brief Serializes an arithmetic type
|
* \brief Serializes an arithmetic type
|
||||||
* \return true if serialization succedeed
|
* \return true if serialization succeeded
|
||||||
*
|
*
|
||||||
* \param context Context for the serialization
|
* \param context Context for the serialization
|
||||||
* \param value Arithmetic type to serialize
|
* \param value Arithmetic type to serialize
|
||||||
|
|
@ -266,6 +283,23 @@ namespace Nz
|
||||||
return true;
|
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
|
* \ingroup core
|
||||||
* \brief Unserializes an arithmetic type
|
* \brief Unserializes an arithmetic type
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue