20#ifndef REALM_SERIALIZE_H
21#define REALM_SERIALIZE_H
90 static const bool value =
sizeof(
inner(), *
reinterpret_cast<T *
>(0)) !=
sizeof(char);
96#define TYPE_IS_SERIALIZABLE(T) \
97 void *operator,(const is_copy_serializable::inner &, const T &);
99#define TEMPLATE_TYPE_IS_SERIALIZABLE(P, T) \
101 void *operator,(const is_copy_serializable::inner &, const T &);
102#define TEMPLATE_TYPE_IS_SERIALIZABLE2(P1, P2, T1, T2) \
104 void *operator,(const is_copy_serializable::inner &, const T1, T2 &);
105#define TEMPLATE_TYPE_IS_SERIALIZABLE3(P1, P2, P3, T1, T2, T3) \
106 template <P1, P2, P3> \
107 void *operator,(const is_copy_serializable::inner &, const T1, T2, T3 &);
110 namespace Serialization {
125 void reset(
void *buffer,
size_t size);
131 template <
typename T>
134 template <
typename T>
136 template <
typename T>
157 template <
typename T>
160 template <
typename T>
162 template <
typename T>
179 template <
typename T>
182 template <
typename T>
184 template <
typename T>
201 template <
typename T>
204 template <
typename T>
206 template <
typename T>
215 template <
typename S,
typename T>
218 template <
typename S,
typename T>
224 template <
typename S,
typename T>
230 template <
typename T,
bool IS_COPY_SERIALIZABLE>
233 template <
typename T>
236 template <
typename S>
238 template <
typename S>
240 template <
typename S>
242 template <
typename S>
244 template <
typename S,
size_t Extent>
246 template <
typename S,
size_t Extent>
250 template <
typename T>
253 template <
typename S>
255 template <
typename S>
257 template <
typename S>
259 template <
typename S>
261 template <
typename S,
size_t Extent>
267 template <
typename S,
typename T,
size_t N>
270 template <
typename S,
typename T,
size_t N>
274 template <
typename S,
typename T1,
typename T2>
277 template <
typename S,
typename T1,
typename T2>
280 template <
typename S,
typename T>
283 template <
typename S,
typename T>
286 template <
typename S,
typename T>
289 template <
typename S,
typename T>
292 template <
typename S,
typename T>
295 template <
typename S,
typename T>
298 template <
typename S,
typename T1,
typename T2>
301 template <
typename S,
typename T1,
typename T2>
304 template <
typename S>
307 template <
typename S>
310 template <
typename S,
typename T,
size_t Extent>
313 template <
typename S,
typename T,
size_t Extent>
316 template <
typename T>
319 template <
typename T>
332 std::map<const char *, const PolymorphicSerdezIntfc<T> *>
by_typename;
333 std::map<TypeTag, const PolymorphicSerdezIntfc<T> *>
by_tag;
338 template <
typename T1,
typename T2>
344 template <
typename T>
362 template <
typename T1,
typename T2>
379#include "realm/serialize.inl"
Definition bytearray.h:30
Definition bytearray.h:53
Definition serialize.h:171
~ByteCountSerializer(void)
bool operator<<(const T &val)
size_t count
Definition serialize.h:188
bool append_serializable(const T &data)
ByteCountSerializer(void)
bool append_bytes(const void *data, size_t datalen)
bool operator&(const T &val)
size_t bytes_used(void) const
Definition serialize.h:144
bool append_serializable(const T &data)
DynamicBufferSerializer(size_t initial_size)
void * detach_buffer(ptrdiff_t max_wasted_bytes=0)
char * base
Definition serialize.h:166
bool operator&(const T &val)
char * limit
Definition serialize.h:168
char * pos
Definition serialize.h:167
bool operator<<(const T &val)
bool append_bytes(const void *data, size_t datalen)
ByteArray detach_bytearray(ptrdiff_t max_wasted_bytes=0)
~DynamicBufferSerializer(void)
const void * get_buffer(void) const
size_t bytes_used(void) const
Definition serialize.h:191
bool extract_serializable(T &data)
const void * peek_bytes(size_t datalen)
~FixedBufferDeserializer(void)
bool operator&(const T &val)
const char * limit
Definition serialize.h:211
FixedBufferDeserializer(const void *buffer, size_t size)
ptrdiff_t bytes_left(void) const
bool extract_bytes(void *data, size_t datalen)
const char * pos
Definition serialize.h:210
FixedBufferDeserializer(const ByteArrayRef &array)
Definition serialize.h:118
FixedBufferSerializer(void)
char * limit
Definition serialize.h:141
bool operator<<(const T &val)
bool append_bytes(const void *data, size_t datalen)
char * pos
Definition serialize.h:140
void reset(void *buffer, size_t size)
FixedBufferSerializer(ByteArray &array)
ptrdiff_t bytes_left(void) const
~FixedBufferSerializer(void)
void reset(ByteArray &array)
bool append_serializable(const T &data)
FixedBufferSerializer(void *buffer, size_t size)
bool operator&(const T &val)
Definition serialize.h:320
unsigned TypeTag
Definition serialize.h:330
static bool serialize(DynamicBufferSerializer &serializer, const T &obj)
static SubclassMap & get_subclasses(void)
static bool serialize(FixedBufferSerializer &serializer, const T &obj)
static T * deserialize_new(FixedBufferDeserializer &deserializer)
static bool serialize(ByteCountSerializer &serializer, const T &obj)
Definition serialize.h:345
virtual ~PolymorphicSerdezIntfc(void)
PolymorphicSerdezIntfc(const char *type_name)
PolymorphicSerdezHelper< T >::TypeTag tag
Definition serialize.h:359
virtual bool serialize(DynamicBufferSerializer &serializer, const T &obj) const =0
virtual T * deserialize_new(FixedBufferDeserializer &deserializer) const =0
virtual bool serialize(FixedBufferSerializer &serializer, const T &obj) const =0
virtual bool serialize(ByteCountSerializer &serializer, const T &obj) const =0
Definition serialize.h:363
virtual bool serialize(FixedBufferSerializer &serializer, const T1 &obj) const
PolymorphicSerdezSubclass(void)
virtual bool serialize(DynamicBufferSerializer &serializer, const T1 &obj) const
virtual bool serialize(ByteCountSerializer &serializer, const T1 &obj) const
virtual T1 * deserialize_new(FixedBufferDeserializer &deserializer) const
Definition serialize.h:82
inner(void)
Definition serialize.h:84
#define REALM_INTERNAL_API_EXTERNAL_LINKAGE
Definition compiler_support.h:218
bool deserialize(S &s, T &t)
Definition serialize.h:225
bool serdez(S &, const T &)
bool serialize(S &s, const T &t)
Definition serialize.h:219
Definition activemsg.h:38
char operator,(const is_copy_serializable::inner &, const T &)
Definition serialize.h:331
std::map< const char *, const PolymorphicSerdezIntfc< T > * > by_typename
Definition serialize.h:332
std::map< TypeTag, const PolymorphicSerdezIntfc< T > * > by_tag
Definition serialize.h:333
static bool serialize_scalar(S &s, const T &data)
static bool serialize_vector(S &s, const std::vector< T > &v)
static bool deserialize_scalar(S &s, T &data)
static bool deserialize_vector(S &s, std::vector< T > &v)
static bool serialize_span(S &s, span< T, Extent > sp)
static bool deserialize_span(S &s, span< T, Extent > &sp)
static bool serialize_vector(S &s, const std::vector< T > &v)
static bool serialize_scalar(S &s, const T &data)
static bool serialize_span(S &s, span< T, Extent > sp)
static bool deserialize_vector(S &s, std::vector< T > &v)
static bool deserialize_scalar(S &s, T &data)
Definition serialize.h:231
Definition serialize.h:89
static const bool value
Definition serialize.h:90
Definition serialize.h:80