24
24
25
25
#include " Serializer.hpp"
26
26
27
+ #if defined(WIN32) || defined(_WIN32)
28
+ #include < WinSock2.h>
29
+ #else
30
+ #include < arpa/inet.h>
31
+ #endif
32
+
27
33
namespace oatpp { namespace postgresql { namespace mapping {
28
34
29
35
Serializer::Serializer () {
@@ -33,17 +39,17 @@ Serializer::Serializer() {
33
39
setSerializerMethod (data::mapping::type::__class::String::CLASS_ID, &Serializer::serializeString);
34
40
setSerializerMethod (data::mapping::type::__class::Any::CLASS_ID, nullptr );
35
41
36
- setSerializerMethod (data::mapping::type::__class::Int8::CLASS_ID, nullptr );
37
- setSerializerMethod (data::mapping::type::__class::UInt8::CLASS_ID, nullptr );
42
+ setSerializerMethod (data::mapping::type::__class::Int8::CLASS_ID, &Serializer::serializeInt8 );
43
+ setSerializerMethod (data::mapping::type::__class::UInt8::CLASS_ID, &Serializer::serializeUInt8 );
38
44
39
- setSerializerMethod (data::mapping::type::__class::Int16::CLASS_ID, nullptr );
40
- setSerializerMethod (data::mapping::type::__class::UInt16::CLASS_ID, nullptr );
45
+ setSerializerMethod (data::mapping::type::__class::Int16::CLASS_ID, &Serializer::serializeInt16 );
46
+ setSerializerMethod (data::mapping::type::__class::UInt16::CLASS_ID, &Serializer::serializeUInt16 );
41
47
42
- setSerializerMethod (data::mapping::type::__class::Int32::CLASS_ID, nullptr );
43
- setSerializerMethod (data::mapping::type::__class::UInt32::CLASS_ID, nullptr );
48
+ setSerializerMethod (data::mapping::type::__class::Int32::CLASS_ID, &Serializer::serializeInt32 );
49
+ setSerializerMethod (data::mapping::type::__class::UInt32::CLASS_ID, &Serializer::serializeUInt32 );
44
50
45
- setSerializerMethod (data::mapping::type::__class::Int64::CLASS_ID, nullptr );
46
- setSerializerMethod (data::mapping::type::__class::UInt64::CLASS_ID, nullptr );
51
+ setSerializerMethod (data::mapping::type::__class::Int64::CLASS_ID, &Serializer::serializeInt64 );
52
+ setSerializerMethod (data::mapping::type::__class::UInt64::CLASS_ID, &Serializer::serializeUInt64 );
47
53
48
54
setSerializerMethod (data::mapping::type::__class::Float32::CLASS_ID, nullptr );
49
55
setSerializerMethod (data::mapping::type::__class::Float64::CLASS_ID, nullptr );
@@ -82,11 +88,119 @@ void Serializer::serialize(OutputData& outData, const oatpp::Void& polymorph) co
82
88
}
83
89
}
84
90
91
+ // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
92
+ // Serializer utility functions
93
+
94
+ void Serializer::serNull (OutputData& outData) {
95
+ outData.dataBuffer .reset ();
96
+ outData.data = nullptr ;
97
+ outData.dataSize = 0 ;
98
+ outData.dataFormat = 1 ;
99
+ }
100
+
101
+ void Serializer::serInt2 (OutputData& outData, v_int16 value) {
102
+ outData.dataBuffer .reset (new char [2 ]);
103
+ outData.data = outData.dataBuffer .get ();
104
+ outData.dataSize = 2 ;
105
+ outData.dataFormat = 1 ;
106
+
107
+ *((p_int16) outData.data ) = htons (value);
108
+ }
109
+
110
+ void Serializer::serInt4 (OutputData& outData, v_int32 value) {
111
+ outData.dataBuffer .reset (new char [4 ]);
112
+ outData.data = outData.dataBuffer .get ();
113
+ outData.dataSize = 4 ;
114
+ outData.dataFormat = 1 ;
115
+
116
+ *((p_int32) outData.data ) = htonl (value);
117
+ }
118
+
119
+ void Serializer::serInt8 (OutputData& outData, v_int64 value) {
120
+ outData.dataBuffer .reset (new char [8 ]);
121
+ outData.data = outData.dataBuffer .get ();
122
+ outData.dataSize = 8 ;
123
+ outData.dataFormat = 1 ;
124
+
125
+ *((p_int32) (outData.data + 0 )) = htonl (value >> 32 );
126
+ *((p_int32) (outData.data + 4 )) = htonl (value & 0xFFFFFFFF );
127
+ }
128
+
129
+ // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
130
+ // Serializer functions
131
+
85
132
void Serializer::serializeString (OutputData& outData, const oatpp::Void& polymorph) {
86
133
base::StrBuffer* buff = static_cast <base::StrBuffer*>(polymorph.get ());
87
134
outData.data = buff->c_str ();
88
135
outData.dataSize = buff->getSize ();
89
136
outData.dataFormat = 1 ;
90
137
}
91
138
139
+ void Serializer::serializeInt8 (OutputData& outData, const oatpp::Void& polymorph) {
140
+ if (polymorph) {
141
+ auto v = polymorph.staticCast <oatpp::Int8>();
142
+ serInt2 (outData, *v);
143
+ } else {
144
+ serNull (outData);
145
+ }
146
+ }
147
+
148
+ void Serializer::serializeUInt8 (OutputData& outData, const oatpp::Void& polymorph) {
149
+ if (polymorph) {
150
+ auto v = polymorph.staticCast <oatpp::UInt8>();
151
+ serInt2 (outData, *v);
152
+ } else {
153
+ serNull (outData);
154
+ }
155
+ }
156
+
157
+ void Serializer::serializeInt16 (OutputData& outData, const oatpp::Void& polymorph) {
158
+ if (polymorph) {
159
+ auto v = polymorph.staticCast <oatpp::Int16>();
160
+ serInt2 (outData, *v);
161
+ } else {
162
+ serNull (outData);
163
+ }
164
+ }
165
+
166
+ void Serializer::serializeUInt16 (OutputData& outData, const oatpp::Void& polymorph) {
167
+ if (polymorph) {
168
+ auto v = polymorph.staticCast <oatpp::UInt16>();
169
+ serInt4 (outData, *v);
170
+ } else {
171
+ serNull (outData);
172
+ }
173
+ }
174
+
175
+ void Serializer::serializeInt32 (OutputData& outData, const oatpp::Void& polymorph) {
176
+ if (polymorph) {
177
+ auto v = polymorph.staticCast <oatpp::Int32>();
178
+ serInt4 (outData, *v);
179
+ } else {
180
+ serNull (outData);
181
+ }
182
+ }
183
+
184
+ void Serializer::serializeUInt32 (OutputData& outData, const oatpp::Void& polymorph) {
185
+ if (polymorph) {
186
+ auto v = polymorph.staticCast <oatpp::UInt32>();
187
+ serInt8 (outData, *v);
188
+ } else {
189
+ serNull (outData);
190
+ }
191
+ }
192
+
193
+ void Serializer::serializeInt64 (OutputData& outData, const oatpp::Void& polymorph) {
194
+ if (polymorph) {
195
+ auto v = polymorph.staticCast <oatpp::Int64>();
196
+ serInt8 (outData, *v);
197
+ } else {
198
+ serNull (outData);
199
+ }
200
+ }
201
+
202
+ void Serializer::serializeUInt64 (OutputData& outData, const oatpp::Void& polymorph) {
203
+
204
+ }
205
+
92
206
}}}
0 commit comments