21 #ifndef GF_SERIALIZATION_OPS_H 22 #define GF_SERIALIZATION_OPS_H 30 #include <type_traits> 31 #include <unordered_map> 32 #include <unordered_set> 35 #include "BufferRef.h" 36 #include "Portability.h" 37 #include "Serialization.h" 40 #ifndef DOXYGEN_SHOULD_SKIP_THIS 48 GF_API Serializer& operator|(Serializer& ar,
bool data);
54 GF_API Serializer& operator|(Serializer& ar,
char data);
60 GF_API Serializer& operator|(Serializer& ar, uint8_t data);
66 GF_API Serializer& operator|(Serializer& ar, uint16_t data);
72 GF_API Serializer& operator|(Serializer& ar, uint32_t data);
78 GF_API Serializer& operator|(Serializer& ar, uint64_t data);
84 GF_API Serializer& operator|(Serializer& ar, int8_t data);
90 GF_API Serializer& operator|(Serializer& ar, int16_t data);
96 GF_API Serializer& operator|(Serializer& ar, int32_t data);
102 GF_API Serializer& operator|(Serializer& ar, int64_t data);
108 template<typename T, typename E = typename std::enable_if<std::is_enum<T>::value,
T>::type>
111 using U =
typename std::underlying_type<T>::type;
112 return ar |
static_cast<U>(data);
143 template<
typename T, std::
size_t N>
148 for (
auto& item :
array) {
149 ar |
const_cast<T&
>(item);
164 for (
auto& item : array) {
165 ar |
const_cast<T&
>(item);
175 template<
typename T, std::
size_t N>
180 for (
auto& item : array) {
181 ar |
const_cast<T&
>(item);
196 for (
auto& item :
set) {
197 ar |
const_cast<T&
>(item);
212 for (
auto& item :
set) {
213 ar |
const_cast<T&
>(item);
223 template<
typename K,
typename V>
228 for (
auto& item : map) {
229 ar |
const_cast<K&
>(item.first) | const_cast<V&>(item.second);
239 template<
typename K,
typename V>
244 for (
auto& item : map) {
245 ar |
const_cast<K&
>(item.first) | const_cast<V&>(item.second);
317 template<typename T, typename E = typename std::enable_if<std::is_enum<T>::value,
T>::type>
320 using U =
typename std::underlying_type<T>::type;
323 data =
static_cast<T>(underlying);
368 for (
auto& item : array) {
379 template<
typename T, std::
size_t N>
389 template<
typename T, std::
size_t N>
410 for (std::size_t i = 0; i < size; ++i) {
413 array.emplace_back(std::move(item));
434 for (std::size_t i = 0; i < size; ++i) {
437 set.emplace(std::move(item));
458 for (std::size_t i = 0; i < size; ++i) {
461 set.emplace(std::move(item));
471 template<
typename K,
typename V>
482 for (std::size_t i = 0; i < size; ++i) {
488 map.emplace(std::move(key), std::move(value));
498 template<
typename K,
typename V>
509 for (std::size_t i = 0; i < size; ++i) {
515 map.emplace(std::move(key), std::move(value));
521 #ifndef DOXYGEN_SHOULD_SKIP_THIS 526 #endif // GF_SERIALIZATION_OPS_H A deserializer from a binary file.
Definition: Serialization.h:153
Deserializer & operator|(Deserializer &ar, T &data)
Deserialize an enum object.
Definition: SerializationOps.h:319
void writeSizeHeader(std::size_t size)
Write a size header.
Deserializer & operator|(Deserializer &ar, std::unordered_map< K, V > &map)
Deserialize a map object.
Definition: SerializationOps.h:500
constexpr std::size_t getSize() const noexcept
Get the number of elements.
Definition: BufferRef.h:136
Deserializer & operator|(Deserializer &ar, T(&array)[N])
Deserialize an array object.
Definition: SerializationOps.h:381
Deserializer & operator|(Deserializer &ar, std::set< T > &set)
Deserialize a set object.
Definition: SerializationOps.h:425
A reference to a modifiable buffer and its size.
Definition: BufferRef.h:43
bool readSizeHeader(std::size_t &size)
Read a size header.
Serializer & operator|(Serializer &ar, const std::vector< T > &array)
Serialize an array object.
Definition: SerializationOps.h:161
Serializer & operator|(Serializer &ar, const std::map< K, V > &map)
Serialize a map object.
Definition: SerializationOps.h:225
A serializer to a binary file.
Definition: Serialization.h:45
The namespace for gf classes.
Definition: Action.h:35
Serializer & operator|(Serializer &ar, const std::array< T, N > &array)
Serialize an array object.
Definition: SerializationOps.h:177
Deserializer & operator|(Deserializer &ar, std::array< T, N > &array)
Deserialize an array object.
Definition: SerializationOps.h:391
Deserializer & operator|(Deserializer &ar, std::unordered_set< T > &set)
Deserialize a set object.
Definition: SerializationOps.h:449
Serializer & operator|(Serializer &ar, const std::unordered_set< T > &set)
Serialize a set object.
Definition: SerializationOps.h:209
Deserializer & operator|(Deserializer &ar, BufferRef< T > array)
Deserialize an array object.
Definition: SerializationOps.h:357
constexpr ArrayRef< T > array(const T *data, std::size_t size)
Create a constant reference to an array.
Definition: ArrayRef.h:203
Deserializer & operator|(Deserializer &ar, std::vector< T > &array)
Deserialize an array object.
Definition: SerializationOps.h:401
Deserializer & operator|(Deserializer &ar, std::map< K, V > &map)
Deserialize a map object.
Definition: SerializationOps.h:473
Serializer & operator|(Serializer &ar, T data)
Serialize an enum object.
Definition: SerializationOps.h:110
Serializer & operator|(Serializer &ar, const T(&array)[N])
Serialize an array object.
Definition: SerializationOps.h:145
Serializer & operator|(Serializer &ar, const std::set< T > &set)
Serialize a set object.
Definition: SerializationOps.h:193
Serializer & operator|(Serializer &ar, const std::unordered_map< K, V > &map)
Serialize a map object.
Definition: SerializationOps.h:241