GCC Code Coverage Report


Directory: src/gate/
File: src/gate/serializers.c
Date: 2025-12-12 23:40:09
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
286
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))
287 {
288 return 0;
289 }
290
291
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
1 if (gate_math_iszerof(*num))
292 {
293 return gate_serialize_uint32_b(destbuffer, destbufferlen, &u32);
294 }
295 else
296 {
297 float fnorm;
298 int shift;
299 unsigned long sign, exp, significand;
300 1 unsigned significandbits = 23;
301
302
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if (*num < 0) { sign = 1; fnorm = -*num; }
303 else { sign = 0; fnorm = *num; }
304 1 shift = 0;
305
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
7 while (fnorm >= 2.0f) { fnorm /= 2.0f; shift++; }
306
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 while (fnorm < 1.0f) { fnorm *= 2.0f; shift--; }
307 1 fnorm = fnorm - 1.0f;
308 #ifdef GATE_COMPILER_MSVC98
309 significand = (unsigned long)(fnorm * ((double)(gate_int64_t)(((gate_uint64_t)1) << significandbits) + 0.5f));
310 #else
311 1 significand = (unsigned long)(fnorm * ((double)(((gate_uint64_t)1) << significandbits) + 0.5f));
312 #endif
313 1 exp = shift + 0x7f;
314 1 u32 = (sign << 31) | (exp << 23) | significand;
315 1 return gate_serialize_uint32_b(destbuffer, destbufferlen, &u32);
316 }
317 }
318 1 gate_size_t gate_serialize_real64_b(char* destbuffer, gate_size_t destbufferlen, gate_real64_t const* num)
319 {
320 1 gate_uint64_t u64 = 0;
321
322
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))
323 {
324 return 0;
325 }
326
327
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
1 if (gate_math_iszero(*num))
328 {
329 return gate_serialize_uint64_b(destbuffer, destbufferlen, &u64);
330 }
331 else
332 {
333 double fnorm;
334 gate_uint64_t shift;
335 gate_uint64_t sign, exp, significand;
336 1 gate_uint64_t significandbits = 52;
337
338
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if (*num < 0) { sign = 1; fnorm = -*num; }
339 else { sign = 0; fnorm = *num; }
340 1 shift = 0;
341
2/2
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 1 times.
14 while (fnorm >= 2.0) { fnorm /= 2.0; shift++; }
342
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 while (fnorm < 1.0) { fnorm *= 2.0; shift--; }
343 1 fnorm = fnorm - 1.0;
344 1 significand = (gate_uint64_t)(fnorm * ((double)(gate_int64_t)(((gate_uint64_t)1) << significandbits) + 0.5));
345 1 exp = shift + 0x03ff;
346 1 u64 = (sign << 63) | (exp << 52) | significand;
347 1 return gate_serialize_uint64_b(destbuffer, destbufferlen, &u64);
348 }
349 }
350
351 gate_size_t gate_deserialize_uint8_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_uint8_t* num)
352 {
353 if ((srcbuffer == NULL) || (num == NULL) || (srcbufferlen < 1))
354 {
355 return 0;
356 }
357 *num = (gate_uint8_t)srcbuffer[0];
358 return 1;
359 }
360 gate_size_t gate_deserialize_uint16_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_uint16_t* num)
361 {
362 if ((srcbuffer == NULL) || (num == NULL) || (srcbufferlen < 2))
363 {
364 return 0;
365 }
366 *num = (((gate_uint16_t)(gate_uint8_t)srcbuffer[0]) << 8)
367 | ((gate_uint16_t)(gate_uint8_t)srcbuffer[1])
368 ;
369 return 2;
370 }
371 1 gate_size_t gate_deserialize_uint32_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_uint32_t* num)
372 {
373
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))
374 {
375 return 0;
376 }
377 2 *num = (((gate_uint32_t)(gate_uint8_t)srcbuffer[0]) << 24)
378 1 | (((gate_uint32_t)(gate_uint8_t)srcbuffer[1]) << 16)
379 1 | (((gate_uint32_t)(gate_uint8_t)srcbuffer[2]) << 8)
380 1 | ((gate_uint32_t)(gate_uint8_t)srcbuffer[3])
381 ;
382 1 return 4;
383 }
384 1 gate_size_t gate_deserialize_uint64_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_uint64_t* num)
385 {
386
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))
387 {
388 return 0;
389 }
390 2 *num = (((gate_uint64_t)(gate_uint8_t)srcbuffer[0]) << 56)
391 1 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[1]) << 48)
392 1 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[2]) << 40)
393 1 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[3]) << 32)
394 1 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[4]) << 24)
395 1 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[5]) << 16)
396 1 | (((gate_uint64_t)(gate_uint8_t)srcbuffer[6]) << 8)
397 1 | ((gate_uint64_t)(gate_uint8_t)srcbuffer[7])
398 ;
399 1 return 8;
400 }
401 1 gate_size_t gate_deserialize_real32_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_real32_t* num)
402 {
403 1 gate_uint32_t u32 = 0;
404 1 gate_size_t lenprocessed = gate_deserialize_uint32_b(srcbuffer, srcbufferlen, &u32);
405
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if (lenprocessed != 0)
406 {
407
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 if (u32 == 0)
408 {
409 *num = 0.0f;
410 }
411 else
412 {
413 long double result;
414 long shift;
415
416 1 result = (u32 & 0x07FFFFF);
417 1 result /= 0x0800000;
418 1 result += 1.0f;
419 1 shift = (long)((u32 >> 23) & 0xFF) - (long)0x7F;
420
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
7 while (shift > 0) { result *= 2.0; shift--; }
421
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 while (shift < 0) { result /= 2.0; shift++; }
422
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 result *= (u32 & 0x80000000) ? -1.0 : 1.0;
423 1 *num = (gate_real32_t)result;
424 }
425 }
426 1 return lenprocessed;
427 }
428 1 gate_size_t gate_deserialize_real64_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_real64_t* num)
429 {
430 1 gate_uint64_t u64 = 0;
431 1 gate_size_t lenprocessed = gate_deserialize_uint64_b(srcbuffer, srcbufferlen, &u64);
432
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if (lenprocessed != 0)
433 {
434
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 if (u64 == 0)
435 {
436 *num = 0.0;
437 }
438 else
439 {
440 long double result;
441 gate_int64_t shift;
442
443 1 result = (long double)(gate_int64_t)(u64 & 4503599627370495);
444 1 result /= (long double)0x010000000000000;
445 1 result += 1.0f;
446 1 shift = (gate_int64_t)((u64 >> 52) & 0x7FF) - (gate_int64_t)0x3FF;
447
2/2
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 1 times.
14 while (shift > 0) { result *= 2.0; shift--; }
448
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 while (shift < 0) { result /= 2.0; shift++; }
449
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 result *= (u64 & 0x8000000000000000) ? -1.0 : 1.0;
450 1 *num = (gate_real64_t)result;
451 }
452 }
453 1 return lenprocessed;
454 }
455
456
457 gate_size_t gate_serialize_int8_b(char* destbuffer, gate_size_t destbufferlen, gate_int8_t const* num)
458 {
459 gate_uint8_t tmp = (gate_uint8_t)*num;
460 return gate_serialize_uint8_b(destbuffer, destbufferlen, &tmp);
461 }
462 gate_size_t gate_serialize_int16_b(char* destbuffer, gate_size_t destbufferlen, gate_int16_t const* num)
463 {
464 gate_uint16_t tmp = (gate_uint16_t)*num;
465 return gate_serialize_uint16_b(destbuffer, destbufferlen, &tmp);
466 }
467 gate_size_t gate_serialize_int32_b(char* destbuffer, gate_size_t destbufferlen, gate_int32_t const* num)
468 {
469 gate_uint32_t tmp = (gate_uint32_t)*num;
470 return gate_serialize_uint32_b(destbuffer, destbufferlen, &tmp);
471 }
472 gate_size_t gate_serialize_int64_b(char* destbuffer, gate_size_t destbufferlen, gate_int64_t const* num)
473 {
474 gate_uint64_t tmp = (gate_uint64_t)*num;
475 return gate_serialize_uint64_b(destbuffer, destbufferlen, &tmp);
476 }
477
478 gate_size_t gate_deserialize_int8_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_int8_t* num)
479 {
480 gate_uint8_t tmp;
481 gate_size_t ret = gate_deserialize_uint8_b(srcbuffer, srcbufferlen, &tmp);
482 *num = (gate_int8_t)tmp;
483 return ret;
484 }
485 gate_size_t gate_deserialize_int16_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_int16_t* num)
486 {
487 gate_uint16_t tmp;
488 gate_size_t ret = gate_deserialize_uint16_b(srcbuffer, srcbufferlen, &tmp);
489 *num = (gate_int16_t)tmp;
490 return ret;
491 }
492 gate_size_t gate_deserialize_int32_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_int32_t* num)
493 {
494 gate_uint32_t tmp;
495 gate_size_t ret = gate_deserialize_uint32_b(srcbuffer, srcbufferlen, &tmp);
496 *num = (gate_int32_t)tmp;
497 return ret;
498 }
499 gate_size_t gate_deserialize_int64_b(char const* srcbuffer, gate_size_t srcbufferlen, gate_int64_t* num)
500 {
501 gate_uint64_t tmp;
502 gate_size_t ret = gate_deserialize_uint64_b(srcbuffer, srcbufferlen, &tmp);
503 *num = (gate_int64_t)tmp;
504 return ret;
505 }
506