GCC Code Coverage Report


Directory: src/gate/
File: src/gate/serializers.c
Date: 2025-09-14 13:10:38
Exec Total Coverage
Lines: 192 266 72.2%
Functions: 28 40 70.0%
Branches: 76 168 45.2%

Line Branch Exec Source
1 /* GATE PROJECT LICENSE:
2 +----------------------------------------------------------------------------+
3 | Copyright(c) 2018-2025, Stefan Meislinger <sm@opengate.at> |
4 | All rights reserved. |
5 | |
6 | Redistribution and use in source and binary forms, with or without |
7 | modification, are permitted provided that the following conditions are met:|
8 | |
9 | 1. Redistributions of source code must retain the above copyright notice, |
10 | this list of conditions and the following disclaimer. |
11 | 2. Redistributions in binary form must reproduce the above copyright |
12 | notice, this list of conditions and the following disclaimer in the |
13 | documentation and/or other materials provided with the distribution. |
14 | |
15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"|
16 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
17 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
18 | ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
19 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
20 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
21 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
22 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
23 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
24 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
25 | THE POSSIBILITY OF SUCH DAMAGE. |
26 +----------------------------------------------------------------------------+
27 */
28
29 #include "gate/serializers.h"
30 #include "gate/mathematics.h"
31 #include "gate/memalloc.h"
32
33
34
35 /* little endian */
36
37 13 gate_size_t gate_serialize_uint8_l(char* destbuffer, gate_size_t destbufferlen, gate_uint8_t const* num)
38 {
39
3/6
✓ Branch 0 taken 13 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 13 times.
13 if ((destbuffer == NULL) || (num == NULL) || (destbufferlen < 1))
40 {
41 return 0;
42 }
43 13 destbuffer[0] = (char)*num;
44 13 return 1;
45 }
46 32 gate_size_t gate_serialize_uint16_l(char* destbuffer, gate_size_t destbufferlen, gate_uint16_t const* num)
47 {
48
3/6
✓ Branch 0 taken 32 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 32 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 32 times.
32 if ((destbuffer == NULL) || (num == NULL) || (destbufferlen < 2))
49 {
50 return 0;
51 }
52 32 destbuffer[0] = (char)(gate_uint8_t)(*num & 0xff);
53 32 destbuffer[1] = (char)(gate_uint8_t)((*num >> 8) & 0xff);
54 32 return 2;
55 }
56 21 gate_size_t gate_serialize_uint32_l(char* destbuffer, gate_size_t destbufferlen, gate_uint32_t const* num)
57 {
58
3/6
✓ Branch 0 taken 21 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 21 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 21 times.
21 if ((destbuffer == NULL) || (num == NULL) || (destbufferlen < 4))
59 {
60 return 0;
61 }
62 21 destbuffer[0] = (char)(gate_uint8_t)(*num & 0xff);
63 21 destbuffer[1] = (char)(gate_uint8_t)((*num >> 8) & 0xff);
64 21 destbuffer[2] = (char)(gate_uint8_t)((*num >> 16) & 0xff);
65 21 destbuffer[3] = (char)(gate_uint8_t)((*num >> 24) & 0xff);
66 21 return 4;
67 }
68 6 gate_size_t gate_serialize_uint64_l(char* destbuffer, gate_size_t destbufferlen, gate_uint64_t const* num)
69 {
70
3/6
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 6 times.
6 if ((destbuffer == NULL) || (num == NULL) || (destbufferlen < 8))
71 {
72 return 0;
73 }
74 6 destbuffer[0] = (char)(gate_uint8_t)(*num & 0xff);
75 6 destbuffer[1] = (char)(gate_uint8_t)((*num >> 8) & 0xff);
76 6 destbuffer[2] = (char)(gate_uint8_t)((*num >> 16) & 0xff);
77 6 destbuffer[3] = (char)(gate_uint8_t)((*num >> 24) & 0xff);
78 6 destbuffer[4] = (char)(gate_uint8_t)((*num >> 32) & 0xff);
79 6 destbuffer[5] = (char)(gate_uint8_t)((*num >> 40) & 0xff);
80 6 destbuffer[6] = (char)(gate_uint8_t)((*num >> 48) & 0xff);
81 6 destbuffer[7] = (char)(gate_uint8_t)((*num >> 56) & 0xff);
82 6 return 8;
83 }
84 1 gate_size_t gate_serialize_real32_l(char* destbuffer, gate_size_t destbufferlen, gate_real32_t const* num)
85 {
86 gate_size_t ret;
87
88
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 if ((destbuffer == NULL) || (num == NULL) || (destbufferlen < 4))
89 {
90 return 0;
91 }
92
93 1 ret = gate_serialize_real32_b(destbuffer, destbufferlen, num);
94 1 gate_mem_reversebyteorder(destbuffer, ret);
95 1 return ret;
96 }
97 1 gate_size_t gate_serialize_real64_l(char* destbuffer, gate_size_t destbufferlen, gate_real64_t const* num)
98 {
99 gate_size_t ret;
100
101
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 if ((destbuffer == NULL) || (num == NULL) || (destbufferlen < 8))
102 {
103 return 0;
104 }
105
106 1 ret = gate_serialize_real64_b(destbuffer, destbufferlen, num);
107 1 gate_mem_reversebyteorder(destbuffer, ret);
108 1 return ret;
109 }
110
111 13 gate_size_t gate_deserialize_uint8_l(char const* srcbuffer, gate_size_t srcbufferlen, gate_uint8_t* num)
112 {
113
3/6
✓ Branch 0 taken 13 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 13 times.
13 if ((srcbuffer == NULL) || (num == NULL) || (srcbufferlen < 1))
114 {
115 return 0;
116 }
117 13 *num = (gate_uint8_t)srcbuffer[0];
118 13 return 1;
119 }
120 32 gate_size_t gate_deserialize_uint16_l(char const* srcbuffer, gate_size_t srcbufferlen, gate_uint16_t* num)
121 {
122
3/6
✓ Branch 0 taken 32 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 32 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 32 times.
32 if ((srcbuffer == NULL) || (num == NULL) || (srcbufferlen < 2))
123 {
124 return 0;
125 }
126 64 *num = ((gate_uint16_t)(gate_uint8_t)srcbuffer[0])
127 32 | (((gate_uint16_t)(gate_uint8_t)srcbuffer[1]) << 8)
128 ;
129 32 return 2;
130 }
131 21 gate_size_t gate_deserialize_uint32_l(char const* srcbuffer, gate_size_t srcbufferlen, gate_uint32_t* num)
132 {
133
3/6
✓ Branch 0 taken 21 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 21 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 21 times.
21 if ((srcbuffer == NULL) || (num == NULL) || (srcbufferlen < 4))
134 {
135 return 0;
136 }
137 42 *num = ((gate_uint32_t)(gate_uint8_t)srcbuffer[0])
138 21 | (((gate_uint32_t)(gate_uint8_t)srcbuffer[1]) << 8)
139 21 | (((gate_uint32_t)(gate_uint8_t)srcbuffer[2]) << 16)
140 21 | (((gate_uint32_t)(gate_uint8_t)srcbuffer[3]) << 24)
141 ;
142 21 return 4;
143 }
144 6 gate_size_t gate_deserialize_uint64_l(char const* srcbuffer, gate_size_t srcbufferlen, gate_uint64_t* num)
145 {
146
3/6
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 6 times.
6 if ((srcbuffer == NULL) || (num == NULL) || (srcbufferlen < 8))
147 {
148 return 0;
149 }
150 12 *num = ((gate_uint64_t)(gate_uint8_t)srcbuffer[0])
151 6 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[1]) << 8)
152 6 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[2]) << 16)
153 6 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[3]) << 24)
154 6 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[4]) << 32)
155 6 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[5]) << 40)
156 6 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[6]) << 48)
157 6 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[7]) << 56)
158 ;
159 6 return 8;
160 }
161 1 gate_size_t gate_deserialize_real32_l(char const* srcbuffer, gate_size_t srcbufferlen, gate_real32_t* num)
162 {
163 char tmpbuffer[4];
164
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 if ((srcbuffer == NULL) || (num == NULL) || (srcbufferlen < 4))
165 {
166 return 0;
167 }
168 1 gate_mem_copy_reverse(tmpbuffer, srcbuffer, 4);
169 1 return gate_deserialize_real32_b(tmpbuffer, 4, num);
170 }
171 1 gate_size_t gate_deserialize_real64_l(char const* srcbuffer, gate_size_t srcbufferlen, gate_real64_t* num)
172 {
173 char tmpbuffer[8];
174
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 if ((srcbuffer == NULL) || (num == NULL) || (srcbufferlen < 8))
175 {
176 return 0;
177 }
178 1 gate_mem_copy_reverse(tmpbuffer, srcbuffer, 8);
179 1 return gate_deserialize_real64_b(tmpbuffer, 8, num);
180 }
181
182 1 gate_size_t gate_serialize_int8_l(char* destbuffer, gate_size_t destbufferlen, gate_int8_t const* num)
183 {
184 1 gate_uint8_t tmp = (gate_uint8_t)*num;
185 1 return gate_serialize_uint8_l(destbuffer, destbufferlen, &tmp);
186 }
187 2 gate_size_t gate_serialize_int16_l(char* destbuffer, gate_size_t destbufferlen, gate_int16_t const* num)
188 {
189 2 gate_uint16_t tmp = (gate_uint16_t)*num;
190 2 return gate_serialize_uint16_l(destbuffer, destbufferlen, &tmp);
191 }
192 5 gate_size_t gate_serialize_int32_l(char* destbuffer, gate_size_t destbufferlen, gate_int32_t const* num)
193 {
194 5 gate_uint32_t tmp = (gate_uint32_t)*num;
195 5 return gate_serialize_uint32_l(destbuffer, destbufferlen, &tmp);
196 }
197 2 gate_size_t gate_serialize_int64_l(char* destbuffer, gate_size_t destbufferlen, gate_int64_t const* num)
198 {
199 2 gate_uint64_t tmp = (gate_uint64_t)*num;
200 2 return gate_serialize_uint64_l(destbuffer, destbufferlen, &tmp);
201 }
202
203 1 gate_size_t gate_deserialize_int8_l(char const* srcbuffer, gate_size_t srcbufferlen, gate_int8_t* num)
204 {
205 gate_uint8_t tmp;
206 1 gate_size_t ret = gate_deserialize_uint8_l(srcbuffer, srcbufferlen, &tmp);
207 1 *num = (gate_int8_t)tmp;
208 1 return ret;
209 }
210 2 gate_size_t gate_deserialize_int16_l(char const* srcbuffer, gate_size_t srcbufferlen, gate_int16_t* num)
211 {
212 gate_uint16_t tmp;
213 2 gate_size_t ret = gate_deserialize_uint16_l(srcbuffer, srcbufferlen, &tmp);
214 2 *num = (gate_int16_t)tmp;
215 2 return ret;
216 }
217 5 gate_size_t gate_deserialize_int32_l(char const* srcbuffer, gate_size_t srcbufferlen, gate_int32_t* num)
218 {
219 gate_uint32_t tmp;
220 5 gate_size_t ret = gate_deserialize_uint32_l(srcbuffer, srcbufferlen, &tmp);
221 5 *num = (gate_int32_t)tmp;
222 5 return ret;
223 }
224 2 gate_size_t gate_deserialize_int64_l(char const* srcbuffer, gate_size_t srcbufferlen, gate_int64_t* num)
225 {
226 gate_uint64_t tmp;
227 2 gate_size_t ret = gate_deserialize_uint64_l(srcbuffer, srcbufferlen, &tmp);
228 2 *num = (gate_int64_t)tmp;
229 2 return ret;
230 }
231
232
233 /* big endian */
234
235 gate_size_t gate_serialize_uint8_b(char* destbuffer, gate_size_t destbufferlen, gate_uint8_t const* num)
236 {
237 if ((destbuffer == NULL) || (num == NULL) || (destbufferlen < 1))
238 {
239 return 0;
240 }
241 destbuffer[0] = (char)*num;
242 return 1;
243 }
244 gate_size_t gate_serialize_uint16_b(char* destbuffer, gate_size_t destbufferlen, gate_uint16_t const* num)
245 {
246 if ((destbuffer == NULL) || (num == NULL) || (destbufferlen < 2))
247 {
248 return 0;
249 }
250 destbuffer[1] = (char)(gate_uint8_t)(*num & 0xff);
251 destbuffer[0] = (char)(gate_uint8_t)((*num >> 8) & 0xff);
252 return 2;
253 }
254 1 gate_size_t gate_serialize_uint32_b(char* destbuffer, gate_size_t destbufferlen, gate_uint32_t const* num)
255 {
256
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 if ((destbuffer == NULL) || (num == NULL) || (destbufferlen < 4))
257 {
258 return 0;
259 }
260 1 destbuffer[3] = (char)(gate_uint8_t)(*num & 0xff);
261 1 destbuffer[2] = (char)(gate_uint8_t)((*num >> 8) & 0xff);
262 1 destbuffer[1] = (char)(gate_uint8_t)((*num >> 16) & 0xff);
263 1 destbuffer[0] = (char)(gate_uint8_t)((*num >> 24) & 0xff);
264 1 return 4;
265 }
266 1 gate_size_t gate_serialize_uint64_b(char* destbuffer, gate_size_t destbufferlen, gate_uint64_t const* num)
267 {
268
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 if ((destbuffer == NULL) || (num == NULL) || (destbufferlen < 8))
269 {
270 return 0;
271 }
272 1 destbuffer[7] = (char)(gate_uint8_t)(*num & 0xff);
273 1 destbuffer[6] = (char)(gate_uint8_t)((*num >> 8) & 0xff);
274 1 destbuffer[5] = (char)(gate_uint8_t)((*num >> 16) & 0xff);
275 1 destbuffer[4] = (char)(gate_uint8_t)((*num >> 24) & 0xff);
276 1 destbuffer[3] = (char)(gate_uint8_t)((*num >> 32) & 0xff);
277 1 destbuffer[2] = (char)(gate_uint8_t)((*num >> 40) & 0xff);
278 1 destbuffer[1] = (char)(gate_uint8_t)((*num >> 48) & 0xff);
279 1 destbuffer[0] = (char)(gate_uint8_t)((*num >> 56) & 0xff);
280 1 return 8;
281 }
282 1 gate_size_t gate_serialize_real32_b(char* destbuffer, gate_size_t destbufferlen, gate_real32_t const* num)
283 {
284 1 gate_uint32_t u32 = 0;
285 float fnorm;
286 int shift;
287 unsigned long sign, exp, significand;
288 1 unsigned significandbits = 23;
289
290
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 if ((destbuffer == NULL) || (num == NULL) || (destbufferlen < 4))
291 {
292 return 0;
293 }
294
295
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
1 if (gate_math_iszerof(*num))
296 {
297 return gate_serialize_uint32_b(destbuffer, destbufferlen, &u32);
298 }
299 else
300 {
301
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if (*num < 0) { sign = 1; fnorm = -*num; }
302 else { sign = 0; fnorm = *num; }
303 1 shift = 0;
304
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
7 while (fnorm >= 2.0f) { fnorm /= 2.0f; shift++; }
305
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 while (fnorm < 1.0f) { fnorm *= 2.0f; shift--; }
306 1 fnorm = fnorm - 1.0f;
307 #ifdef GATE_COMPILER_MSVC98
308 significand = (unsigned long)(fnorm * ((double)(gate_int64_t)(((gate_uint64_t)1) << significandbits) + 0.5f));
309 #else
310 1 significand = (unsigned long)(fnorm * ((double)(((gate_uint64_t)1) << significandbits) + 0.5f));
311 #endif
312 1 exp = shift + 0x7f;
313 1 u32 = (sign << 31) | (exp << 23) | significand;
314 1 return gate_serialize_uint32_b(destbuffer, destbufferlen, &u32);
315 }
316 }
317 1 gate_size_t gate_serialize_real64_b(char* destbuffer, gate_size_t destbufferlen, gate_real64_t const* num)
318 {
319 1 gate_uint64_t u64 = 0;
320 double fnorm;
321 gate_uint64_t shift;
322 gate_uint64_t sign, exp, significand;
323 1 gate_uint64_t significandbits = 52;
324
325
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 if ((destbuffer == NULL) || (num == NULL) || (destbufferlen < 8))
326 {
327 return 0;
328 }
329
330
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
1 if (gate_math_iszero(*num))
331 {
332 return gate_serialize_uint64_b(destbuffer, destbufferlen, &u64);
333 }
334 else
335 {
336
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if (*num < 0) { sign = 1; fnorm = -*num; }
337 else { sign = 0; fnorm = *num; }
338 1 shift = 0;
339
2/2
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 1 times.
14 while (fnorm >= 2.0) { fnorm /= 2.0; shift++; }
340
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 while (fnorm < 1.0) { fnorm *= 2.0; shift--; }
341 1 fnorm = fnorm - 1.0;
342 1 significand = (gate_uint64_t)(fnorm * ((double)(gate_int64_t)(((gate_uint64_t)1) << significandbits) + 0.5));
343 1 exp = shift + 0x03ff;
344 1 u64 = (sign << 63) | (exp << 52) | significand;
345 1 return gate_serialize_uint64_b(destbuffer, destbufferlen, &u64);
346 }
347 }
348
349 gate_size_t gate_deserialize_uint8_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_uint8_t* num)
350 {
351 if ((srcbuffer == NULL) || (num == NULL) || (srcbufferlen < 1))
352 {
353 return 0;
354 }
355 *num = (gate_uint8_t)srcbuffer[0];
356 return 1;
357 }
358 gate_size_t gate_deserialize_uint16_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_uint16_t* num)
359 {
360 if ((srcbuffer == NULL) || (num == NULL) || (srcbufferlen < 2))
361 {
362 return 0;
363 }
364 *num = (((gate_uint16_t)(gate_uint8_t)srcbuffer[0]) << 8)
365 | ((gate_uint16_t)(gate_uint8_t)srcbuffer[1])
366 ;
367 return 2;
368 }
369 1 gate_size_t gate_deserialize_uint32_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_uint32_t* num)
370 {
371
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 if ((srcbuffer == NULL) || (num == NULL) || (srcbufferlen < 4))
372 {
373 return 0;
374 }
375 2 *num = (((gate_uint32_t)(gate_uint8_t)srcbuffer[0]) << 24)
376 1 | (((gate_uint32_t)(gate_uint8_t)srcbuffer[1]) << 16)
377 1 | (((gate_uint32_t)(gate_uint8_t)srcbuffer[2]) << 8)
378 1 | ((gate_uint32_t)(gate_uint8_t)srcbuffer[3])
379 ;
380 1 return 4;
381 }
382 1 gate_size_t gate_deserialize_uint64_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_uint64_t* num)
383 {
384
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 if ((srcbuffer == NULL) || (num == NULL) || (srcbufferlen < 8))
385 {
386 return 0;
387 }
388 2 *num = (((gate_uint64_t)(gate_uint8_t)srcbuffer[0]) << 56)
389 1 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[1]) << 48)
390 1 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[2]) << 40)
391 1 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[3]) << 32)
392 1 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[4]) << 24)
393 1 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[5]) << 16)
394 1 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[6]) << 8)
395 1 | ((gate_uint64_t)(gate_uint8_t)srcbuffer[7])
396 ;
397 1 return 8;
398 }
399 1 gate_size_t gate_deserialize_real32_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_real32_t* num)
400 {
401 1 gate_uint32_t u32 = 0;
402 long double result;
403 long shift;
404
405 1 gate_size_t lenprocessed = gate_deserialize_uint32_b(srcbuffer, srcbufferlen, &u32);
406
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if (lenprocessed != 0)
407 {
408
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 if (u32 == 0)
409 {
410 *num = 0.0f;
411 }
412 else
413 {
414 1 result = (u32 & 0x07FFFFF);
415 1 result /= 0x0800000;
416 1 result += 1.0f;
417 1 shift = (long)((u32 >> 23) & 0xFF) - (long)0x7F;
418
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
7 while (shift > 0) { result *= 2.0; shift--; }
419
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 while (shift < 0) { result /= 2.0; shift++; }
420
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 result *= (u32 & 0x80000000) ? -1.0 : 1.0;
421 1 *num = (gate_real32_t)result;
422 }
423 }
424 1 return lenprocessed;
425 }
426 1 gate_size_t gate_deserialize_real64_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_real64_t* num)
427 {
428 1 gate_uint64_t u64 = 0;
429 long double result;
430 gate_int64_t shift;
431
432 1 gate_size_t lenprocessed = gate_deserialize_uint64_b(srcbuffer, srcbufferlen, &u64);
433
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if (lenprocessed != 0)
434 {
435
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 if (u64 == 0)
436 {
437 *num = 0.0;
438 }
439 else
440 {
441 1 result = (long double)(gate_int64_t)(u64 & 4503599627370495);
442 1 result /= (long double)0x010000000000000;
443 1 result += 1.0f;
444 1 shift = (gate_int64_t)((u64 >> 52) & 0x7FF) - (gate_int64_t)0x3FF;
445
2/2
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 1 times.
14 while (shift > 0) { result *= 2.0; shift--; }
446
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 while (shift < 0) { result /= 2.0; shift++; }
447
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 result *= (u64 & 0x8000000000000000) ? -1.0 : 1.0;
448 1 *num = (gate_real64_t)result;
449 }
450 }
451 1 return lenprocessed;
452 }
453
454
455 gate_size_t gate_serialize_int8_b(char* destbuffer, gate_size_t destbufferlen, gate_int8_t const* num)
456 {
457 gate_uint8_t tmp = (gate_uint8_t)*num;
458 return gate_serialize_uint8_b(destbuffer, destbufferlen, &tmp);
459 }
460 gate_size_t gate_serialize_int16_b(char* destbuffer, gate_size_t destbufferlen, gate_int16_t const* num)
461 {
462 gate_uint16_t tmp = (gate_uint16_t)*num;
463 return gate_serialize_uint16_b(destbuffer, destbufferlen, &tmp);
464 }
465 gate_size_t gate_serialize_int32_b(char* destbuffer, gate_size_t destbufferlen, gate_int32_t const* num)
466 {
467 gate_uint32_t tmp = (gate_uint32_t)*num;
468 return gate_serialize_uint32_b(destbuffer, destbufferlen, &tmp);
469 }
470 gate_size_t gate_serialize_int64_b(char* destbuffer, gate_size_t destbufferlen, gate_int64_t const* num)
471 {
472 gate_uint64_t tmp = (gate_uint64_t)*num;
473 return gate_serialize_uint64_b(destbuffer, destbufferlen, &tmp);
474 }
475
476 gate_size_t gate_deserialize_int8_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_int8_t* num)
477 {
478 gate_uint8_t tmp;
479 gate_size_t ret = gate_deserialize_uint8_b(srcbuffer, srcbufferlen, &tmp);
480 *num = (gate_int8_t)tmp;
481 return ret;
482 }
483 gate_size_t gate_deserialize_int16_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_int16_t* num)
484 {
485 gate_uint16_t tmp;
486 gate_size_t ret = gate_deserialize_uint16_b(srcbuffer, srcbufferlen, &tmp);
487 *num = (gate_int16_t)tmp;
488 return ret;
489 }
490 gate_size_t gate_deserialize_int32_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_int32_t* num)
491 {
492 gate_uint32_t tmp;
493 gate_size_t ret = gate_deserialize_uint32_b(srcbuffer, srcbufferlen, &tmp);
494 *num = (gate_int32_t)tmp;
495 return ret;
496 }
497 gate_size_t gate_deserialize_int64_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_int64_t* num)
498 {
499 gate_uint64_t tmp;
500 gate_size_t ret = gate_deserialize_uint64_b(srcbuffer, srcbufferlen, &tmp);
501 *num = (gate_int64_t)tmp;
502 return ret;
503 }
504