11 #ifndef __DSL_SERIALIZE_H__
12 #define __DSL_SERIALIZE_H__
14 #include <drift/Buffer.h>
18 bool _serialize_int(
DSL_BUFFER * buf,
void * val, uint8_t size,
bool deserialize);
20 bool serialize_var(
DSL_BUFFER * buf, uint8_t * val,
bool deserialize) {
return _serialize_int(buf, val, 1, deserialize); }
21 bool serialize_var(
DSL_BUFFER * buf, int8_t * val,
bool deserialize) {
return _serialize_int(buf, val, 1, deserialize); }
22 bool serialize_var(
DSL_BUFFER * buf, uint16_t * val,
bool deserialize) {
return _serialize_int(buf, val, 2, deserialize); }
23 bool serialize_var(
DSL_BUFFER * buf, int16_t * val,
bool deserialize) {
return _serialize_int(buf, val, 2, deserialize); }
24 bool serialize_var(
DSL_BUFFER * buf, uint32_t * val,
bool deserialize) {
return _serialize_int(buf, val,
sizeof(uint32_t), deserialize); }
25 bool serialize_var(
DSL_BUFFER * buf, int32_t * val,
bool deserialize) {
return _serialize_int(buf, val,
sizeof(int32_t), deserialize); }
26 bool serialize_var(
DSL_BUFFER * buf, uint64_t * val,
bool deserialize) {
return _serialize_int(buf, val,
sizeof(uint64_t), deserialize); }
27 bool serialize_var(
DSL_BUFFER * buf, int64_t * val,
bool deserialize) {
return _serialize_int(buf, val,
sizeof(int64_t), deserialize); }
28 bool serialize_var(
DSL_BUFFER * buf,
double * val,
bool deserialize) {
return _serialize_int(buf, val,
sizeof(
double), deserialize); }
29 bool serialize_var(
DSL_BUFFER * buf,
float * val,
bool deserialize) {
return _serialize_int(buf, val,
sizeof(
float), deserialize); }
30 bool serialize_var(
DSL_BUFFER * buf,
string * val,
bool deserialize);
31 bool serialize_var(
DSL_BUFFER * buf,
char * data,
size_t dataSize,
bool deserialize);
32 bool serialize_var(
DSL_BUFFER * buf, uint8_t * data,
size_t lSize,
bool deserialize);
33 #define ser(x) if (!serialize_var(buf, x, deserialize)) { return false; }
34 #define ser2(x,y) if (!serialize_var(buf, x, y, deserialize)) { return false; }
37 template <
typename T>
bool serialize_vector(
DSL_BUFFER * buf, vector<T>& vec,
bool deserialize) {
43 for (uint32 i = 0; i < num; i++) {
44 ser2((uint8 *)&obj,
sizeof(T));
48 uint32 num = vec.size();
50 for (
auto x = vec.begin(); x != vec.end(); x++) {
51 ser2((uint8 *)&(*x),
sizeof(T));
56 #define serv(x,y) if (!serialize_vector<y>(buf, x, deserialize)) { return false; }
59 template <
typename T>
bool serialize_vector2(
DSL_BUFFER * buf, vector<T>& vec,
bool deserialize) {
65 for (uint32 i = 0; i < num; i++) {
68 if (!obj.FromSerialized(tmp)) {
return false; }
72 uint32 num = vec.size();
74 for (
auto x = vec.begin(); x != vec.end(); x++) {
75 string tmp = x->GetSerialized();
81 #define serv2(x,y) if (!serialize_vector2<y>(buf, x, deserialize)) { return false; }
84 bool serialize_vector_string(
DSL_BUFFER * buf, vector<string>& vec,
bool deserialize) {
90 for (uint32 i = 0; i < num; i++) {
95 uint32 num = (uint32)vec.size();
97 for (
auto x = vec.begin(); x != vec.end(); x++) {
103 #define servstr(x,y) if (!serialize_vector_string(buf, x, deserialize)) { return false; }
105 virtual bool Serialize(
DSL_BUFFER * buf,
bool deserialize) = 0;
107 string GetSerialized();
108 bool FromSerialized(
const string& str);
113 string GetCompressed(
int compression_level = 5);
114 bool FromCompressed(
const string& str);
115 bool GetCompressed(
DSL_BUFFER * buf,
int compression_level = 5);
122 map<uint8, string> dsd_entries;
125 virtual bool Serialize(
DSL_BUFFER * buf,
bool deserialize) = 0;
128 DSL_API
bool DSL_CC dsl_serialize_int(
DSL_BUFFER * buf,
const void * pVal,
size_t lSize);
129 DSL_API
bool DSL_CC dsl_deserialize_int(
DSL_BUFFER * buf,
void * pVal,
size_t lSize);
130 DSL_API
bool DSL_CC dsl_serialize_string(
DSL_BUFFER * buf,
const string * val);
131 DSL_API
bool DSL_CC dsl_deserialize_string(
DSL_BUFFER * buf,
string * val);
133 DSL_API
bool DSL_CC dsl_serialize_varchar(
DSL_BUFFER * buf,
const uint8_t * val, uint32_t lSize);
134 DSL_API
bool DSL_CC dsl_deserialize_varchar(
DSL_BUFFER * buf, uint8_t * val, uint32_t lSize);
136 DSL_API
bool DSL_CC dsl_serialize_fixed(
DSL_BUFFER * buf,
const uint8_t * val, uint32_t lSize);
137 DSL_API
bool DSL_CC dsl_deserialize_fixed(
DSL_BUFFER * buf, uint8_t * val, uint32_t lSize);