commit 73a72747443a0da6a7547bac9579fd9c3c1a6b77
parent 4218bf0f6d62f672f52067ec6d8594c111fb7c99
Author: Remy Noulin <loader2x@gmail.com>
Date: Sun, 28 Oct 2018 20:58:46 -0400
fix bug in the code packing the elements in arrays and dicts
memcheckNetSerial.c | 14 +
netSerial.c | 4 +-
netSerial.c.gcov | 10900 +++++++++++++++++++++++++-------------------------
package.yml | 2 +-
testNetSerial.c | 14 +
testNetSerial.sh | 4 +-
6 files changed, 5520 insertions(+), 5418 deletions(-)
Diffstat:
6 files changed, 5520 insertions(+), 5418 deletions(-)
diff --git a/memcheckNetSerial.c b/memcheckNetSerial.c
@@ -1519,6 +1519,20 @@ void variousT(void) {
terminateG(B);
freeManyG(&n, &ds);
+ parseG(&n, "[[{a:1}, null, {a:1}, {a:1}]]");
+ logVarG(&n);
+ B = serialG(&n);
+ logI("len %u", lenG(B));
+ logSI("%s",toHexSepS(getValG(B), lenG(B), " "));
+ s = sToString((smallt *) B->B);
+ ck_assert_str_eq(s, "[111,1,4,78,1,97,0,2,-32,20,97,0,2,78,1,97,0,2]");
+ free(s);
+ deserialG(&ds, B);
+ s = toStringG(&ds);
+ ck_assert_str_eq(s, "[[{\"a\":1},null,{\"a\":1},{\"a\":1}]]");
+ free(s);
+ terminateG(B);
+ freeManyG(&n, &ds);
}
diff --git a/netSerial.c b/netSerial.c
@@ -1978,7 +1978,7 @@ internal void dictNetSerial(sBytest **r, sDictt *dict, contextt *ctx, packingT p
or e->data->type == BYTES) {
type = e->data->type;
packCount = 1;
- sDictElemt *element = &((dict)->elements) + eIdx;
+ sDictElemt *element = &((dict)->elements) + eIdx +1;
for (size_t i = eIdx+1; i < (dict)->count ; i++, element = &((dict)->elements) + i) {
if (element->key) {
if (element->data->type != type) {
@@ -2483,7 +2483,7 @@ internal void arrayNetSerial(sBytest **r, sArrayt *array, contextt *ctx, packing
or e->type == BYTES) {
type = e->type;
packCount = 1;
- smallt *element = ((smallt **) &((array)->data))[eIdx];
+ smallt *element = ((smallt **) &((array)->data))[eIdx+1];
for (size_t i = eIdx+1; i < (array)->count ; i++, element = ((smallt **) &((array)->data))[i]) {
if (!element) {
// null element are undefined
diff --git a/netSerial.c.gcov b/netSerial.c.gcov
@@ -1,4 +1,4 @@
- -: 0:Source:/home/remy/git/sw/sheepyPackagesGitHub/netSerial/netSerial.c
+ -: 0:Source:/home/rlp/git/sw/sheepyPackagesGitHub/netSerial/netSerial.c
-: 0:Graph:netSerial.gcno
-: 0:Data:netSerial.gcda
-: 0:Runs:7
@@ -363,111 +363,129 @@ function helpNetSerial called 0 returned 0% blocks executed 0%
#####: 242: ret "TODO helpNetSerial \n" helpTextSmallJson;
-: 243:}
-: 244:
-function uintToNetTypeVarint called 105 returned 100% blocks executed 100%
- 105: 245:internal void uintToNetTypeVarint(sBytest **buf, u8 type, u64 value) {
- 105: 246: u64 c = value;
- -: 247: /* encode b0..2 */
- 105: 248: u8 b = type + ((c & 0x7) << 4);
- 105: 249: if (c & 0xFFFFFFFFFFFFFFF8) {
-branch 0 taken 10% (fallthrough)
-branch 1 taken 90%
- 10: 250: b |= 0x80;
- 10: 251: sBytesPush(buf, b);
-call 0 returned 100%
- 10: 252: c >>=3;
- -: 253: /* encode b3..9 ...*/
- 31: 254: while(c) {
+ -: 245:/**
+ -: 246: * encode type in lower nibble, uint value in high nibble and next bytes as varuint
+ -: 247: */
+function uintToNetTypeVarint called 106 returned 100% blocks executed 100%
+ 106: 248:internal void uintToNetTypeVarint(sBytest **buf, u8 type, u64 value) {
+ 106: 249: u64 c = value;
+ -: 250: /* encode b0..2 */
+ 106: 251: u8 b = type + ((c & 0x7) << 4);
+ 106: 252: if (c & 0xFFFFFFFFFFFFFFF8) {
+branch 0 taken 9% (fallthrough)
+branch 1 taken 91%
+ 10: 253: b |= 0x80;
+ 10: 254: sBytesPush(buf, b);
+call 0 returned 100%
+ 10: 255: c >>=3;
+ -: 256: /* encode b3..9 ...*/
+ 31: 257: while(c) {
branch 0 taken 52%
branch 1 taken 48%
- 11: 255: b = c & 0x7F;
- 11: 256: if (c & 0xFFFFFFFFFFFFFF80)
+ 11: 258: b = c & 0x7F;
+ 11: 259: if (c & 0xFFFFFFFFFFFFFF80)
branch 0 taken 9% (fallthrough)
branch 1 taken 91%
- 1: 257: b |= 0x80;
- 11: 258: sBytesPush(buf, b);
-call 0 returned 100%
- 11: 259: c >>=7;
- -: 260: }
- -: 261: }
- -: 262: else
- 95: 263: sBytesPush(buf, b);
-call 0 returned 100%
- 105: 264:}
- -: 265:
-function uintToVarint called 173 returned 100% blocks executed 90%
- 173: 266:internal void uintToVarint(sBytest **buf, u64 value) {
- 173: 267: u64 c = value;
- 173: 268: u8 b = c & 0x7F;
- 173: 269: if (c & 0xFFFFFFFFFFFFFF80) {
+ 1: 260: b |= 0x80;
+ 11: 261: sBytesPush(buf, b);
+call 0 returned 100%
+ 11: 262: c >>=7;
+ -: 263: }
+ -: 264: }
+ -: 265: else
+ 96: 266: sBytesPush(buf, b);
+call 0 returned 100%
+ 106: 267:}
+ -: 268:
+ -: 269:/**
+ -: 270: * encode uint as varuint
+ -: 271: */
+function uintToVarint called 180 returned 100% blocks executed 90%
+ 180: 272:internal void uintToVarint(sBytest **buf, u64 value) {
+ 180: 273: u64 c = value;
+ 180: 274: u8 b = c & 0x7F;
+ 180: 275: if (c & 0xFFFFFFFFFFFFFF80) {
branch 0 taken 2% (fallthrough)
branch 1 taken 98%
- 3: 270: b |= 0x80;
- 3: 271: sBytesPush(buf, b);
+ 3: 276: b |= 0x80;
+ 3: 277: sBytesPush(buf, b);
call 0 returned 100%
- 3: 272: c >>=7;
- -: 273: /* encode b7..14 ...*/
- 9: 274: while(c) {
+ 3: 278: c >>=7;
+ -: 279: /* encode b7..14 ...*/
+ 9: 280: while(c) {
branch 0 taken 50%
branch 1 taken 50%
- 3: 275: b = c & 0x7F;
- 3: 276: if (c & 0xFFFFFFFFFFFFFF80)
+ 3: 281: b = c & 0x7F;
+ 3: 282: if (c & 0xFFFFFFFFFFFFFF80)
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- #####: 277: b |= 0x80;
- 3: 278: sBytesPush(buf, b);
-call 0 returned 100%
- 3: 279: c >>=7;
- -: 280: }
- -: 281: }
- -: 282: else
- 170: 283: sBytesPush(buf, b);
-call 0 returned 100%
- 173: 284:}
- -: 285:
-function netTypeVarintToUint called 105 returned 100% blocks executed 100%
- 105: 286:internal u64 netTypeVarintToUint(u8 **buf) {
- 105: 287: u64 r = 0;
- -: 288:
- 105: 289: r = (**buf >> 4) & 0x7;
- -: 290:
- 105: 291: u8 c = 0;
- 221: 292: while (**buf & 0x80) {
+ #####: 283: b |= 0x80;
+ 3: 284: sBytesPush(buf, b);
+call 0 returned 100%
+ 3: 285: c >>=7;
+ -: 286: }
+ -: 287: }
+ -: 288: else
+ 177: 289: sBytesPush(buf, b);
+call 0 returned 100%
+ 180: 290:}
+ -: 291:
+ -: 292:/**
+ -: 293: * decode type and varuint to uint
+ -: 294: */
+function netTypeVarintToUint called 106 returned 100% blocks executed 100%
+ 106: 295:internal u64 netTypeVarintToUint(u8 **buf) {
+ 106: 296: u64 r = 0;
+ -: 297:
+ 106: 298: r = (**buf >> 4) & 0x7;
+ -: 299:
+ 106: 300: u8 c = 0;
+ 223: 301: while (**buf & 0x80) {
branch 0 taken 9%
branch 1 taken 91% (fallthrough)
- 11: 293: (*buf)++;
- 11: 294: r |= (**buf & 0x7F) << (7*c+3);
- 11: 295: c++;
- -: 296: }
- 105: 297: (*buf)++;
- 105: 298: ret r;
- -: 299:}
- -: 300:
-function varintToUint called 173 returned 100% blocks executed 100%
- 173: 301:internal u64 varintToUint(u8 **buf) {
- 173: 302: u64 r = 0;
- -: 303:
- 173: 304: r = (**buf) & 0x7F;
- 173: 305: u8 c = 1;
- 349: 306: while (**buf & 0x80) {
+ 11: 302: (*buf)++;
+ 11: 303: r |= (**buf & 0x7F) << (7*c+3);
+ 11: 304: c++;
+ -: 305: }
+ 106: 306: (*buf)++;
+ 106: 307: ret r;
+ -: 308:}
+ -: 309:
+ -: 310:/**
+ -: 311: * decode varuint to uint
+ -: 312: */
+function varintToUint called 180 returned 100% blocks executed 100%
+ 180: 313:internal u64 varintToUint(u8 **buf) {
+ 180: 314: u64 r = 0;
+ -: 315:
+ 180: 316: r = (**buf) & 0x7F;
+ 180: 317: u8 c = 1;
+ 363: 318: while (**buf & 0x80) {
branch 0 taken 2%
branch 1 taken 98% (fallthrough)
- 3: 307: (*buf)++;
- 3: 308: r |= (**buf & 0x7F) << (7*c);
- 3: 309: c++;
- -: 310: }
- 173: 311: (*buf)++;
- 173: 312: ret r;
- -: 313:}
- -: 314:
- -: 315:// -------------------------------------
- -: 316:// Serializers
- -: 317:
+ 3: 319: (*buf)++;
+ 3: 320: r |= (**buf & 0x7F) << (7*c);
+ 3: 321: c++;
+ -: 322: }
+ 180: 323: (*buf)++;
+ 180: 324: ret r;
+ -: 325:}
+ -: 326:
+ -: 327:// -------------------------------------
+ -: 328:// Serializers
+ -: 329:
+ -: 330:// level 0
+ -: 331:// like smallJson with ints and length encoded as varints
+ -: 332:
+ -: 333:/**
+ -: 334: * serializer top function
+ -: 335: */
function netSerialLevel0 called 0 returned 0% blocks executed 0%
- #####: 318:internal sBytest* netSerialLevel0(smallt *o) {
- #####: 319: sBytest *r = NULL;
- #####: 320: sBytest *B = NULL;
- -: 321:
- #####: 322: switch(o->type) {
+ #####: 336:internal sBytest* netSerialLevel0(smallt *o) {
+ #####: 337: sBytest *r = NULL;
+ #####: 338: sBytest *B = NULL;
+ -: 339:
+ #####: 340: switch(o->type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -478,95 +496,95 @@ branch 6 never executed
branch 7 never executed
branch 8 never executed
branch 9 never executed
- -: 323: case UNDEFINED:
- #####: 324: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
+ -: 341: case UNDEFINED:
+ #####: 342: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
call 0 never executed
- #####: 325: break;
- -: 326: case BOOL: {
- #####: 327: u8 c = NET_SERIAL_TYPES[(u8)o->type];
- -: 328: // set bit 4 when true
- #####: 329: if (((sBoolt *)&(o->type))->value)
+ #####: 343: break;
+ -: 344: case BOOL: {
+ #####: 345: u8 c = NET_SERIAL_TYPES[(u8)o->type];
+ -: 346: // set bit 4 when true
+ #####: 347: if (((sBoolt *)&(o->type))->value)
branch 0 never executed
branch 1 never executed
- #####: 330: c |= (1<<4);
- #####: 331: sBytesPush(&r, c);
-call 0 never executed
- -: 332: }
- #####: 333: break;
- -: 334: case CONTAINER:
- -: 335: // undefined
- #####: 336: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
-call 0 never executed
- #####: 337: break;
- -: 338: case DICT:
- #####: 339: dictNetSerialLevel0(&r, (sDictt *)&(o->type));
-call 0 never executed
- #####: 340: break;
- -: 341: case DOUBLE:
- #####: 342: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
-call 0 never executed
- #####: 343: sBytesPushBuffer(&r, &((sDoublet *)&(o->type))->value, sizeof(double));
-call 0 never executed
- #####: 344: break;
- -: 345: case INT: {
- -: 346: // encode int to varint
- -: 347: // v is int64_t to convert to varint
- #####: 348: i64 v = ((sIntt *)&(o->type))->value;
- -: 349: // encode v with arithmetic shifts
- #####: 350: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], (v << 1) ^ (v >> 63));
+ #####: 348: c |= (1<<4);
+ #####: 349: sBytesPush(&r, c);
call 0 never executed
- -: 351: }
- #####: 352: break;
- -: 353: case STRING:
+ -: 350: }
+ #####: 351: break;
+ -: 352: case CONTAINER:
+ -: 353: // undefined
#####: 354: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
call 0 never executed
- #####: 355: sBytesPushBuffer(&r, &((sStringt *)&(o->type))->data, sizeof(sStringt) + strlen(&(((sStringt *)&(o->type))->data)) -1);
-call 0 never executed
- #####: 356: break;
- -: 357: case ARRAY:
- #####: 358: arrayNetSerialLevel0(&r, (sArrayt *)&(o->type));
-call 0 never executed
- #####: 359: break;
- -: 360: case BYTES:
- #####: 361: B = (sBytest *)&(o->type);
- #####: 362: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], B->count);
-call 0 never executed
- #####: 363: sBytesPushBuffer(&r, &(B->data), B->count);
-call 0 never executed
- #####: 364: break;
- -: 365: }
- #####: 366: ret r;
- -: 367:}
- -: 368:
- -: 369:/**
- -: 370: * serialize dictionary
- -: 371: *
- -: 372: * the serialized dict is pushed to r.
- -: 373: * All elements are serialized recursively
- -: 374: *
- -: 375: * the data in containers is not serialized
- -: 376: *
- -: 377: * \param
- -: 378: * r small bytes object
- -: 379: * dict dictionary to serialize
- -: 380: */
+ #####: 355: break;
+ -: 356: case DICT:
+ #####: 357: dictNetSerialLevel0(&r, (sDictt *)&(o->type));
+call 0 never executed
+ #####: 358: break;
+ -: 359: case DOUBLE:
+ #####: 360: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
+call 0 never executed
+ #####: 361: sBytesPushBuffer(&r, &((sDoublet *)&(o->type))->value, sizeof(double));
+call 0 never executed
+ #####: 362: break;
+ -: 363: case INT: {
+ -: 364: // encode int to varint
+ -: 365: // v is int64_t to convert to varint
+ #####: 366: i64 v = ((sIntt *)&(o->type))->value;
+ -: 367: // encode v with arithmetic shifts
+ #####: 368: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], (v << 1) ^ (v >> 63));
+call 0 never executed
+ -: 369: }
+ #####: 370: break;
+ -: 371: case STRING:
+ #####: 372: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
+call 0 never executed
+ #####: 373: sBytesPushBuffer(&r, &((sStringt *)&(o->type))->data, sizeof(sStringt) + strlen(&(((sStringt *)&(o->type))->data)) -1);
+call 0 never executed
+ #####: 374: break;
+ -: 375: case ARRAY:
+ #####: 376: arrayNetSerialLevel0(&r, (sArrayt *)&(o->type));
+call 0 never executed
+ #####: 377: break;
+ -: 378: case BYTES:
+ #####: 379: B = (sBytest *)&(o->type);
+ #####: 380: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], B->count);
+call 0 never executed
+ #####: 381: sBytesPushBuffer(&r, &(B->data), B->count);
+call 0 never executed
+ #####: 382: break;
+ -: 383: }
+ #####: 384: ret r;
+ -: 385:}
+ -: 386:
+ -: 387:/**
+ -: 388: * serialize dictionary
+ -: 389: *
+ -: 390: * the serialized dict is pushed to r.
+ -: 391: * All elements are serialized recursively
+ -: 392: *
+ -: 393: * the data in containers is not serialized
+ -: 394: *
+ -: 395: * \param
+ -: 396: * r small bytes object
+ -: 397: * dict dictionary to serialize
+ -: 398: */
function dictNetSerialLevel0 called 0 returned 0% blocks executed 0%
- #####: 381:internal void dictNetSerialLevel0(sBytest **r, sDictt *dict) {
- #####: 382: sBytest *B = NULL;
- -: 383:
- #####: 384: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)dict->type], dict->count);
+ #####: 399:internal void dictNetSerialLevel0(sBytest **r, sDictt *dict) {
+ #####: 400: sBytest *B = NULL;
+ -: 401:
+ #####: 402: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)dict->type], dict->count);
call 0 never executed
- -: 385:
- #####: 386: forEachSDict(dict, e) {
+ -: 403:
+ #####: 404: forEachSDict(dict, e) {
branch 0 never executed
branch 1 never executed
- #####: 387: if (e->key) {
+ #####: 405: if (e->key) {
branch 0 never executed
branch 1 never executed
- #####: 388: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ #####: 406: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 never executed
- -: 389:
- #####: 390: switch(e->data->type) {
+ -: 407:
+ #####: 408: switch(e->data->type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -577,99 +595,99 @@ branch 6 never executed
branch 7 never executed
branch 8 never executed
branch 9 never executed
- -: 391: case UNDEFINED:
- #####: 392: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->data->type]);
+ -: 409: case UNDEFINED:
+ #####: 410: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->data->type]);
call 0 never executed
- #####: 393: break;
- -: 394: case BOOL: {
- #####: 395: u8 c = NET_SERIAL_TYPES[(u8)e->data->type];
- -: 396: // set bit 4 when true
- #####: 397: if (((sBoolt *)(e->data))->value)
+ #####: 411: break;
+ -: 412: case BOOL: {
+ #####: 413: u8 c = NET_SERIAL_TYPES[(u8)e->data->type];
+ -: 414: // set bit 4 when true
+ #####: 415: if (((sBoolt *)(e->data))->value)
branch 0 never executed
branch 1 never executed
- #####: 398: c |= (1<<4);
- #####: 399: sBytesPush(r, c);
-call 0 never executed
- -: 400: }
- #####: 401: break;
- -: 402: case CONTAINER:
- -: 403: // undefined
- #####: 404: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->data->type]);
-call 0 never executed
- #####: 405: break;
- -: 406: case DICT:
- #####: 407: dictNetSerialLevel0(r, (sDictt *)(e->data));
-call 0 never executed
- #####: 408: break;
- -: 409: case DOUBLE:
- #####: 410: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->data->type]);
+ #####: 416: c |= (1<<4);
+ #####: 417: sBytesPush(r, c);
call 0 never executed
- #####: 411: sBytesPushBuffer(r, &((sDoublet *)(e->data))->value, sizeof(double));
-call 0 never executed
- #####: 412: break;
- -: 413: case INT: {
- -: 414: // encode int to varint
- -: 415: // v is int64_t to convert to varint
- #####: 416: i64 v = ((sIntt *)(e->data))->value;
- -: 417: // encode v with arithmetic shifts
- #####: 418: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], (v << 1) ^ (v >> 63));
-call 0 never executed
- -: 419: }
- #####: 420: break;
- -: 421: case STRING:
+ -: 418: }
+ #####: 419: break;
+ -: 420: case CONTAINER:
+ -: 421: // undefined
#####: 422: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->data->type]);
call 0 never executed
- #####: 423: sBytesPushBuffer(r, &((sStringt *)(e->data))->data, sizeof(sStringt) + strlen(&(((sStringt *)(e->data))->data)) -1);
-call 0 never executed
- #####: 424: break;
- -: 425: case ARRAY:
- #####: 426: arrayNetSerialLevel0(r, (sArrayt *)(e->data));
-call 0 never executed
- #####: 427: break;
- -: 428: case BYTES:
- #####: 429: B = (sBytest *)(e->data);
- #####: 430: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], B->count);
-call 0 never executed
- #####: 431: sBytesPushBuffer(r, &(B->data), B->count);
-call 0 never executed
- #####: 432: break;
- -: 433: }
- -: 434: }
- -: 435: }
- #####: 436: ret;
- -: 437:}
- -: 438:
- -: 439:/**
- -: 440: * serialize array
- -: 441: *
- -: 442: * the serialized array is pushed to r.
- -: 443: * All elements are serialized recursively
- -: 444: *
- -: 445: * the data in containers is not serialized
- -: 446: *
- -: 447: * \param
- -: 448: * r small bytes object
- -: 449: * array to serialize
- -: 450: */
+ #####: 423: break;
+ -: 424: case DICT:
+ #####: 425: dictNetSerialLevel0(r, (sDictt *)(e->data));
+call 0 never executed
+ #####: 426: break;
+ -: 427: case DOUBLE:
+ #####: 428: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->data->type]);
+call 0 never executed
+ #####: 429: sBytesPushBuffer(r, &((sDoublet *)(e->data))->value, sizeof(double));
+call 0 never executed
+ #####: 430: break;
+ -: 431: case INT: {
+ -: 432: // encode int to varint
+ -: 433: // v is int64_t to convert to varint
+ #####: 434: i64 v = ((sIntt *)(e->data))->value;
+ -: 435: // encode v with arithmetic shifts
+ #####: 436: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], (v << 1) ^ (v >> 63));
+call 0 never executed
+ -: 437: }
+ #####: 438: break;
+ -: 439: case STRING:
+ #####: 440: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->data->type]);
+call 0 never executed
+ #####: 441: sBytesPushBuffer(r, &((sStringt *)(e->data))->data, sizeof(sStringt) + strlen(&(((sStringt *)(e->data))->data)) -1);
+call 0 never executed
+ #####: 442: break;
+ -: 443: case ARRAY:
+ #####: 444: arrayNetSerialLevel0(r, (sArrayt *)(e->data));
+call 0 never executed
+ #####: 445: break;
+ -: 446: case BYTES:
+ #####: 447: B = (sBytest *)(e->data);
+ #####: 448: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], B->count);
+call 0 never executed
+ #####: 449: sBytesPushBuffer(r, &(B->data), B->count);
+call 0 never executed
+ #####: 450: break;
+ -: 451: }
+ -: 452: }
+ -: 453: }
+ #####: 454: ret;
+ -: 455:}
+ -: 456:
+ -: 457:/**
+ -: 458: * serialize array
+ -: 459: *
+ -: 460: * the serialized array is pushed to r.
+ -: 461: * All elements are serialized recursively
+ -: 462: *
+ -: 463: * the data in containers is not serialized
+ -: 464: *
+ -: 465: * \param
+ -: 466: * r small bytes object
+ -: 467: * array to serialize
+ -: 468: */
function arrayNetSerialLevel0 called 0 returned 0% blocks executed 0%
- #####: 451:internal void arrayNetSerialLevel0(sBytest **r, sArrayt *array) {
- #####: 452: sBytest *B = NULL;
- -: 453:
- #####: 454: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)array->type], array->count);
+ #####: 469:internal void arrayNetSerialLevel0(sBytest **r, sArrayt *array) {
+ #####: 470: sBytest *B = NULL;
+ -: 471:
+ #####: 472: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)array->type], array->count);
call 0 never executed
- -: 455:
- #####: 456: forEachSArray(array, e) {
+ -: 473:
+ #####: 474: forEachSArray(array, e) {
branch 0 never executed
branch 1 never executed
- #####: 457: if (!e) {
+ #####: 475: if (!e) {
branch 0 never executed
branch 1 never executed
- -: 458: // empty slots are represented as undefined elements
- #####: 459: sBytesPush(r, NET_SERIAL_TYPES[UNDEFINED]);
+ -: 476: // empty slots are represented as undefined elements
+ #####: 477: sBytesPush(r, NET_SERIAL_TYPES[UNDEFINED]);
call 0 never executed
- -: 460: }
- -: 461: else {
- #####: 462: switch(e->type) {
+ -: 478: }
+ -: 479: else {
+ #####: 480: switch(e->type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -680,103 +698,107 @@ branch 6 never executed
branch 7 never executed
branch 8 never executed
branch 9 never executed
- -: 463: case UNDEFINED:
- #####: 464: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->type]);
+ -: 481: case UNDEFINED:
+ #####: 482: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->type]);
call 0 never executed
- #####: 465: break;
- -: 466: case BOOL: {
- #####: 467: u8 c = NET_SERIAL_TYPES[(u8)e->type];
- -: 468: // set bit 4 when true
- #####: 469: if (((sBoolt *)&(e->type))->value)
+ #####: 483: break;
+ -: 484: case BOOL: {
+ #####: 485: u8 c = NET_SERIAL_TYPES[(u8)e->type];
+ -: 486: // set bit 4 when true
+ #####: 487: if (((sBoolt *)&(e->type))->value)
branch 0 never executed
branch 1 never executed
- #####: 470: c |= (1<<4);
- #####: 471: sBytesPush(r, c);
+ #####: 488: c |= (1<<4);
+ #####: 489: sBytesPush(r, c);
call 0 never executed
- -: 472: }
- #####: 473: break;
- -: 474: case CONTAINER:
- -: 475: // undefined
- #####: 476: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->type]);
+ -: 490: }
+ #####: 491: break;
+ -: 492: case CONTAINER:
+ -: 493: // undefined
+ #####: 494: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->type]);
call 0 never executed
- #####: 477: break;
- -: 478: case DICT:
- #####: 479: dictNetSerialLevel0(r, (sDictt *)e);
+ #####: 495: break;
+ -: 496: case DICT:
+ #####: 497: dictNetSerialLevel0(r, (sDictt *)e);
call 0 never executed
- #####: 480: break;
- -: 481: case DOUBLE:
- #####: 482: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->type]);
+ #####: 498: break;
+ -: 499: case DOUBLE:
+ #####: 500: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->type]);
call 0 never executed
- #####: 483: sBytesPushBuffer(r, &((sDoublet *)e)->value, sizeof(double));
+ #####: 501: sBytesPushBuffer(r, &((sDoublet *)e)->value, sizeof(double));
call 0 never executed
- #####: 484: break;
- -: 485: case INT: {
- -: 486: // encode int to varint
- -: 487: // v is int64_t to convert to varint
- #####: 488: i64 v = ((sIntt *)&(e->type))->value;
- -: 489: // encode v with arithmetic shifts
- #####: 490: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], (v << 1) ^ (v >> 63));
+ #####: 502: break;
+ -: 503: case INT: {
+ -: 504: // encode int to varint
+ -: 505: // v is int64_t to convert to varint
+ #####: 506: i64 v = ((sIntt *)&(e->type))->value;
+ -: 507: // encode v with arithmetic shifts
+ #####: 508: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], (v << 1) ^ (v >> 63));
call 0 never executed
- -: 491: }
- #####: 492: break;
- -: 493: case STRING:
- #####: 494: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->type]);
+ -: 509: }
+ #####: 510: break;
+ -: 511: case STRING:
+ #####: 512: sBytesPush(r, NET_SERIAL_TYPES[(u8)e->type]);
call 0 never executed
- #####: 495: sBytesPushBuffer(r, &((sStringt *)e)->data, sizeof(sStringt) + strlen(&(((sStringt *)e)->data)) -1);
+ #####: 513: sBytesPushBuffer(r, &((sStringt *)e)->data, sizeof(sStringt) + strlen(&(((sStringt *)e)->data)) -1);
call 0 never executed
- #####: 496: break;
- -: 497: case ARRAY:
- #####: 498: arrayNetSerialLevel0(r, (sArrayt *)e);
+ #####: 514: break;
+ -: 515: case ARRAY:
+ #####: 516: arrayNetSerialLevel0(r, (sArrayt *)e);
call 0 never executed
- #####: 499: break;
- -: 500: case BYTES:
- #####: 501: B = (sBytest *)e;
- #####: 502: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], B->count);
+ #####: 517: break;
+ -: 518: case BYTES:
+ #####: 519: B = (sBytest *)e;
+ #####: 520: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], B->count);
call 0 never executed
- #####: 503: sBytesPushBuffer(r, &(B->data), B->count);
+ #####: 521: sBytesPushBuffer(r, &(B->data), B->count);
call 0 never executed
- #####: 504: break;
- -: 505: }
- -: 506: }
- -: 507: }
- #####: 508: ret;
- -: 509:}
- -: 510:
+ #####: 522: break;
+ -: 523: }
+ -: 524: }
+ -: 525: }
+ #####: 526: ret;
+ -: 527:}
+ -: 528:
function serialNetSerialLevel0 called 0 returned 0% blocks executed 0%
- #####: 511:internal smallBytest* serialNetSerialLevel0(smallJsont *self) {
- -: 512:
- #####: 513: smallt *o = getsoG(self);
-call 0 never executed
- -: 514:
- #####: 515: if (o == NULL)
-branch 0 never executed
-branch 1 never executed
- #####: 516: ret NULL;
- -: 517:
- #####: 518: sBytest *B = netSerialLevel0(o);
+ #####: 529:internal smallBytest* serialNetSerialLevel0(smallJsont *self) {
+ -: 530:
+ #####: 531: smallt *o = getsoG(self);
call 0 never executed
- -: 519:
- #####: 520: if (!B) {
+ -: 532:
+ #####: 533: if (o == NULL)
branch 0 never executed
branch 1 never executed
- #####: 521: ret NULL;
- -: 522: }
- -: 523:
- #####: 524: createAllocateSmallBytes(r);
-call 0 never executed
- #####: 525: r->B = B;
- #####: 526: ret r;
- -: 527:}
- -: 528:
- -: 529:// level 1
- -: 530:
-function netSerialLevel1 called 0 returned 0% blocks executed 0%
- #####: 531:internal sBytest* netSerialLevel1(smallt *o) {
- #####: 532: sBytest *r = NULL;
- #####: 533: sBytest *B = NULL;
- #####: 534: contextt ctx = {.nibble=lowNbl, .nblOffset=0, .boolShift = 0, .boolOffset=0};
+ #####: 534: ret NULL;
-: 535:
- #####: 536: switch(o->type) {
+ #####: 536: sBytest *B = netSerialLevel0(o);
+call 0 never executed
+ -: 537:
+ #####: 538: if (!B) {
+branch 0 never executed
+branch 1 never executed
+ #####: 539: ret NULL;
+ -: 540: }
+ -: 541:
+ #####: 542: createAllocateSmallBytes(r);
+call 0 never executed
+ #####: 543: r->B = B;
+ #####: 544: ret r;
+ -: 545:}
+ -: 546:
+ -: 547:// level 1
+ -: 548:// like level 0 with type encoded in nibbles and bools are packed
+ -: 549:
+ -: 550:/**
+ -: 551: * serializer top function
+ -: 552: */
+function netSerialLevel1 called 0 returned 0% blocks executed 0%
+ #####: 553:internal sBytest* netSerialLevel1(smallt *o) {
+ #####: 554: sBytest *r = NULL;
+ #####: 555: sBytest *B = NULL;
+ #####: 556: contextt ctx = {.nibble=lowNbl, .nblOffset=0, .boolShift = 0, .boolOffset=0};
+ -: 557:
+ #####: 558: switch(o->type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -786,106 +808,106 @@ branch 5 never executed
branch 6 never executed
branch 7 never executed
branch 8 never executed
- -: 537: case UNDEFINED:
- -: 538: case CONTAINER:
- #####: 539: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
+ -: 559: case UNDEFINED:
+ -: 560: case CONTAINER:
+ #####: 561: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
call 0 never executed
- #####: 540: break;
- -: 541: case BOOL: {
- #####: 542: u8 c = NET_SERIAL_TYPES[(u8)o->type];
- -: 543: // set bit 4 when true
- #####: 544: if (((sBoolt *)&(o->type))->value)
+ #####: 562: break;
+ -: 563: case BOOL: {
+ #####: 564: u8 c = NET_SERIAL_TYPES[(u8)o->type];
+ -: 565: // set bit 4 when true
+ #####: 566: if (((sBoolt *)&(o->type))->value)
branch 0 never executed
branch 1 never executed
- #####: 545: c |= (1<<4);
- #####: 546: sBytesPush(&r, c);
+ #####: 567: c |= (1<<4);
+ #####: 568: sBytesPush(&r, c);
call 0 never executed
- -: 547: }
- #####: 548: break;
- -: 549: case DICT:
- #####: 550: dictNetSerialLevel1(&r, (sDictt *)&(o->type), &ctx);
+ -: 569: }
+ #####: 570: break;
+ -: 571: case DICT:
+ #####: 572: dictNetSerialLevel1(&r, (sDictt *)&(o->type), &ctx);
call 0 never executed
- #####: 551: break;
- -: 552: case DOUBLE:
- #####: 553: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
+ #####: 573: break;
+ -: 574: case DOUBLE:
+ #####: 575: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
call 0 never executed
- #####: 554: sBytesPushBuffer(&r, &((sDoublet *)&(o->type))->value, sizeof(double));
+ #####: 576: sBytesPushBuffer(&r, &((sDoublet *)&(o->type))->value, sizeof(double));
call 0 never executed
- #####: 555: break;
- -: 556: case INT: {
- -: 557: // encode int to varint
- -: 558: // v is int64_t to convert to varint
- #####: 559: i64 v = ((sIntt *)&(o->type))->value;
- -: 560: // encode v with arithmetic shifts
- #####: 561: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], (v << 1) ^ (v >> 63));
+ #####: 577: break;
+ -: 578: case INT: {
+ -: 579: // encode int to varint
+ -: 580: // v is int64_t to convert to varint
+ #####: 581: i64 v = ((sIntt *)&(o->type))->value;
+ -: 582: // encode v with arithmetic shifts
+ #####: 583: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], (v << 1) ^ (v >> 63));
call 0 never executed
- -: 562: }
- #####: 563: break;
- -: 564: case STRING:
- #####: 565: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
+ -: 584: }
+ #####: 585: break;
+ -: 586: case STRING:
+ #####: 587: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
call 0 never executed
- #####: 566: sBytesPushBuffer(&r, &((sStringt *)&(o->type))->data, sizeof(sStringt) + strlen(&(((sStringt *)&(o->type))->data)) -1);
+ #####: 588: sBytesPushBuffer(&r, &((sStringt *)&(o->type))->data, sizeof(sStringt) + strlen(&(((sStringt *)&(o->type))->data)) -1);
call 0 never executed
- #####: 567: break;
- -: 568: case ARRAY:
- #####: 569: arrayNetSerialLevel1(&r, (sArrayt *)&(o->type), &ctx);
+ #####: 589: break;
+ -: 590: case ARRAY:
+ #####: 591: arrayNetSerialLevel1(&r, (sArrayt *)&(o->type), &ctx);
call 0 never executed
- #####: 570: break;
- -: 571: case BYTES:
- #####: 572: B = (sBytest *)&(o->type);
- #####: 573: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], B->count);
-call 0 never executed
- #####: 574: sBytesPushBuffer(&r, &(B->data), B->count);
-call 0 never executed
- #####: 575: break;
- -: 576: }
- #####: 577: ret r;
- -: 578:}
- -: 579:
- -: 580:/**
- -: 581: * serialize dictionary
- -: 582: *
- -: 583: * the serialized dict is pushed to r.
- -: 584: * All elements are serialized recursively
- -: 585: *
- -: 586: * the data in containers is not serialized
- -: 587: *
- -: 588: * \param
- -: 589: * r small bytes object
- -: 590: * dict dictionary to serialize
- -: 591: */
+ #####: 592: break;
+ -: 593: case BYTES:
+ #####: 594: B = (sBytest *)&(o->type);
+ #####: 595: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], B->count);
+call 0 never executed
+ #####: 596: sBytesPushBuffer(&r, &(B->data), B->count);
+call 0 never executed
+ #####: 597: break;
+ -: 598: }
+ #####: 599: ret r;
+ -: 600:}
+ -: 601:
+ -: 602:/**
+ -: 603: * serialize dictionary
+ -: 604: *
+ -: 605: * the serialized dict is pushed to r.
+ -: 606: * All elements are serialized recursively
+ -: 607: *
+ -: 608: * the data in containers is not serialized
+ -: 609: *
+ -: 610: * \param
+ -: 611: * r small bytes object
+ -: 612: * dict dictionary to serialize
+ -: 613: */
function dictNetSerialLevel1 called 0 returned 0% blocks executed 0%
- #####: 592:internal void dictNetSerialLevel1(sBytest **r, sDictt *dict, contextt *ctx) {
- #####: 593: sBytest *B = NULL;
- #####: 594: char *data = NULL;
- -: 595:
- #####: 596: if (ctx->nibble == lowNbl) {
+ #####: 614:internal void dictNetSerialLevel1(sBytest **r, sDictt *dict, contextt *ctx) {
+ #####: 615: sBytest *B = NULL;
+ #####: 616: char *data = NULL;
+ -: 617:
+ #####: 618: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 597: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)dict->type], dict->count);
+ #####: 619: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)dict->type], dict->count);
call 0 never executed
- -: 598: }
- -: 599: else {
- -: 600: // high nibble
- -: 601: #define storeTypeInHighNbl(o)\
- -: 602: ctx->nibble = lowNbl;\
- -: 603: data = (char *)&((*r)->data) + ctx->nblOffset;\
- -: 604: *data |= NET_SERIAL_TYPES[(u8)o->type] << 4
- #####: 605: storeTypeInHighNbl(dict);
- #####: 606: uintToVarint(r, dict->count);
+ -: 620: }
+ -: 621: else {
+ -: 622: // high nibble
+ -: 623: #define storeTypeInHighNbl(o)\
+ -: 624: ctx->nibble = lowNbl;\
+ -: 625: data = (char *)&((*r)->data) + ctx->nblOffset;\
+ -: 626: *data |= NET_SERIAL_TYPES[(u8)o->type] << 4
+ #####: 627: storeTypeInHighNbl(dict);
+ #####: 628: uintToVarint(r, dict->count);
call 0 never executed
- -: 607: }
- -: 608:
- #####: 609: forEachSDict(dict, e) {
+ -: 629: }
+ -: 630:
+ #####: 631: forEachSDict(dict, e) {
branch 0 never executed
branch 1 never executed
- #####: 610: if (e->key) {
+ #####: 632: if (e->key) {
branch 0 never executed
branch 1 never executed
- #####: 611: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ #####: 633: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 never executed
- -: 612:
- #####: 613: switch(e->data->type) {
+ -: 634:
+ #####: 635: switch(e->data->type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -895,240 +917,240 @@ branch 5 never executed
branch 6 never executed
branch 7 never executed
branch 8 never executed
- -: 614: case UNDEFINED:
- -: 615: case CONTAINER:
- #####: 616: if (ctx->nibble == lowNbl) {
+ -: 636: case UNDEFINED:
+ -: 637: case CONTAINER:
+ #####: 638: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- -: 617: #define storeTypeOnly(o)\
- -: 618: sBytesPush(r, NET_SERIAL_TYPES[(u8)o->type]);\
- -: 619: ctx->nibble = highNbl;\
- -: 620: ctx->nblOffset = (*r)->count -1
- #####: 621: storeTypeOnly(e->data);
+ -: 639: #define storeTypeOnly(o)\
+ -: 640: sBytesPush(r, NET_SERIAL_TYPES[(u8)o->type]);\
+ -: 641: ctx->nibble = highNbl;\
+ -: 642: ctx->nblOffset = (*r)->count -1
+ #####: 643: storeTypeOnly(e->data);
call 0 never executed
- -: 622: }
- -: 623: else {
- #####: 624: storeTypeInHighNbl(e->data);
- -: 625: }
- #####: 626: break;
- -: 627: case BOOL:
- #####: 628: if (!ctx->boolOffset) {
+ -: 644: }
+ -: 645: else {
+ #####: 646: storeTypeInHighNbl(e->data);
+ -: 647: }
+ #####: 648: break;
+ -: 649: case BOOL:
+ #####: 650: if (!ctx->boolOffset) {
branch 0 never executed
branch 1 never executed
- -: 629: // new packed bools
- #####: 630: if (ctx->nibble == lowNbl) {
+ -: 651: // new packed bools
+ #####: 652: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- -: 631: #define storeNew4bPackedBool(o)\
- -: 632: u8 c = NET_SERIAL_TYPES[(u8)o->type];\
- -: 633: /* set bit 4 when true */\
- -: 634: if (((sBoolt *)(o))->value)\
- -: 635: c |= (1<<4);\
- -: 636: sBytesPush(r, c);\
- -: 637: ctx->boolShift = 5;\
- -: 638: ctx->boolOffset = (*r)->count -1
- #####: 639: storeNew4bPackedBool(e->data);
+ -: 653: #define storeNew4bPackedBool(o)\
+ -: 654: u8 c = NET_SERIAL_TYPES[(u8)o->type];\
+ -: 655: /* set bit 4 when true */\
+ -: 656: if (((sBoolt *)(o))->value)\
+ -: 657: c |= (1<<4);\
+ -: 658: sBytesPush(r, c);\
+ -: 659: ctx->boolShift = 5;\
+ -: 660: ctx->boolOffset = (*r)->count -1
+ #####: 661: storeNew4bPackedBool(e->data);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 640: }
- -: 641: else {
- -: 642: // high nibble, next byte is packed bools
- #####: 643: storeTypeInHighNbl(e->data);
- -: 644: #define storeNew8bPackedBool(o)\
- -: 645: u8 c = 0;\
- -: 646: if (((sBoolt *)(o))->value)\
- -: 647: c = 1;\
- -: 648: sBytesPush(r, c);\
- -: 649: ctx->boolShift = 1;\
- -: 650: ctx->boolOffset = (*r)->count -1
- #####: 651: storeNew8bPackedBool(e->data);
+ -: 662: }
+ -: 663: else {
+ -: 664: // high nibble, next byte is packed bools
+ #####: 665: storeTypeInHighNbl(e->data);
+ -: 666: #define storeNew8bPackedBool(o)\
+ -: 667: u8 c = 0;\
+ -: 668: if (((sBoolt *)(o))->value)\
+ -: 669: c = 1;\
+ -: 670: sBytesPush(r, c);\
+ -: 671: ctx->boolShift = 1;\
+ -: 672: ctx->boolOffset = (*r)->count -1
+ #####: 673: storeNew8bPackedBool(e->data);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 652: }
- -: 653: }
- -: 654: else {
- -: 655: // there was a bool before this one, fill bits in nibbles
- #####: 656: if (ctx->nibble == lowNbl) {
+ -: 674: }
+ -: 675: }
+ -: 676: else {
+ -: 677: // there was a bool before this one, fill bits in nibbles
+ #####: 678: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 657: if (ctx->boolShift == 8) {
+ #####: 679: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- -: 658: // previous packed bool is full
- -: 659: // this byte is the new packed bools
- #####: 660: storeNew4bPackedBool(e->data);
+ -: 680: // previous packed bool is full
+ -: 681: // this byte is the new packed bools
+ #####: 682: storeNew4bPackedBool(e->data);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 661: }
- -: 662: else {
- #####: 663: storeTypeOnly(e->data);
+ -: 683: }
+ -: 684: else {
+ #####: 685: storeTypeOnly(e->data);
call 0 never executed
- -: 664: #define storeBool(o)\
- -: 665: data = (char *)&((*r)->data) + ctx->boolOffset;\
- -: 666: if (((sBoolt *)(o))->value)\
- -: 667: *data |= 1 << ctx->boolShift;\
- -: 668: ctx->boolShift++
- #####: 669: storeBool(e->data);
+ -: 686: #define storeBool(o)\
+ -: 687: data = (char *)&((*r)->data) + ctx->boolOffset;\
+ -: 688: if (((sBoolt *)(o))->value)\
+ -: 689: *data |= 1 << ctx->boolShift;\
+ -: 690: ctx->boolShift++
+ #####: 691: storeBool(e->data);
branch 0 never executed
branch 1 never executed
- -: 670: }
- -: 671: }
- -: 672: else {
- -: 673: // high nibble
- #####: 674: storeTypeInHighNbl(e->data);
- #####: 675: if (ctx->boolShift == 8) {
+ -: 692: }
+ -: 693: }
+ -: 694: else {
+ -: 695: // high nibble
+ #####: 696: storeTypeInHighNbl(e->data);
+ #####: 697: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- -: 676: // previous packed bool is full
- -: 677: // next byte is the new packed bools
- #####: 678: storeNew8bPackedBool(e->data);
+ -: 698: // previous packed bool is full
+ -: 699: // next byte is the new packed bools
+ #####: 700: storeNew8bPackedBool(e->data);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 679: }
- -: 680: else {
- #####: 681: storeBool(e->data);
-branch 0 never executed
-branch 1 never executed
- -: 682: }
- -: 683: }
- -: 684: }
- #####: 685: break;
- -: 686: case DICT:
- #####: 687: dictNetSerialLevel1(r, (sDictt *)(e->data), ctx);
-call 0 never executed
- #####: 688: break;
- -: 689: case DOUBLE:
- #####: 690: if (ctx->nibble == lowNbl) {
-branch 0 never executed
-branch 1 never executed
- #####: 691: storeTypeOnly(e->data);
-call 0 never executed
- -: 692: }
- -: 693: else {
- -: 694: // high nibble
- #####: 695: storeTypeInHighNbl(e->data);
- -: 696: }
- #####: 697: sBytesPushBuffer(r, &((sDoublet *)(e->data))->value, sizeof(double));
-call 0 never executed
- #####: 698: break;
- -: 699: case INT: {
- -: 700: // encode int to varint
- -: 701: // v is int64_t to convert to varint
- #####: 702: i64 v = ((sIntt *)(e->data))->value;
- #####: 703: if (ctx->nibble == lowNbl) {
-branch 0 never executed
-branch 1 never executed
- -: 704: // encode v with arithmetic shifts
- #####: 705: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], (v << 1) ^ (v >> 63));
-call 0 never executed
- -: 706: }
- -: 707: else {
- -: 708: // high nibble
- #####: 709: storeTypeInHighNbl(e->data);
- #####: 710: uintToVarint(r, (v << 1) ^ (v >> 63));
-call 0 never executed
- -: 711: }
- -: 712: }
- #####: 713: break;
- -: 714: case STRING:
- #####: 715: if (ctx->nibble == lowNbl) {
-branch 0 never executed
-branch 1 never executed
- #####: 716: storeTypeOnly(e->data);
-call 0 never executed
- -: 717: }
- -: 718: else {
- -: 719: // high nibble
- #####: 720: storeTypeInHighNbl(e->data);
- -: 721: }
- #####: 722: sBytesPushBuffer(r, &((sStringt *)(e->data))->data, sizeof(sStringt) + strlen(&(((sStringt *)(e->data))->data)) -1);
-call 0 never executed
- #####: 723: break;
- -: 724: case ARRAY:
- #####: 725: arrayNetSerialLevel1(r, (sArrayt *)(e->data), ctx);
-call 0 never executed
- #####: 726: break;
- -: 727: case BYTES:
- #####: 728: B = (sBytest *)(e->data);
- #####: 729: if (ctx->nibble == lowNbl) {
-branch 0 never executed
-branch 1 never executed
- #####: 730: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], B->count);
-call 0 never executed
- -: 731: }
- -: 732: else {
- -: 733: // high nibble
- #####: 734: storeTypeInHighNbl(e->data);
- #####: 735: uintToVarint(r, B->count);
-call 0 never executed
- -: 736: }
- #####: 737: sBytesPushBuffer(r, &(B->data), B->count);
-call 0 never executed
- #####: 738: break;
- -: 739: }
- -: 740: }
- -: 741: }
- #####: 742: ret;
- -: 743:}
- -: 744:
- -: 745:/**
- -: 746: * serialize array
- -: 747: *
- -: 748: * the serialized array is pushed to r.
- -: 749: * All elements are serialized recursively
- -: 750: *
- -: 751: * the data in containers is not serialized
- -: 752: *
- -: 753: * \param
- -: 754: * r small bytes object
- -: 755: * array to serialize
- -: 756: */
-function arrayNetSerialLevel1 called 0 returned 0% blocks executed 0%
- #####: 757:internal void arrayNetSerialLevel1(sBytest **r, sArrayt *array, contextt *ctx) {
- #####: 758: sBytest *B = NULL;
- #####: 759: char *data = NULL;
- -: 760:
- #####: 761: if (ctx->nibble == lowNbl) {
+ -: 701: }
+ -: 702: else {
+ #####: 703: storeBool(e->data);
branch 0 never executed
branch 1 never executed
- #####: 762: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)array->type], array->count);
+ -: 704: }
+ -: 705: }
+ -: 706: }
+ #####: 707: break;
+ -: 708: case DICT:
+ #####: 709: dictNetSerialLevel1(r, (sDictt *)(e->data), ctx);
call 0 never executed
+ #####: 710: break;
+ -: 711: case DOUBLE:
+ #####: 712: if (ctx->nibble == lowNbl) {
+branch 0 never executed
+branch 1 never executed
+ #####: 713: storeTypeOnly(e->data);
+call 0 never executed
+ -: 714: }
+ -: 715: else {
+ -: 716: // high nibble
+ #####: 717: storeTypeInHighNbl(e->data);
+ -: 718: }
+ #####: 719: sBytesPushBuffer(r, &((sDoublet *)(e->data))->value, sizeof(double));
+call 0 never executed
+ #####: 720: break;
+ -: 721: case INT: {
+ -: 722: // encode int to varint
+ -: 723: // v is int64_t to convert to varint
+ #####: 724: i64 v = ((sIntt *)(e->data))->value;
+ #####: 725: if (ctx->nibble == lowNbl) {
+branch 0 never executed
+branch 1 never executed
+ -: 726: // encode v with arithmetic shifts
+ #####: 727: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], (v << 1) ^ (v >> 63));
+call 0 never executed
+ -: 728: }
+ -: 729: else {
+ -: 730: // high nibble
+ #####: 731: storeTypeInHighNbl(e->data);
+ #####: 732: uintToVarint(r, (v << 1) ^ (v >> 63));
+call 0 never executed
+ -: 733: }
+ -: 734: }
+ #####: 735: break;
+ -: 736: case STRING:
+ #####: 737: if (ctx->nibble == lowNbl) {
+branch 0 never executed
+branch 1 never executed
+ #####: 738: storeTypeOnly(e->data);
+call 0 never executed
+ -: 739: }
+ -: 740: else {
+ -: 741: // high nibble
+ #####: 742: storeTypeInHighNbl(e->data);
+ -: 743: }
+ #####: 744: sBytesPushBuffer(r, &((sStringt *)(e->data))->data, sizeof(sStringt) + strlen(&(((sStringt *)(e->data))->data)) -1);
+call 0 never executed
+ #####: 745: break;
+ -: 746: case ARRAY:
+ #####: 747: arrayNetSerialLevel1(r, (sArrayt *)(e->data), ctx);
+call 0 never executed
+ #####: 748: break;
+ -: 749: case BYTES:
+ #####: 750: B = (sBytest *)(e->data);
+ #####: 751: if (ctx->nibble == lowNbl) {
+branch 0 never executed
+branch 1 never executed
+ #####: 752: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], B->count);
+call 0 never executed
+ -: 753: }
+ -: 754: else {
+ -: 755: // high nibble
+ #####: 756: storeTypeInHighNbl(e->data);
+ #####: 757: uintToVarint(r, B->count);
+call 0 never executed
+ -: 758: }
+ #####: 759: sBytesPushBuffer(r, &(B->data), B->count);
+call 0 never executed
+ #####: 760: break;
+ -: 761: }
+ -: 762: }
-: 763: }
- -: 764: else {
- -: 765: // high nibble
- #####: 766: storeTypeInHighNbl(array);
- #####: 767: uintToVarint(r, array->count);
+ #####: 764: ret;
+ -: 765:}
+ -: 766:
+ -: 767:/**
+ -: 768: * serialize array
+ -: 769: *
+ -: 770: * the serialized array is pushed to r.
+ -: 771: * All elements are serialized recursively
+ -: 772: *
+ -: 773: * the data in containers is not serialized
+ -: 774: *
+ -: 775: * \param
+ -: 776: * r small bytes object
+ -: 777: * array to serialize
+ -: 778: */
+function arrayNetSerialLevel1 called 0 returned 0% blocks executed 0%
+ #####: 779:internal void arrayNetSerialLevel1(sBytest **r, sArrayt *array, contextt *ctx) {
+ #####: 780: sBytest *B = NULL;
+ #####: 781: char *data = NULL;
+ -: 782:
+ #####: 783: if (ctx->nibble == lowNbl) {
+branch 0 never executed
+branch 1 never executed
+ #####: 784: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)array->type], array->count);
+call 0 never executed
+ -: 785: }
+ -: 786: else {
+ -: 787: // high nibble
+ #####: 788: storeTypeInHighNbl(array);
+ #####: 789: uintToVarint(r, array->count);
call 0 never executed
- -: 768: }
- -: 769:
- #####: 770: forEachSArray(array, e) {
+ -: 790: }
+ -: 791:
+ #####: 792: forEachSArray(array, e) {
branch 0 never executed
branch 1 never executed
- #####: 771: if (!e) {
+ #####: 793: if (!e) {
branch 0 never executed
branch 1 never executed
- -: 772: // empty slots are represented as undefined elements
- #####: 773: if (ctx->nibble == lowNbl) {
+ -: 794: // empty slots are represented as undefined elements
+ #####: 795: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 774: sBytesPush(r, NET_SERIAL_TYPES[UNDEFINED]);
+ #####: 796: sBytesPush(r, NET_SERIAL_TYPES[UNDEFINED]);
call 0 never executed
- #####: 775: ctx->nibble = highNbl;
- #####: 776: ctx->nblOffset = (*r)->count -1;
- -: 777: }
- -: 778: else {
- -: 779: // high nibble
- #####: 780: ctx->nibble = lowNbl;
- #####: 781: data = (char *)&((*r)->data) + ctx->nblOffset;
- #####: 782: *data |= NET_SERIAL_TYPES[UNDEFINED] << 4;
- -: 783: }
- -: 784: }
- -: 785: else {
- #####: 786: switch(e->type) {
+ #####: 797: ctx->nibble = highNbl;
+ #####: 798: ctx->nblOffset = (*r)->count -1;
+ -: 799: }
+ -: 800: else {
+ -: 801: // high nibble
+ #####: 802: ctx->nibble = lowNbl;
+ #####: 803: data = (char *)&((*r)->data) + ctx->nblOffset;
+ #####: 804: *data |= NET_SERIAL_TYPES[UNDEFINED] << 4;
+ -: 805: }
+ -: 806: }
+ -: 807: else {
+ #####: 808: switch(e->type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -1138,198 +1160,202 @@ branch 5 never executed
branch 6 never executed
branch 7 never executed
branch 8 never executed
- -: 787: case UNDEFINED:
- -: 788: case CONTAINER:
- #####: 789: if (ctx->nibble == lowNbl) {
+ -: 809: case UNDEFINED:
+ -: 810: case CONTAINER:
+ #####: 811: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 790: storeTypeOnly(e);
+ #####: 812: storeTypeOnly(e);
call 0 never executed
- -: 791: }
- -: 792: else {
- -: 793: // high nibble
- #####: 794: storeTypeInHighNbl(e);
- -: 795: }
- #####: 796: break;
- -: 797: case BOOL:
- #####: 798: if (!ctx->boolOffset) {
+ -: 813: }
+ -: 814: else {
+ -: 815: // high nibble
+ #####: 816: storeTypeInHighNbl(e);
+ -: 817: }
+ #####: 818: break;
+ -: 819: case BOOL:
+ #####: 820: if (!ctx->boolOffset) {
branch 0 never executed
branch 1 never executed
- -: 799: // new packed bools
- #####: 800: if (ctx->nibble == lowNbl) {
+ -: 821: // new packed bools
+ #####: 822: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 801: storeNew4bPackedBool(e);
+ #####: 823: storeNew4bPackedBool(e);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 802: }
- -: 803: else {
- -: 804: // high nibble, next byte is packed bools
- #####: 805: storeTypeInHighNbl(e);
- #####: 806: storeNew8bPackedBool(e);
+ -: 824: }
+ -: 825: else {
+ -: 826: // high nibble, next byte is packed bools
+ #####: 827: storeTypeInHighNbl(e);
+ #####: 828: storeNew8bPackedBool(e);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 807: }
- -: 808: }
- -: 809: else {
- -: 810: // there was a bool before this one, fill bits in nibbles
- #####: 811: if (ctx->nibble == lowNbl) {
+ -: 829: }
+ -: 830: }
+ -: 831: else {
+ -: 832: // there was a bool before this one, fill bits in nibbles
+ #####: 833: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 812: if (ctx->boolShift == 8) {
+ #####: 834: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- -: 813: // previous packed bool is full
- -: 814: // this byte is the new packed bools
- #####: 815: storeNew4bPackedBool(e);
+ -: 835: // previous packed bool is full
+ -: 836: // this byte is the new packed bools
+ #####: 837: storeNew4bPackedBool(e);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 816: }
- -: 817: else {
- #####: 818: storeTypeOnly(e);
+ -: 838: }
+ -: 839: else {
+ #####: 840: storeTypeOnly(e);
call 0 never executed
- #####: 819: storeBool(e);
+ #####: 841: storeBool(e);
branch 0 never executed
branch 1 never executed
- -: 820: }
- -: 821: }
- -: 822: else {
- -: 823: // high nibble
- #####: 824: storeTypeInHighNbl(e);
- #####: 825: if (ctx->boolShift == 8) {
+ -: 842: }
+ -: 843: }
+ -: 844: else {
+ -: 845: // high nibble
+ #####: 846: storeTypeInHighNbl(e);
+ #####: 847: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- -: 826: // previous packed bool is full
- -: 827: // next byte is the new packed bools
- #####: 828: storeNew8bPackedBool(e);
+ -: 848: // previous packed bool is full
+ -: 849: // next byte is the new packed bools
+ #####: 850: storeNew8bPackedBool(e);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 829: }
- -: 830: else {
- #####: 831: storeBool(e);
+ -: 851: }
+ -: 852: else {
+ #####: 853: storeBool(e);
branch 0 never executed
branch 1 never executed
- -: 832: }
- -: 833: }
- -: 834: }
- #####: 835: break;
- -: 836: case DICT:
- #####: 837: dictNetSerialLevel1(r, (sDictt *)e, ctx);
+ -: 854: }
+ -: 855: }
+ -: 856: }
+ #####: 857: break;
+ -: 858: case DICT:
+ #####: 859: dictNetSerialLevel1(r, (sDictt *)e, ctx);
call 0 never executed
- #####: 838: break;
- -: 839: case DOUBLE:
- #####: 840: if (ctx->nibble == lowNbl) {
+ #####: 860: break;
+ -: 861: case DOUBLE:
+ #####: 862: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 841: storeTypeOnly(e);
+ #####: 863: storeTypeOnly(e);
call 0 never executed
- -: 842: }
- -: 843: else {
- -: 844: // high nibble
- #####: 845: storeTypeInHighNbl(e);
- -: 846: }
- #####: 847: sBytesPushBuffer(r, &((sDoublet *)e)->value, sizeof(double));
+ -: 864: }
+ -: 865: else {
+ -: 866: // high nibble
+ #####: 867: storeTypeInHighNbl(e);
+ -: 868: }
+ #####: 869: sBytesPushBuffer(r, &((sDoublet *)e)->value, sizeof(double));
call 0 never executed
- #####: 848: break;
- -: 849: case INT: {
- -: 850: // encode int to varint
- -: 851: // v is int64_t to convert to varint
- #####: 852: i64 v = ((sIntt *)&(e->type))->value;
- #####: 853: if (ctx->nibble == lowNbl) {
+ #####: 870: break;
+ -: 871: case INT: {
+ -: 872: // encode int to varint
+ -: 873: // v is int64_t to convert to varint
+ #####: 874: i64 v = ((sIntt *)&(e->type))->value;
+ #####: 875: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- -: 854: // encode v with arithmetic shifts
- #####: 855: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], (v << 1) ^ (v >> 63));
+ -: 876: // encode v with arithmetic shifts
+ #####: 877: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], (v << 1) ^ (v >> 63));
call 0 never executed
- -: 856: }
- -: 857: else {
- -: 858: // high nibble
- #####: 859: storeTypeInHighNbl(e);
- #####: 860: uintToVarint(r, (v << 1) ^ (v >> 63));
+ -: 878: }
+ -: 879: else {
+ -: 880: // high nibble
+ #####: 881: storeTypeInHighNbl(e);
+ #####: 882: uintToVarint(r, (v << 1) ^ (v >> 63));
call 0 never executed
- -: 861: }
- -: 862: }
- #####: 863: break;
- -: 864: case STRING:
- #####: 865: if (ctx->nibble == lowNbl) {
+ -: 883: }
+ -: 884: }
+ #####: 885: break;
+ -: 886: case STRING:
+ #####: 887: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 866: storeTypeOnly(e);
+ #####: 888: storeTypeOnly(e);
call 0 never executed
- -: 867: }
- -: 868: else {
- -: 869: // high nibble
- #####: 870: storeTypeInHighNbl(e);
- -: 871: }
- #####: 872: sBytesPushBuffer(r, &((sStringt *)e)->data, sizeof(sStringt) + strlen(&(((sStringt *)e)->data)) -1);
+ -: 889: }
+ -: 890: else {
+ -: 891: // high nibble
+ #####: 892: storeTypeInHighNbl(e);
+ -: 893: }
+ #####: 894: sBytesPushBuffer(r, &((sStringt *)e)->data, sizeof(sStringt) + strlen(&(((sStringt *)e)->data)) -1);
call 0 never executed
- #####: 873: break;
- -: 874: case ARRAY:
- #####: 875: arrayNetSerialLevel1(r, (sArrayt *)e, ctx);
+ #####: 895: break;
+ -: 896: case ARRAY:
+ #####: 897: arrayNetSerialLevel1(r, (sArrayt *)e, ctx);
call 0 never executed
- #####: 876: break;
- -: 877: case BYTES:
- #####: 878: B = (sBytest *)e;
- #####: 879: if (ctx->nibble == lowNbl) {
+ #####: 898: break;
+ -: 899: case BYTES:
+ #####: 900: B = (sBytest *)e;
+ #####: 901: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 880: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], B->count);
+ #####: 902: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], B->count);
call 0 never executed
- -: 881: }
- -: 882: else {
- -: 883: // high nibble
- #####: 884: storeTypeInHighNbl(e);
- #####: 885: uintToVarint(r, B->count);
+ -: 903: }
+ -: 904: else {
+ -: 905: // high nibble
+ #####: 906: storeTypeInHighNbl(e);
+ #####: 907: uintToVarint(r, B->count);
call 0 never executed
- -: 886: }
- #####: 887: sBytesPushBuffer(r, &(B->data), B->count);
+ -: 908: }
+ #####: 909: sBytesPushBuffer(r, &(B->data), B->count);
call 0 never executed
- #####: 888: break;
- -: 889: }
- -: 890: }
- -: 891: }
- #####: 892: ret;
- -: 893:}
- -: 894:
+ #####: 910: break;
+ -: 911: }
+ -: 912: }
+ -: 913: }
+ #####: 914: ret;
+ -: 915:}
+ -: 916:
function serialNetSerialLevel1 called 0 returned 0% blocks executed 0%
- #####: 895:internal smallBytest* serialNetSerialLevel1(smallJsont *self) {
- -: 896:
- #####: 897: smallt *o = getsoG(self);
+ #####: 917:internal smallBytest* serialNetSerialLevel1(smallJsont *self) {
+ -: 918:
+ #####: 919: smallt *o = getsoG(self);
call 0 never executed
- -: 898:
- #####: 899: if (o == NULL)
+ -: 920:
+ #####: 921: if (o == NULL)
branch 0 never executed
branch 1 never executed
- #####: 900: ret NULL;
- -: 901:
- #####: 902: sBytest *B = netSerialLevel1(o);
+ #####: 922: ret NULL;
+ -: 923:
+ #####: 924: sBytest *B = netSerialLevel1(o);
call 0 never executed
- -: 903:
- #####: 904: if (!B) {
+ -: 925:
+ #####: 926: if (!B) {
branch 0 never executed
branch 1 never executed
- #####: 905: ret NULL;
- -: 906: }
- -: 907:
- #####: 908: createAllocateSmallBytes(r);
+ #####: 927: ret NULL;
+ -: 928: }
+ -: 929:
+ #####: 930: createAllocateSmallBytes(r);
call 0 never executed
- #####: 909: r->B = B;
- #####: 910: ret r;
- -: 911:}
- -: 912:
- -: 913:// level 2
- -: 914:
+ #####: 931: r->B = B;
+ #####: 932: ret r;
+ -: 933:}
+ -: 934:
+ -: 935:// level 2
+ -: 936:// like level 1, arrays are set to uniform when all elements are same type
+ -: 937:
+ -: 938:/**
+ -: 939: * serializer top function
+ -: 940: */
function netSerialLevel2 called 0 returned 0% blocks executed 0%
- #####: 915:internal sBytest* netSerialLevel2(smallt *o) {
- #####: 916: sBytest *r = NULL;
- #####: 917: sBytest *B = NULL;
- #####: 918: contextt ctx = {.nibble=lowNbl, .nblOffset=0, .boolShift = 0, .boolOffset=0};
- -: 919:
- #####: 920: switch(o->type) {
+ #####: 941:internal sBytest* netSerialLevel2(smallt *o) {
+ #####: 942: sBytest *r = NULL;
+ #####: 943: sBytest *B = NULL;
+ #####: 944: contextt ctx = {.nibble=lowNbl, .nblOffset=0, .boolShift = 0, .boolOffset=0};
+ -: 945:
+ #####: 946: switch(o->type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -1339,314 +1365,314 @@ branch 5 never executed
branch 6 never executed
branch 7 never executed
branch 8 never executed
- -: 921: case UNDEFINED:
- -: 922: case CONTAINER:
- #####: 923: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
-call 0 never executed
- #####: 924: break;
- -: 925: case BOOL: {
- #####: 926: u8 c = NET_SERIAL_TYPES[(u8)o->type];
- -: 927: // set bit 4 when true
- #####: 928: if (((sBoolt *)&(o->type))->value)
-branch 0 never executed
-branch 1 never executed
- #####: 929: c |= (1<<4);
- #####: 930: sBytesPush(&r, c);
-call 0 never executed
- -: 931: }
- #####: 932: break;
- -: 933: case DICT:
- #####: 934: dictNetSerialLevel2(&r, (sDictt *)&(o->type), &ctx, /*packed=*/false);
-call 0 never executed
- #####: 935: break;
- -: 936: case DOUBLE:
- #####: 937: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
-call 0 never executed
- #####: 938: sBytesPushBuffer(&r, &((sDoublet *)&(o->type))->value, sizeof(double));
-call 0 never executed
- #####: 939: break;
- -: 940: case INT: {
- -: 941: // encode int to varint
- -: 942: // v is int64_t to convert to varint
- #####: 943: i64 v = ((sIntt *)&(o->type))->value;
- -: 944: // encode v with arithmetic shifts
- #####: 945: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], (v << 1) ^ (v >> 63));
-call 0 never executed
- -: 946: }
- #####: 947: break;
- -: 948: case STRING:
+ -: 947: case UNDEFINED:
+ -: 948: case CONTAINER:
#####: 949: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
call 0 never executed
- #####: 950: sBytesPushBuffer(&r, &((sStringt *)&(o->type))->data, sizeof(sStringt) + strlen(&(((sStringt *)&(o->type))->data)) -1);
-call 0 never executed
- #####: 951: break;
- -: 952: case ARRAY:
- #####: 953: arrayNetSerialLevel2(&r, (sArrayt *)&(o->type), &ctx, /*packed=*/false);
-call 0 never executed
- #####: 954: break;
- -: 955: case BYTES:
- #####: 956: B = (sBytest *)&(o->type);
- #####: 957: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], B->count);
-call 0 never executed
- #####: 958: sBytesPushBuffer(&r, &(B->data), B->count);
-call 0 never executed
- #####: 959: break;
- -: 960: }
- #####: 961: ret r;
- -: 962:}
- -: 963:
-function isDictUniform called 31 returned 100% blocks executed 69%
- 31: 964:internal u8 isDictUniform(sDictt *dict) {
- 31: 965: bool allElementsHaveSameType = true;
- 31: 966: bool foundFirstType = false;
- 31: 967: u8 type = 0;
- 62: 968: forEachSDict(dict, e) {
-branch 0 taken 68%
-branch 1 taken 32% (fallthrough)
- 42: 969: if (e->key) {
+ #####: 950: break;
+ -: 951: case BOOL: {
+ #####: 952: u8 c = NET_SERIAL_TYPES[(u8)o->type];
+ -: 953: // set bit 4 when true
+ #####: 954: if (((sBoolt *)&(o->type))->value)
+branch 0 never executed
+branch 1 never executed
+ #####: 955: c |= (1<<4);
+ #####: 956: sBytesPush(&r, c);
+call 0 never executed
+ -: 957: }
+ #####: 958: break;
+ -: 959: case DICT:
+ #####: 960: dictNetSerialLevel2(&r, (sDictt *)&(o->type), &ctx, /*packed=*/false);
+call 0 never executed
+ #####: 961: break;
+ -: 962: case DOUBLE:
+ #####: 963: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
+call 0 never executed
+ #####: 964: sBytesPushBuffer(&r, &((sDoublet *)&(o->type))->value, sizeof(double));
+call 0 never executed
+ #####: 965: break;
+ -: 966: case INT: {
+ -: 967: // encode int to varint
+ -: 968: // v is int64_t to convert to varint
+ #####: 969: i64 v = ((sIntt *)&(o->type))->value;
+ -: 970: // encode v with arithmetic shifts
+ #####: 971: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], (v << 1) ^ (v >> 63));
+call 0 never executed
+ -: 972: }
+ #####: 973: break;
+ -: 974: case STRING:
+ #####: 975: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
+call 0 never executed
+ #####: 976: sBytesPushBuffer(&r, &((sStringt *)&(o->type))->data, sizeof(sStringt) + strlen(&(((sStringt *)&(o->type))->data)) -1);
+call 0 never executed
+ #####: 977: break;
+ -: 978: case ARRAY:
+ #####: 979: arrayNetSerialLevel2(&r, (sArrayt *)&(o->type), &ctx, /*packed=*/false);
+call 0 never executed
+ #####: 980: break;
+ -: 981: case BYTES:
+ #####: 982: B = (sBytest *)&(o->type);
+ #####: 983: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], B->count);
+call 0 never executed
+ #####: 984: sBytesPushBuffer(&r, &(B->data), B->count);
+call 0 never executed
+ #####: 985: break;
+ -: 986: }
+ #####: 987: ret r;
+ -: 988:}
+ -: 989:
+function isDictUniform called 33 returned 100% blocks executed 69%
+ 33: 990:internal u8 isDictUniform(sDictt *dict) {
+ 33: 991: bool allElementsHaveSameType = true;
+ 33: 992: bool foundFirstType = false;
+ 33: 993: u8 type = 0;
+ 66: 994: forEachSDict(dict, e) {
+branch 0 taken 67%
+branch 1 taken 33% (fallthrough)
+ 44: 995: if (e->key) {
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- 42: 970: if (foundFirstType) {
-branch 0 taken 40% (fallthrough)
-branch 1 taken 60%
- -: 971: u8 nextType;
- 17: 972: switch(e->data->type) {
+ 44: 996: if (foundFirstType) {
+branch 0 taken 39% (fallthrough)
+branch 1 taken 61%
+ -: 997: u8 nextType;
+ 17: 998: switch(e->data->type) {
branch 0 taken 0%
branch 1 taken 0%
branch 2 taken 100%
- -: 973: case DICT:
- #####: 974: nextType = isDictUniform((sDictt*)e->data);
-call 0 never executed
- #####: 975: break;
- -: 976: case ARRAY:
- #####: 977: nextType = isArrayUniform((sArrayt*)e->data);
-call 0 never executed
- #####: 978: break;
- -: 979: default:
- 17: 980: nextType = NET_SERIAL_TYPES[(u8)e->data->type];
- -: 981: }
- 17: 982: if (nextType != type) {
+ -: 999: case DICT:
+ #####: 1000: nextType = isDictUniform((sDictt*)e->data);
+call 0 never executed
+ #####: 1001: break;
+ -: 1002: case ARRAY:
+ #####: 1003: nextType = isArrayUniform((sArrayt*)e->data);
+call 0 never executed
+ #####: 1004: break;
+ -: 1005: default:
+ 17: 1006: nextType = NET_SERIAL_TYPES[(u8)e->data->type];
+ -: 1007: }
+ 17: 1008: if (nextType != type) {
branch 0 taken 65% (fallthrough)
branch 1 taken 35%
- 11: 983: allElementsHaveSameType = false;
- 11: 984: break;
- -: 985: }
- -: 986: }
- -: 987: else {
- 25: 988: switch(e->data->type) {
+ 11: 1009: allElementsHaveSameType = false;
+ 11: 1010: break;
+ -: 1011: }
+ -: 1012: }
+ -: 1013: else {
+ 27: 1014: switch(e->data->type) {
branch 0 taken 0%
branch 1 taken 0%
branch 2 taken 100%
- -: 989: case DICT:
- #####: 990: type = isDictUniform((sDictt*)e->data);
-call 0 never executed
- #####: 991: break;
- -: 992: case ARRAY:
- #####: 993: type = isArrayUniform((sArrayt*)e->data);
-call 0 never executed
- #####: 994: break;
- -: 995: default:
- 25: 996: type = NET_SERIAL_TYPES[(u8)e->data->type];
- -: 997: }
- 25: 998: foundFirstType = true;
- -: 999: }
- -: 1000: }
- -: 1001: }
- 31: 1002: if (allElementsHaveSameType)
-branch 0 taken 65% (fallthrough)
-branch 1 taken 35%
- 20: 1003: type = UNIFORM_DICT;
- -: 1004: else
- 11: 1005: type = S_DICT;
- 31: 1006: ret type;
- -: 1007:}
- -: 1008:
-function isArrayUniform called 27 returned 100% blocks executed 58%
- 27: 1009:internal u8 isArrayUniform(sArrayt *array) {
- 27: 1010: bool allElementsHaveSameType = true;
- 27: 1011: bool foundFirstType = false;
- 27: 1012: char type = 0;
- 77: 1013: forEachSArray(array, e) {
+ -: 1015: case DICT:
+ #####: 1016: type = isDictUniform((sDictt*)e->data);
+call 0 never executed
+ #####: 1017: break;
+ -: 1018: case ARRAY:
+ #####: 1019: type = isArrayUniform((sArrayt*)e->data);
+call 0 never executed
+ #####: 1020: break;
+ -: 1021: default:
+ 27: 1022: type = NET_SERIAL_TYPES[(u8)e->data->type];
+ -: 1023: }
+ 27: 1024: foundFirstType = true;
+ -: 1025: }
+ -: 1026: }
+ -: 1027: }
+ 33: 1028: if (allElementsHaveSameType)
+branch 0 taken 67% (fallthrough)
+branch 1 taken 33%
+ 22: 1029: type = UNIFORM_DICT;
+ -: 1030: else
+ 11: 1031: type = S_DICT;
+ 33: 1032: ret type;
+ -: 1033:}
+ -: 1034:
+function isArrayUniform called 28 returned 100% blocks executed 65%
+ 28: 1035:internal u8 isArrayUniform(sArrayt *array) {
+ 28: 1036: bool allElementsHaveSameType = true;
+ 28: 1037: bool foundFirstType = false;
+ 28: 1038: char type = 0;
+ 79: 1039: forEachSArray(array, e) {
branch 0 taken 73%
branch 1 taken 27% (fallthrough)
- 56: 1014: if (!e) {
+ 58: 1040: if (!e) {
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- #####: 1015: if (foundFirstType) {
+ #####: 1041: if (foundFirstType) {
branch 0 never executed
branch 1 never executed
- #####: 1016: if (type != S_UNDEFINED) {
+ #####: 1042: if (type != S_UNDEFINED) {
branch 0 never executed
branch 1 never executed
- #####: 1017: allElementsHaveSameType = false;
- #####: 1018: break;
- -: 1019: }
- -: 1020: }
- -: 1021: else {
- #####: 1022: type = S_UNDEFINED;
- #####: 1023: foundFirstType = true;
- -: 1024: }
- -: 1025: }
- -: 1026: else {
- 56: 1027: if (foundFirstType) {
+ #####: 1043: allElementsHaveSameType = false;
+ #####: 1044: break;
+ -: 1045: }
+ -: 1046: }
+ -: 1047: else {
+ #####: 1048: type = S_UNDEFINED;
+ #####: 1049: foundFirstType = true;
+ -: 1050: }
+ -: 1051: }
+ -: 1052: else {
+ 58: 1053: if (foundFirstType) {
branch 0 taken 57% (fallthrough)
branch 1 taken 43%
- -: 1028: u8 nextType;
- 32: 1029: switch(e->type) {
+ -: 1054: u8 nextType;
+ 33: 1055: switch(e->type) {
branch 0 taken 0%
branch 1 taken 0%
branch 2 taken 100%
- -: 1030: case DICT:
- #####: 1031: nextType = isDictUniform((sDictt*)e);
-call 0 never executed
- #####: 1032: break;
- -: 1033: case ARRAY:
- #####: 1034: nextType = isArrayUniform((sArrayt*)e);
-call 0 never executed
- #####: 1035: break;
- -: 1036: default:
- 32: 1037: nextType = NET_SERIAL_TYPES[(u8)e->type];
- -: 1038: }
- 32: 1039: if (nextType != type) {
-branch 0 taken 19% (fallthrough)
-branch 1 taken 81%
- 6: 1040: allElementsHaveSameType = false;
- 6: 1041: break;
- -: 1042: }
- -: 1043: }
- -: 1044: else {
- 24: 1045: switch(e->type) {
-branch 0 taken 0%
+ -: 1056: case DICT:
+ #####: 1057: nextType = isDictUniform((sDictt*)e);
+call 0 never executed
+ #####: 1058: break;
+ -: 1059: case ARRAY:
+ #####: 1060: nextType = isArrayUniform((sArrayt*)e);
+call 0 never executed
+ #####: 1061: break;
+ -: 1062: default:
+ 33: 1063: nextType = NET_SERIAL_TYPES[(u8)e->type];
+ -: 1064: }
+ 33: 1065: if (nextType != type) {
+branch 0 taken 21% (fallthrough)
+branch 1 taken 79%
+ 7: 1066: allElementsHaveSameType = false;
+ 7: 1067: break;
+ -: 1068: }
+ -: 1069: }
+ -: 1070: else {
+ 25: 1071: switch(e->type) {
+branch 0 taken 4%
branch 1 taken 0%
-branch 2 taken 100%
- -: 1046: case DICT:
- #####: 1047: type = isDictUniform((sDictt*)e);
-call 0 never executed
- #####: 1048: break;
- -: 1049: case ARRAY:
- #####: 1050: type = isArrayUniform((sArrayt*)e);
-call 0 never executed
- #####: 1051: break;
- -: 1052: default:
- 24: 1053: type = NET_SERIAL_TYPES[(u8)e->type];
- -: 1054: }
- 24: 1055: foundFirstType = true;
- -: 1056: }
- -: 1057: }
- -: 1058: }
- 27: 1059: if (allElementsHaveSameType)
-branch 0 taken 78% (fallthrough)
-branch 1 taken 22%
- 21: 1060: type = UNIFORM_ARRAY;
- -: 1061: else
- 6: 1062: type = S_ARRAY;
- 27: 1063: ret type;
- -: 1064:}
- -: 1065:
- -: 1066:/**
- -: 1067: * serialize dictionary
- -: 1068: *
- -: 1069: * the serialized dict is pushed to r.
- -: 1070: * All elements are serialized recursively
- -: 1071: *
- -: 1072: * the data in containers is not serialized
- -: 1073: *
- -: 1074: * \param
- -: 1075: * r small bytes object
- -: 1076: * dict dictionary to serialize
- -: 1077: */
+branch 2 taken 96%
+ -: 1072: case DICT:
+ 1: 1073: type = isDictUniform((sDictt*)e);
+call 0 returned 100%
+ 1: 1074: break;
+ -: 1075: case ARRAY:
+ #####: 1076: type = isArrayUniform((sArrayt*)e);
+call 0 never executed
+ #####: 1077: break;
+ -: 1078: default:
+ 24: 1079: type = NET_SERIAL_TYPES[(u8)e->type];
+ -: 1080: }
+ 25: 1081: foundFirstType = true;
+ -: 1082: }
+ -: 1083: }
+ -: 1084: }
+ 28: 1085: if (allElementsHaveSameType)
+branch 0 taken 75% (fallthrough)
+branch 1 taken 25%
+ 21: 1086: type = UNIFORM_ARRAY;
+ -: 1087: else
+ 7: 1088: type = S_ARRAY;
+ 28: 1089: ret type;
+ -: 1090:}
+ -: 1091:
+ -: 1092:/**
+ -: 1093: * serialize dictionary
+ -: 1094: *
+ -: 1095: * the serialized dict is pushed to r.
+ -: 1096: * All elements are serialized recursively
+ -: 1097: *
+ -: 1098: * the data in containers is not serialized
+ -: 1099: *
+ -: 1100: * \param
+ -: 1101: * r small bytes object
+ -: 1102: * dict dictionary to serialize
+ -: 1103: */
function dictNetSerialLevel2 called 0 returned 0% blocks executed 0%
- #####: 1078:internal void dictNetSerialLevel2(sBytest **r, sDictt *dict, contextt *ctx, bool packed) {
- #####: 1079: sBytest *B = NULL;
- #####: 1080: char *data = NULL;
- -: 1081:
- -: 1082: // check if all elements have same type
- #####: 1083: bool allElementsHaveSameType = true;
- #####: 1084: bool foundFirstType = false;
- #####: 1085: char type = 0;
- #####: 1086: {forEachSDict(dict, e) {
+ #####: 1104:internal void dictNetSerialLevel2(sBytest **r, sDictt *dict, contextt *ctx, bool packed) {
+ #####: 1105: sBytest *B = NULL;
+ #####: 1106: char *data = NULL;
+ -: 1107:
+ -: 1108: // check if all elements have same type
+ #####: 1109: bool allElementsHaveSameType = true;
+ #####: 1110: bool foundFirstType = false;
+ #####: 1111: char type = 0;
+ #####: 1112: {forEachSDict(dict, e) {
branch 0 never executed
branch 1 never executed
- #####: 1087: if (e->key) {
+ #####: 1113: if (e->key) {
branch 0 never executed
branch 1 never executed
- #####: 1088: if (foundFirstType) {
+ #####: 1114: if (foundFirstType) {
branch 0 never executed
branch 1 never executed
- -: 1089: u8 nextType;
- #####: 1090: switch(e->data->type) {
+ -: 1115: u8 nextType;
+ #####: 1116: switch(e->data->type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
- -: 1091: case DICT:
- #####: 1092: nextType = isDictUniform((sDictt*)e->data);
+ -: 1117: case DICT:
+ #####: 1118: nextType = isDictUniform((sDictt*)e->data);
call 0 never executed
- #####: 1093: break;
- -: 1094: case ARRAY:
- #####: 1095: nextType = isArrayUniform((sArrayt*)e->data);
+ #####: 1119: break;
+ -: 1120: case ARRAY:
+ #####: 1121: nextType = isArrayUniform((sArrayt*)e->data);
call 0 never executed
- #####: 1096: break;
- -: 1097: default:
- #####: 1098: nextType = NET_SERIAL_TYPES[(u8)e->data->type];
- -: 1099: }
- #####: 1100: if (nextType != type) {
+ #####: 1122: break;
+ -: 1123: default:
+ #####: 1124: nextType = NET_SERIAL_TYPES[(u8)e->data->type];
+ -: 1125: }
+ #####: 1126: if (nextType != type) {
branch 0 never executed
branch 1 never executed
- #####: 1101: allElementsHaveSameType = false;
- #####: 1102: break;
- -: 1103: }
- -: 1104: }
- -: 1105: else {
- #####: 1106: switch(e->data->type) {
+ #####: 1127: allElementsHaveSameType = false;
+ #####: 1128: break;
+ -: 1129: }
+ -: 1130: }
+ -: 1131: else {
+ #####: 1132: switch(e->data->type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
- -: 1107: case DICT:
- #####: 1108: type = isDictUniform((sDictt*)e->data);
+ -: 1133: case DICT:
+ #####: 1134: type = isDictUniform((sDictt*)e->data);
call 0 never executed
- #####: 1109: break;
- -: 1110: case ARRAY:
- #####: 1111: type = isArrayUniform((sArrayt*)e->data);
+ #####: 1135: break;
+ -: 1136: case ARRAY:
+ #####: 1137: type = isArrayUniform((sArrayt*)e->data);
call 0 never executed
- #####: 1112: break;
- -: 1113: default:
- #####: 1114: type = NET_SERIAL_TYPES[(u8)e->data->type];
- -: 1115: }
- #####: 1116: foundFirstType = true;
- -: 1117: }
- -: 1118: }
- -: 1119: }}
- -: 1120:
- #####: 1121: if (allElementsHaveSameType) {
+ #####: 1138: break;
+ -: 1139: default:
+ #####: 1140: type = NET_SERIAL_TYPES[(u8)e->data->type];
+ -: 1141: }
+ #####: 1142: foundFirstType = true;
+ -: 1143: }
+ -: 1144: }
+ -: 1145: }}
+ -: 1146:
+ #####: 1147: if (allElementsHaveSameType) {
branch 0 never executed
branch 1 never executed
- -: 1122: // pack dictionary
- #####: 1123: if (packed) {
+ -: 1148: // pack dictionary
+ #####: 1149: if (packed) {
branch 0 never executed
branch 1 never executed
- #####: 1124: uintToNetTypeVarint(r, type, dict->count);
+ #####: 1150: uintToNetTypeVarint(r, type, dict->count);
call 0 never executed
- -: 1125: }
- -: 1126: else {
- #####: 1127: if (ctx->nibble == lowNbl) {
+ -: 1151: }
+ -: 1152: else {
+ #####: 1153: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 1128: sBytesPush(r, (type << 4) + UNIFORM_DICT);
+ #####: 1154: sBytesPush(r, (type << 4) + UNIFORM_DICT);
call 0 never executed
- #####: 1129: uintToVarint(r, dict->count);
+ #####: 1155: uintToVarint(r, dict->count);
call 0 never executed
- -: 1130: }
- -: 1131: else {
- -: 1132: // high nibble
- #####: 1133: ctx->nibble = lowNbl;
- #####: 1134: data = (char *)&((*r)->data) + ctx->nblOffset;
- #####: 1135: *data |= UNIFORM_DICT << 4;
- #####: 1136: uintToNetTypeVarint(r, type, dict->count);
+ -: 1156: }
+ -: 1157: else {
+ -: 1158: // high nibble
+ #####: 1159: ctx->nibble = lowNbl;
+ #####: 1160: data = (char *)&((*r)->data) + ctx->nblOffset;
+ #####: 1161: *data |= UNIFORM_DICT << 4;
+ #####: 1162: uintToNetTypeVarint(r, type, dict->count);
call 0 never executed
- -: 1137: }
- -: 1138: }
- -: 1139:
- #####: 1140: switch(type) {
+ -: 1163: }
+ -: 1164: }
+ -: 1165:
+ #####: 1166: switch(type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -1656,188 +1682,188 @@ branch 5 never executed
branch 6 never executed
branch 7 never executed
branch 8 never executed
- -: 1141: case S_UNDEFINED:
- #####: 1142: {forEachSDict(dict, e) {
+ -: 1167: case S_UNDEFINED:
+ #####: 1168: {forEachSDict(dict, e) {
branch 0 never executed
branch 1 never executed
- #####: 1143: if (e->key) {
+ #####: 1169: if (e->key) {
branch 0 never executed
branch 1 never executed
- #####: 1144: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ #####: 1170: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 never executed
- -: 1145: }
- -: 1146: }}
- -: 1147:
- #####: 1148: break;
- -: 1149: case S_BOOL:
- #####: 1150: {forEachSDict(dict, e) {
+ -: 1171: }
+ -: 1172: }}
+ -: 1173:
+ #####: 1174: break;
+ -: 1175: case S_BOOL:
+ #####: 1176: {forEachSDict(dict, e) {
branch 0 never executed
branch 1 never executed
- #####: 1151: if (e->key) {
+ #####: 1177: if (e->key) {
branch 0 never executed
branch 1 never executed
- #####: 1152: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ #####: 1178: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 never executed
- -: 1153:
- #####: 1154: if (!ctx->boolOffset) {
+ -: 1179:
+ #####: 1180: if (!ctx->boolOffset) {
branch 0 never executed
branch 1 never executed
- -: 1155: // new packed bools
- #####: 1156: storeNew8bPackedBool(e->data);
+ -: 1181: // new packed bools
+ #####: 1182: storeNew8bPackedBool(e->data);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 1157: }
- -: 1158: else {
- -: 1159: // there was a bool before this one, fill bits in nibbles
- #####: 1160: if (ctx->boolShift == 8) {
+ -: 1183: }
+ -: 1184: else {
+ -: 1185: // there was a bool before this one, fill bits in nibbles
+ #####: 1186: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- -: 1161: // previous packed bool is full
- -: 1162: // next byte is the new packed bools
- #####: 1163: storeNew8bPackedBool(e->data);
+ -: 1187: // previous packed bool is full
+ -: 1188: // next byte is the new packed bools
+ #####: 1189: storeNew8bPackedBool(e->data);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 1164: }
- -: 1165: else {
- #####: 1166: storeBool(e->data);
+ -: 1190: }
+ -: 1191: else {
+ #####: 1192: storeBool(e->data);
branch 0 never executed
branch 1 never executed
- -: 1167: }
- -: 1168: }
- -: 1169: }
- -: 1170: }}
- #####: 1171: break;
- -: 1172: case S_DICT:
- -: 1173: case UNIFORM_DICT:
- #####: 1174: {forEachSDict(dict, e) {
+ -: 1193: }
+ -: 1194: }
+ -: 1195: }
+ -: 1196: }}
+ #####: 1197: break;
+ -: 1198: case S_DICT:
+ -: 1199: case UNIFORM_DICT:
+ #####: 1200: {forEachSDict(dict, e) {
branch 0 never executed
branch 1 never executed
- #####: 1175: if (e->key) {
+ #####: 1201: if (e->key) {
branch 0 never executed
branch 1 never executed
- #####: 1176: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ #####: 1202: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 never executed
- #####: 1177: dictNetSerialLevel2(r, (sDictt *)(e->data), ctx, /*packed=*/true);
+ #####: 1203: dictNetSerialLevel2(r, (sDictt *)(e->data), ctx, /*packed=*/true);
call 0 never executed
- -: 1178: }
- -: 1179: }}
- #####: 1180: break;
- -: 1181: case S_DOUBLE:
- #####: 1182: {forEachSDict(dict, e) {
+ -: 1204: }
+ -: 1205: }}
+ #####: 1206: break;
+ -: 1207: case S_DOUBLE:
+ #####: 1208: {forEachSDict(dict, e) {
branch 0 never executed
branch 1 never executed
- #####: 1183: if (e->key) {
+ #####: 1209: if (e->key) {
branch 0 never executed
branch 1 never executed
- #####: 1184: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ #####: 1210: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 never executed
- #####: 1185: sBytesPushBuffer(r, &((sDoublet *)(e->data))->value, sizeof(double));
+ #####: 1211: sBytesPushBuffer(r, &((sDoublet *)(e->data))->value, sizeof(double));
call 0 never executed
- -: 1186: }
- -: 1187: }}
- #####: 1188: break;
- -: 1189: case S_INT:
- #####: 1190: {forEachSDict(dict, e) {
+ -: 1212: }
+ -: 1213: }}
+ #####: 1214: break;
+ -: 1215: case S_INT:
+ #####: 1216: {forEachSDict(dict, e) {
branch 0 never executed
branch 1 never executed
- #####: 1191: if (e->key) {
+ #####: 1217: if (e->key) {
branch 0 never executed
branch 1 never executed
- #####: 1192: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ #####: 1218: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 never executed
- #####: 1193: i64 v = ((sIntt *)(e->data))->value;
- #####: 1194: uintToVarint(r, (v << 1) ^ (v >> 63));
+ #####: 1219: i64 v = ((sIntt *)(e->data))->value;
+ #####: 1220: uintToVarint(r, (v << 1) ^ (v >> 63));
call 0 never executed
- -: 1195: }
- -: 1196: }}
- #####: 1197: break;
- -: 1198: case S_STRING:
- #####: 1199: {forEachSDict(dict, e) {
+ -: 1221: }
+ -: 1222: }}
+ #####: 1223: break;
+ -: 1224: case S_STRING:
+ #####: 1225: {forEachSDict(dict, e) {
branch 0 never executed
branch 1 never executed
- #####: 1200: if (e->key) {
+ #####: 1226: if (e->key) {
branch 0 never executed
branch 1 never executed
- #####: 1201: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ #####: 1227: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 never executed
- #####: 1202: sBytesPushBuffer(r, &((sStringt *)(e->data))->data, sizeof(sStringt) + strlen(&(((sStringt *)(e->data))->data)) -1);
+ #####: 1228: sBytesPushBuffer(r, &((sStringt *)(e->data))->data, sizeof(sStringt) + strlen(&(((sStringt *)(e->data))->data)) -1);
call 0 never executed
- -: 1203: }
- -: 1204: }}
- #####: 1205: break;
- -: 1206: case S_ARRAY:
- -: 1207: case UNIFORM_ARRAY:
- #####: 1208: {forEachSDict(dict, e) {
+ -: 1229: }
+ -: 1230: }}
+ #####: 1231: break;
+ -: 1232: case S_ARRAY:
+ -: 1233: case UNIFORM_ARRAY:
+ #####: 1234: {forEachSDict(dict, e) {
branch 0 never executed
branch 1 never executed
- #####: 1209: if (e->key) {
+ #####: 1235: if (e->key) {
branch 0 never executed
branch 1 never executed
- #####: 1210: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ #####: 1236: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 never executed
- #####: 1211: arrayNetSerialLevel2(r, (sArrayt *)(e->data), ctx, /*packed=*/true);
+ #####: 1237: arrayNetSerialLevel2(r, (sArrayt *)(e->data), ctx, /*packed=*/true);
call 0 never executed
- -: 1212: }
- -: 1213: }}
- #####: 1214: break;
- -: 1215: case S_BYTES:
- #####: 1216: {forEachSDict(dict, e) {
+ -: 1238: }
+ -: 1239: }}
+ #####: 1240: break;
+ -: 1241: case S_BYTES:
+ #####: 1242: {forEachSDict(dict, e) {
branch 0 never executed
branch 1 never executed
- #####: 1217: if (e->key) {
+ #####: 1243: if (e->key) {
branch 0 never executed
branch 1 never executed
- #####: 1218: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ #####: 1244: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 never executed
- #####: 1219: B = (sBytest *)(e->data);
- #####: 1220: uintToVarint(r, B->count);
+ #####: 1245: B = (sBytest *)(e->data);
+ #####: 1246: uintToVarint(r, B->count);
call 0 never executed
- #####: 1221: sBytesPushBuffer(r, &(B->data), B->count);
+ #####: 1247: sBytesPushBuffer(r, &(B->data), B->count);
call 0 never executed
- -: 1222: }
- -: 1223: }}
- #####: 1224: break;
- -: 1225: }
- #####: 1226: ret;
- -: 1227: }
- -: 1228:
- #####: 1229: if (packed) {
+ -: 1248: }
+ -: 1249: }}
+ #####: 1250: break;
+ -: 1251: }
+ #####: 1252: ret;
+ -: 1253: }
+ -: 1254:
+ #####: 1255: if (packed) {
branch 0 never executed
branch 1 never executed
- #####: 1230: uintToVarint(r, dict->count);
+ #####: 1256: uintToVarint(r, dict->count);
call 0 never executed
- -: 1231: }
- -: 1232: else {
- #####: 1233: if (ctx->nibble == lowNbl) {
+ -: 1257: }
+ -: 1258: else {
+ #####: 1259: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 1234: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)dict->type], dict->count);
+ #####: 1260: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)dict->type], dict->count);
call 0 never executed
- -: 1235: }
- -: 1236: else {
- -: 1237: // high nibble
- -: 1238:#define storeTypeInHighNbl(o)\
- -: 1239: ctx->nibble = lowNbl;\
- -: 1240: data = (char *)&((*r)->data) + ctx->nblOffset;\
- -: 1241: *data |= NET_SERIAL_TYPES[(u8)o->type] << 4
- #####: 1242: storeTypeInHighNbl(dict);
- #####: 1243: uintToVarint(r, dict->count);
+ -: 1261: }
+ -: 1262: else {
+ -: 1263: // high nibble
+ -: 1264:#define storeTypeInHighNbl(o)\
+ -: 1265: ctx->nibble = lowNbl;\
+ -: 1266: data = (char *)&((*r)->data) + ctx->nblOffset;\
+ -: 1267: *data |= NET_SERIAL_TYPES[(u8)o->type] << 4
+ #####: 1268: storeTypeInHighNbl(dict);
+ #####: 1269: uintToVarint(r, dict->count);
call 0 never executed
- -: 1244: }
- -: 1245: }
- -: 1246:
- #####: 1247: forEachSDict(dict, e) {
+ -: 1270: }
+ -: 1271: }
+ -: 1272:
+ #####: 1273: forEachSDict(dict, e) {
branch 0 never executed
branch 1 never executed
- #####: 1248: if (e->key) {
+ #####: 1274: if (e->key) {
branch 0 never executed
branch 1 never executed
- #####: 1249: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ #####: 1275: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 never executed
- -: 1250:
- #####: 1251: switch(e->data->type) {
+ -: 1276:
+ #####: 1277: switch(e->data->type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -1847,307 +1873,307 @@ branch 5 never executed
branch 6 never executed
branch 7 never executed
branch 8 never executed
- -: 1252: case UNDEFINED:
- -: 1253: case CONTAINER:
- #####: 1254: if (ctx->nibble == lowNbl) {
+ -: 1278: case UNDEFINED:
+ -: 1279: case CONTAINER:
+ #####: 1280: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- -: 1255: #define storeTypeOnly(o)\
- -: 1256: sBytesPush(r, NET_SERIAL_TYPES[(u8)o->type]);\
- -: 1257: ctx->nibble = highNbl;\
- -: 1258: ctx->nblOffset = (*r)->count -1
- #####: 1259: storeTypeOnly(e->data);
+ -: 1281: #define storeTypeOnly(o)\
+ -: 1282: sBytesPush(r, NET_SERIAL_TYPES[(u8)o->type]);\
+ -: 1283: ctx->nibble = highNbl;\
+ -: 1284: ctx->nblOffset = (*r)->count -1
+ #####: 1285: storeTypeOnly(e->data);
call 0 never executed
- -: 1260: }
- -: 1261: else {
- #####: 1262: storeTypeInHighNbl(e->data);
- -: 1263: }
- #####: 1264: break;
- -: 1265: case BOOL:
- #####: 1266: if (!ctx->boolOffset) {
+ -: 1286: }
+ -: 1287: else {
+ #####: 1288: storeTypeInHighNbl(e->data);
+ -: 1289: }
+ #####: 1290: break;
+ -: 1291: case BOOL:
+ #####: 1292: if (!ctx->boolOffset) {
branch 0 never executed
branch 1 never executed
- -: 1267: // new packed bools
- #####: 1268: if (ctx->nibble == lowNbl) {
+ -: 1293: // new packed bools
+ #####: 1294: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- -: 1269: #define storeNew4bPackedBool(o)\
- -: 1270: u8 c = NET_SERIAL_TYPES[(u8)o->type];\
- -: 1271: /* set bit 4 when true */\
- -: 1272: if (((sBoolt *)(o))->value)\
- -: 1273: c |= (1<<4);\
- -: 1274: sBytesPush(r, c);\
- -: 1275: ctx->boolShift = 5;\
- -: 1276: ctx->boolOffset = (*r)->count -1
- #####: 1277: storeNew4bPackedBool(e->data);
+ -: 1295: #define storeNew4bPackedBool(o)\
+ -: 1296: u8 c = NET_SERIAL_TYPES[(u8)o->type];\
+ -: 1297: /* set bit 4 when true */\
+ -: 1298: if (((sBoolt *)(o))->value)\
+ -: 1299: c |= (1<<4);\
+ -: 1300: sBytesPush(r, c);\
+ -: 1301: ctx->boolShift = 5;\
+ -: 1302: ctx->boolOffset = (*r)->count -1
+ #####: 1303: storeNew4bPackedBool(e->data);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 1278: }
- -: 1279: else {
- -: 1280: // high nibble, next byte is packed bools
- #####: 1281: storeTypeInHighNbl(e->data);
- -: 1282: #define storeNew8bPackedBool(o)\
- -: 1283: u8 c = 0;\
- -: 1284: if (((sBoolt *)(o))->value)\
- -: 1285: c = 1;\
- -: 1286: sBytesPush(r, c);\
- -: 1287: ctx->boolShift = 1;\
- -: 1288: ctx->boolOffset = (*r)->count -1
- #####: 1289: storeNew8bPackedBool(e->data);
+ -: 1304: }
+ -: 1305: else {
+ -: 1306: // high nibble, next byte is packed bools
+ #####: 1307: storeTypeInHighNbl(e->data);
+ -: 1308: #define storeNew8bPackedBool(o)\
+ -: 1309: u8 c = 0;\
+ -: 1310: if (((sBoolt *)(o))->value)\
+ -: 1311: c = 1;\
+ -: 1312: sBytesPush(r, c);\
+ -: 1313: ctx->boolShift = 1;\
+ -: 1314: ctx->boolOffset = (*r)->count -1
+ #####: 1315: storeNew8bPackedBool(e->data);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 1290: }
- -: 1291: }
- -: 1292: else {
- -: 1293: // there was a bool before this one, fill bits in nibbles
- #####: 1294: if (ctx->nibble == lowNbl) {
+ -: 1316: }
+ -: 1317: }
+ -: 1318: else {
+ -: 1319: // there was a bool before this one, fill bits in nibbles
+ #####: 1320: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 1295: if (ctx->boolShift == 8) {
+ #####: 1321: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- -: 1296: // previous packed bool is full
- -: 1297: // this byte is the new packed bools
- #####: 1298: storeNew4bPackedBool(e->data);
+ -: 1322: // previous packed bool is full
+ -: 1323: // this byte is the new packed bools
+ #####: 1324: storeNew4bPackedBool(e->data);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 1299: }
- -: 1300: else {
- #####: 1301: storeTypeOnly(e->data);
+ -: 1325: }
+ -: 1326: else {
+ #####: 1327: storeTypeOnly(e->data);
call 0 never executed
- -: 1302: #define storeBool(o)\
- -: 1303: data = (char *)&((*r)->data) + ctx->boolOffset;\
- -: 1304: if (((sBoolt *)(o))->value)\
- -: 1305: *data |= 1 << ctx->boolShift;\
- -: 1306: ctx->boolShift++
- #####: 1307: storeBool(e->data);
+ -: 1328: #define storeBool(o)\
+ -: 1329: data = (char *)&((*r)->data) + ctx->boolOffset;\
+ -: 1330: if (((sBoolt *)(o))->value)\
+ -: 1331: *data |= 1 << ctx->boolShift;\
+ -: 1332: ctx->boolShift++
+ #####: 1333: storeBool(e->data);
branch 0 never executed
branch 1 never executed
- -: 1308: }
- -: 1309: }
- -: 1310: else {
- -: 1311: // high nibble
- #####: 1312: storeTypeInHighNbl(e->data);
- #####: 1313: if (ctx->boolShift == 8) {
+ -: 1334: }
+ -: 1335: }
+ -: 1336: else {
+ -: 1337: // high nibble
+ #####: 1338: storeTypeInHighNbl(e->data);
+ #####: 1339: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- -: 1314: // previous packed bool is full
- -: 1315: // next byte is the new packed bools
- #####: 1316: storeNew8bPackedBool(e->data);
+ -: 1340: // previous packed bool is full
+ -: 1341: // next byte is the new packed bools
+ #####: 1342: storeNew8bPackedBool(e->data);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 1317: }
- -: 1318: else {
- #####: 1319: storeBool(e->data);
-branch 0 never executed
-branch 1 never executed
- -: 1320: }
- -: 1321: }
- -: 1322: }
- #####: 1323: break;
- -: 1324: case DICT:
- #####: 1325: dictNetSerialLevel2(r, (sDictt *)(e->data), ctx, /*packed=*/false);
-call 0 never executed
- #####: 1326: break;
- -: 1327: case DOUBLE:
- #####: 1328: if (ctx->nibble == lowNbl) {
-branch 0 never executed
-branch 1 never executed
- #####: 1329: storeTypeOnly(e->data);
-call 0 never executed
- -: 1330: }
- -: 1331: else {
- -: 1332: // high nibble
- #####: 1333: storeTypeInHighNbl(e->data);
- -: 1334: }
- #####: 1335: sBytesPushBuffer(r, &((sDoublet *)(e->data))->value, sizeof(double));
-call 0 never executed
- #####: 1336: break;
- -: 1337: case INT: {
- -: 1338: // encode int to varint
- -: 1339: // v is int64_t to convert to varint
- #####: 1340: i64 v = ((sIntt *)(e->data))->value;
- #####: 1341: if (ctx->nibble == lowNbl) {
-branch 0 never executed
-branch 1 never executed
- -: 1342: // encode v with arithmetic shifts
- #####: 1343: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], (v << 1) ^ (v >> 63));
-call 0 never executed
- -: 1344: }
- -: 1345: else {
- -: 1346: // high nibble
- #####: 1347: storeTypeInHighNbl(e->data);
- #####: 1348: uintToVarint(r, (v << 1) ^ (v >> 63));
-call 0 never executed
- -: 1349: }
- -: 1350: }
- #####: 1351: break;
- -: 1352: case STRING:
- #####: 1353: if (ctx->nibble == lowNbl) {
-branch 0 never executed
-branch 1 never executed
- #####: 1354: storeTypeOnly(e->data);
-call 0 never executed
- -: 1355: }
- -: 1356: else {
- -: 1357: // high nibble
- #####: 1358: storeTypeInHighNbl(e->data);
- -: 1359: }
- #####: 1360: sBytesPushBuffer(r, &((sStringt *)(e->data))->data, sizeof(sStringt) + strlen(&(((sStringt *)(e->data))->data)) -1);
-call 0 never executed
- #####: 1361: break;
- -: 1362: case ARRAY:
- #####: 1363: arrayNetSerialLevel2(r, (sArrayt *)(e->data), ctx, /*packed=*/false);
-call 0 never executed
- #####: 1364: break;
- -: 1365: case BYTES:
- #####: 1366: B = (sBytest *)(e->data);
- #####: 1367: if (ctx->nibble == lowNbl) {
-branch 0 never executed
-branch 1 never executed
- #####: 1368: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], B->count);
-call 0 never executed
- -: 1369: }
- -: 1370: else {
- -: 1371: // high nibble
- #####: 1372: storeTypeInHighNbl(e->data);
- #####: 1373: uintToVarint(r, B->count);
-call 0 never executed
- -: 1374: }
- #####: 1375: sBytesPushBuffer(r, &(B->data), B->count);
-call 0 never executed
- #####: 1376: break;
- -: 1377: }
- -: 1378: }
- -: 1379: }
- #####: 1380: ret;
- -: 1381:}
- -: 1382:
- -: 1383:/**
- -: 1384: * serialize array
- -: 1385: *
- -: 1386: * the serialized array is pushed to r.
- -: 1387: * All elements are serialized recursively
- -: 1388: *
- -: 1389: * the data in containers is not serialized
- -: 1390: *
- -: 1391: * \param
- -: 1392: * r small bytes object
- -: 1393: * array to serialize
- -: 1394: */
+ -: 1343: }
+ -: 1344: else {
+ #####: 1345: storeBool(e->data);
+branch 0 never executed
+branch 1 never executed
+ -: 1346: }
+ -: 1347: }
+ -: 1348: }
+ #####: 1349: break;
+ -: 1350: case DICT:
+ #####: 1351: dictNetSerialLevel2(r, (sDictt *)(e->data), ctx, /*packed=*/false);
+call 0 never executed
+ #####: 1352: break;
+ -: 1353: case DOUBLE:
+ #####: 1354: if (ctx->nibble == lowNbl) {
+branch 0 never executed
+branch 1 never executed
+ #####: 1355: storeTypeOnly(e->data);
+call 0 never executed
+ -: 1356: }
+ -: 1357: else {
+ -: 1358: // high nibble
+ #####: 1359: storeTypeInHighNbl(e->data);
+ -: 1360: }
+ #####: 1361: sBytesPushBuffer(r, &((sDoublet *)(e->data))->value, sizeof(double));
+call 0 never executed
+ #####: 1362: break;
+ -: 1363: case INT: {
+ -: 1364: // encode int to varint
+ -: 1365: // v is int64_t to convert to varint
+ #####: 1366: i64 v = ((sIntt *)(e->data))->value;
+ #####: 1367: if (ctx->nibble == lowNbl) {
+branch 0 never executed
+branch 1 never executed
+ -: 1368: // encode v with arithmetic shifts
+ #####: 1369: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], (v << 1) ^ (v >> 63));
+call 0 never executed
+ -: 1370: }
+ -: 1371: else {
+ -: 1372: // high nibble
+ #####: 1373: storeTypeInHighNbl(e->data);
+ #####: 1374: uintToVarint(r, (v << 1) ^ (v >> 63));
+call 0 never executed
+ -: 1375: }
+ -: 1376: }
+ #####: 1377: break;
+ -: 1378: case STRING:
+ #####: 1379: if (ctx->nibble == lowNbl) {
+branch 0 never executed
+branch 1 never executed
+ #####: 1380: storeTypeOnly(e->data);
+call 0 never executed
+ -: 1381: }
+ -: 1382: else {
+ -: 1383: // high nibble
+ #####: 1384: storeTypeInHighNbl(e->data);
+ -: 1385: }
+ #####: 1386: sBytesPushBuffer(r, &((sStringt *)(e->data))->data, sizeof(sStringt) + strlen(&(((sStringt *)(e->data))->data)) -1);
+call 0 never executed
+ #####: 1387: break;
+ -: 1388: case ARRAY:
+ #####: 1389: arrayNetSerialLevel2(r, (sArrayt *)(e->data), ctx, /*packed=*/false);
+call 0 never executed
+ #####: 1390: break;
+ -: 1391: case BYTES:
+ #####: 1392: B = (sBytest *)(e->data);
+ #####: 1393: if (ctx->nibble == lowNbl) {
+branch 0 never executed
+branch 1 never executed
+ #####: 1394: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], B->count);
+call 0 never executed
+ -: 1395: }
+ -: 1396: else {
+ -: 1397: // high nibble
+ #####: 1398: storeTypeInHighNbl(e->data);
+ #####: 1399: uintToVarint(r, B->count);
+call 0 never executed
+ -: 1400: }
+ #####: 1401: sBytesPushBuffer(r, &(B->data), B->count);
+call 0 never executed
+ #####: 1402: break;
+ -: 1403: }
+ -: 1404: }
+ -: 1405: }
+ #####: 1406: ret;
+ -: 1407:}
+ -: 1408:
+ -: 1409:/**
+ -: 1410: * serialize array
+ -: 1411: *
+ -: 1412: * the serialized array is pushed to r.
+ -: 1413: * All elements are serialized recursively
+ -: 1414: *
+ -: 1415: * the data in containers is not serialized
+ -: 1416: *
+ -: 1417: * \param
+ -: 1418: * r small bytes object
+ -: 1419: * array to serialize
+ -: 1420: */
function arrayNetSerialLevel2 called 0 returned 0% blocks executed 0%
- #####: 1395:internal void arrayNetSerialLevel2(sBytest **r, sArrayt *array, contextt *ctx, bool packed) {
- #####: 1396: sBytest *B = NULL;
- #####: 1397: char *data = NULL;
- -: 1398:
- -: 1399: // check if all elements have same type
- #####: 1400: bool allElementsHaveSameType = true;
- #####: 1401: bool foundFirstType = false;
- #####: 1402: char type = 0;
- -: 1403:
- #####: 1404: {forEachSArray(array, e) {
+ #####: 1421:internal void arrayNetSerialLevel2(sBytest **r, sArrayt *array, contextt *ctx, bool packed) {
+ #####: 1422: sBytest *B = NULL;
+ #####: 1423: char *data = NULL;
+ -: 1424:
+ -: 1425: // check if all elements have same type
+ #####: 1426: bool allElementsHaveSameType = true;
+ #####: 1427: bool foundFirstType = false;
+ #####: 1428: char type = 0;
+ -: 1429:
+ #####: 1430: {forEachSArray(array, e) {
branch 0 never executed
branch 1 never executed
- #####: 1405: if (!e) {
+ #####: 1431: if (!e) {
branch 0 never executed
branch 1 never executed
- #####: 1406: if (foundFirstType) {
+ #####: 1432: if (foundFirstType) {
branch 0 never executed
branch 1 never executed
- #####: 1407: if (type != S_UNDEFINED) {
+ #####: 1433: if (type != S_UNDEFINED) {
branch 0 never executed
branch 1 never executed
- #####: 1408: allElementsHaveSameType = false;
- #####: 1409: break;
- -: 1410: }
- -: 1411: }
- -: 1412: else {
- #####: 1413: type = S_UNDEFINED;
- #####: 1414: foundFirstType = true;
- -: 1415: }
- -: 1416: }
- -: 1417: else {
- #####: 1418: if (foundFirstType) {
+ #####: 1434: allElementsHaveSameType = false;
+ #####: 1435: break;
+ -: 1436: }
+ -: 1437: }
+ -: 1438: else {
+ #####: 1439: type = S_UNDEFINED;
+ #####: 1440: foundFirstType = true;
+ -: 1441: }
+ -: 1442: }
+ -: 1443: else {
+ #####: 1444: if (foundFirstType) {
branch 0 never executed
branch 1 never executed
- -: 1419: u8 nextType;
- #####: 1420: switch(e->type) {
+ -: 1445: u8 nextType;
+ #####: 1446: switch(e->type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
- -: 1421: case DICT:
- #####: 1422: nextType = isDictUniform((sDictt*)e);
+ -: 1447: case DICT:
+ #####: 1448: nextType = isDictUniform((sDictt*)e);
call 0 never executed
- #####: 1423: break;
- -: 1424: case ARRAY:
- #####: 1425: nextType = isArrayUniform((sArrayt*)e);
+ #####: 1449: break;
+ -: 1450: case ARRAY:
+ #####: 1451: nextType = isArrayUniform((sArrayt*)e);
call 0 never executed
- #####: 1426: break;
- -: 1427: default:
- #####: 1428: nextType = NET_SERIAL_TYPES[(u8)e->type];
- -: 1429: }
- #####: 1430: if (nextType != type) {
+ #####: 1452: break;
+ -: 1453: default:
+ #####: 1454: nextType = NET_SERIAL_TYPES[(u8)e->type];
+ -: 1455: }
+ #####: 1456: if (nextType != type) {
branch 0 never executed
branch 1 never executed
- #####: 1431: allElementsHaveSameType = false;
- #####: 1432: break;
- -: 1433: }
- -: 1434: }
- -: 1435: else {
- #####: 1436: switch(e->type) {
+ #####: 1457: allElementsHaveSameType = false;
+ #####: 1458: break;
+ -: 1459: }
+ -: 1460: }
+ -: 1461: else {
+ #####: 1462: switch(e->type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
- -: 1437: case DICT:
- #####: 1438: type = isDictUniform((sDictt*)e);
+ -: 1463: case DICT:
+ #####: 1464: type = isDictUniform((sDictt*)e);
call 0 never executed
- #####: 1439: break;
- -: 1440: case ARRAY:
- #####: 1441: type = isArrayUniform((sArrayt*)e);
+ #####: 1465: break;
+ -: 1466: case ARRAY:
+ #####: 1467: type = isArrayUniform((sArrayt*)e);
call 0 never executed
- #####: 1442: break;
- -: 1443: default:
- #####: 1444: type = NET_SERIAL_TYPES[(u8)e->type];
- -: 1445: }
- #####: 1446: foundFirstType = true;
- -: 1447: }
- -: 1448: }
- -: 1449: }}
- -: 1450:
- #####: 1451: if (allElementsHaveSameType) {
+ #####: 1468: break;
+ -: 1469: default:
+ #####: 1470: type = NET_SERIAL_TYPES[(u8)e->type];
+ -: 1471: }
+ #####: 1472: foundFirstType = true;
+ -: 1473: }
+ -: 1474: }
+ -: 1475: }}
+ -: 1476:
+ #####: 1477: if (allElementsHaveSameType) {
branch 0 never executed
branch 1 never executed
- -: 1452: // pack array
- #####: 1453: if (packed) {
+ -: 1478: // pack array
+ #####: 1479: if (packed) {
branch 0 never executed
branch 1 never executed
- #####: 1454: uintToNetTypeVarint(r, type, array->count);
+ #####: 1480: uintToNetTypeVarint(r, type, array->count);
call 0 never executed
- -: 1455: }
- -: 1456: else {
- #####: 1457: if (ctx->nibble == lowNbl) {
+ -: 1481: }
+ -: 1482: else {
+ #####: 1483: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 1458: sBytesPush(r, (type << 4) + UNIFORM_ARRAY);
+ #####: 1484: sBytesPush(r, (type << 4) + UNIFORM_ARRAY);
call 0 never executed
- #####: 1459: uintToVarint(r, array->count);
+ #####: 1485: uintToVarint(r, array->count);
call 0 never executed
- -: 1460: }
- -: 1461: else {
- -: 1462: // high nibble
- #####: 1463: ctx->nibble = lowNbl;
- #####: 1464: data = (char *)&((*r)->data) + ctx->nblOffset;
- #####: 1465: *data |= UNIFORM_ARRAY << 4;
- #####: 1466: uintToNetTypeVarint(r, type, array->count);
+ -: 1486: }
+ -: 1487: else {
+ -: 1488: // high nibble
+ #####: 1489: ctx->nibble = lowNbl;
+ #####: 1490: data = (char *)&((*r)->data) + ctx->nblOffset;
+ #####: 1491: *data |= UNIFORM_ARRAY << 4;
+ #####: 1492: uintToNetTypeVarint(r, type, array->count);
call 0 never executed
- -: 1467: }
- -: 1468: }
- -: 1469:
- #####: 1470: switch(type) {
+ -: 1493: }
+ -: 1494: }
+ -: 1495:
+ #####: 1496: switch(type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -2156,142 +2182,142 @@ branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
- -: 1471: case S_BOOL:
- #####: 1472: {forEachSArray(array, e) {
+ -: 1497: case S_BOOL:
+ #####: 1498: {forEachSArray(array, e) {
branch 0 never executed
branch 1 never executed
- #####: 1473: if (!ctx->boolOffset) {
+ #####: 1499: if (!ctx->boolOffset) {
branch 0 never executed
branch 1 never executed
- -: 1474: // new packed bools
- #####: 1475: storeNew8bPackedBool(e);
+ -: 1500: // new packed bools
+ #####: 1501: storeNew8bPackedBool(e);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 1476: }
- -: 1477: else {
- -: 1478: // there was a bool before this one, fill bits in nibbles
- #####: 1479: if (ctx->boolShift == 8) {
+ -: 1502: }
+ -: 1503: else {
+ -: 1504: // there was a bool before this one, fill bits in nibbles
+ #####: 1505: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- -: 1480: // previous packed bool is full
- -: 1481: // next byte is the new packed bools
- #####: 1482: storeNew8bPackedBool(e);
+ -: 1506: // previous packed bool is full
+ -: 1507: // next byte is the new packed bools
+ #####: 1508: storeNew8bPackedBool(e);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 1483: }
- -: 1484: else {
- #####: 1485: storeBool(e);
+ -: 1509: }
+ -: 1510: else {
+ #####: 1511: storeBool(e);
branch 0 never executed
branch 1 never executed
- -: 1486: }
- -: 1487: }
- -: 1488: }}
- #####: 1489: break;
- -: 1490: case S_DICT:
- -: 1491: case UNIFORM_DICT:
- #####: 1492: {forEachSArray(array, e) {
+ -: 1512: }
+ -: 1513: }
+ -: 1514: }}
+ #####: 1515: break;
+ -: 1516: case S_DICT:
+ -: 1517: case UNIFORM_DICT:
+ #####: 1518: {forEachSArray(array, e) {
branch 0 never executed
branch 1 never executed
- #####: 1493: dictNetSerialLevel2(r, (sDictt *)e, ctx, /*packed=*/true);
+ #####: 1519: dictNetSerialLevel2(r, (sDictt *)e, ctx, /*packed=*/true);
call 0 never executed
- -: 1494: }}
- #####: 1495: break;
- -: 1496: case S_DOUBLE:
- #####: 1497: {forEachSArray(array, e) {
+ -: 1520: }}
+ #####: 1521: break;
+ -: 1522: case S_DOUBLE:
+ #####: 1523: {forEachSArray(array, e) {
branch 0 never executed
branch 1 never executed
- #####: 1498: sBytesPushBuffer(r, &((sDoublet *)e)->value, sizeof(double));
+ #####: 1524: sBytesPushBuffer(r, &((sDoublet *)e)->value, sizeof(double));
call 0 never executed
- -: 1499: }}
- #####: 1500: break;
- -: 1501: case S_INT:
- #####: 1502: {forEachSArray(array, e) {
+ -: 1525: }}
+ #####: 1526: break;
+ -: 1527: case S_INT:
+ #####: 1528: {forEachSArray(array, e) {
branch 0 never executed
branch 1 never executed
- #####: 1503: i64 v = ((sIntt *)e)->value;
- #####: 1504: uintToVarint(r, (v << 1) ^ (v >> 63));
+ #####: 1529: i64 v = ((sIntt *)e)->value;
+ #####: 1530: uintToVarint(r, (v << 1) ^ (v >> 63));
call 0 never executed
- -: 1505: }}
- #####: 1506: break;
- -: 1507: case S_STRING:
- #####: 1508: {forEachSArray(array, e) {
+ -: 1531: }}
+ #####: 1532: break;
+ -: 1533: case S_STRING:
+ #####: 1534: {forEachSArray(array, e) {
branch 0 never executed
branch 1 never executed
- #####: 1509: sBytesPushBuffer(r, &((sStringt *)e)->data, sizeof(sStringt) + strlen(&(((sStringt *)e)->data)) -1);
+ #####: 1535: sBytesPushBuffer(r, &((sStringt *)e)->data, sizeof(sStringt) + strlen(&(((sStringt *)e)->data)) -1);
call 0 never executed
- -: 1510: }}
- #####: 1511: break;
- -: 1512: case S_ARRAY:
- -: 1513: case UNIFORM_ARRAY:
- #####: 1514: {forEachSArray(array, e) {
+ -: 1536: }}
+ #####: 1537: break;
+ -: 1538: case S_ARRAY:
+ -: 1539: case UNIFORM_ARRAY:
+ #####: 1540: {forEachSArray(array, e) {
branch 0 never executed
branch 1 never executed
- #####: 1515: arrayNetSerialLevel2(r, (sArrayt *)e, ctx, /*packed=*/true);
+ #####: 1541: arrayNetSerialLevel2(r, (sArrayt *)e, ctx, /*packed=*/true);
call 0 never executed
- -: 1516: }}
- #####: 1517: break;
- -: 1518: case S_BYTES:
- #####: 1519: {forEachSArray(array, e) {
+ -: 1542: }}
+ #####: 1543: break;
+ -: 1544: case S_BYTES:
+ #####: 1545: {forEachSArray(array, e) {
branch 0 never executed
branch 1 never executed
- #####: 1520: B = (sBytest *)e;
- #####: 1521: uintToVarint(r, B->count);
+ #####: 1546: B = (sBytest *)e;
+ #####: 1547: uintToVarint(r, B->count);
call 0 never executed
- #####: 1522: sBytesPushBuffer(r, &(B->data), B->count);
+ #####: 1548: sBytesPushBuffer(r, &(B->data), B->count);
call 0 never executed
- -: 1523: }}
- #####: 1524: break;
- -: 1525: }
- #####: 1526: ret;
- -: 1527: }
- -: 1528:
- #####: 1529: if (packed) {
+ -: 1549: }}
+ #####: 1550: break;
+ -: 1551: }
+ #####: 1552: ret;
+ -: 1553: }
+ -: 1554:
+ #####: 1555: if (packed) {
branch 0 never executed
branch 1 never executed
- #####: 1530: uintToVarint(r, array->count);
+ #####: 1556: uintToVarint(r, array->count);
call 0 never executed
- -: 1531: }
- -: 1532: else {
- #####: 1533: if (ctx->nibble == lowNbl) {
+ -: 1557: }
+ -: 1558: else {
+ #####: 1559: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 1534: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)array->type], array->count);
+ #####: 1560: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)array->type], array->count);
call 0 never executed
- -: 1535: }
- -: 1536: else {
- -: 1537: // high nibble
- #####: 1538: storeTypeInHighNbl(array);
- #####: 1539: uintToVarint(r, array->count);
+ -: 1561: }
+ -: 1562: else {
+ -: 1563: // high nibble
+ #####: 1564: storeTypeInHighNbl(array);
+ #####: 1565: uintToVarint(r, array->count);
call 0 never executed
- -: 1540: }
- -: 1541: }
- -: 1542:
- #####: 1543: forEachSArray(array, e) {
+ -: 1566: }
+ -: 1567: }
+ -: 1568:
+ #####: 1569: forEachSArray(array, e) {
branch 0 never executed
branch 1 never executed
- #####: 1544: if (!e) {
+ #####: 1570: if (!e) {
branch 0 never executed
branch 1 never executed
- -: 1545: // empty slots are represented as undefined elements
- #####: 1546: if (ctx->nibble == lowNbl) {
+ -: 1571: // empty slots are represented as undefined elements
+ #####: 1572: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 1547: sBytesPush(r, NET_SERIAL_TYPES[UNDEFINED]);
+ #####: 1573: sBytesPush(r, NET_SERIAL_TYPES[UNDEFINED]);
call 0 never executed
- #####: 1548: ctx->nibble = highNbl;
- #####: 1549: ctx->nblOffset = (*r)->count -1;
- -: 1550: }
- -: 1551: else {
- -: 1552: // high nibble
- #####: 1553: ctx->nibble = lowNbl;
- #####: 1554: data = (char *)&((*r)->data) + ctx->nblOffset;
- #####: 1555: *data |= NET_SERIAL_TYPES[UNDEFINED] << 4;
- -: 1556: }
- -: 1557: }
- -: 1558: else {
- #####: 1559: switch(e->type) {
+ #####: 1574: ctx->nibble = highNbl;
+ #####: 1575: ctx->nblOffset = (*r)->count -1;
+ -: 1576: }
+ -: 1577: else {
+ -: 1578: // high nibble
+ #####: 1579: ctx->nibble = lowNbl;
+ #####: 1580: data = (char *)&((*r)->data) + ctx->nblOffset;
+ #####: 1581: *data |= NET_SERIAL_TYPES[UNDEFINED] << 4;
+ -: 1582: }
+ -: 1583: }
+ -: 1584: else {
+ #####: 1585: switch(e->type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -2301,623 +2327,640 @@ branch 5 never executed
branch 6 never executed
branch 7 never executed
branch 8 never executed
- -: 1560: case UNDEFINED:
- -: 1561: case CONTAINER:
- #####: 1562: if (ctx->nibble == lowNbl) {
+ -: 1586: case UNDEFINED:
+ -: 1587: case CONTAINER:
+ #####: 1588: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 1563: storeTypeOnly(e);
+ #####: 1589: storeTypeOnly(e);
call 0 never executed
- -: 1564: }
- -: 1565: else {
- -: 1566: // high nibble
- #####: 1567: storeTypeInHighNbl(e);
- -: 1568: }
- #####: 1569: break;
- -: 1570: case BOOL:
- #####: 1571: if (!ctx->boolOffset) {
+ -: 1590: }
+ -: 1591: else {
+ -: 1592: // high nibble
+ #####: 1593: storeTypeInHighNbl(e);
+ -: 1594: }
+ #####: 1595: break;
+ -: 1596: case BOOL:
+ #####: 1597: if (!ctx->boolOffset) {
branch 0 never executed
branch 1 never executed
- -: 1572: // new packed bools
- #####: 1573: if (ctx->nibble == lowNbl) {
+ -: 1598: // new packed bools
+ #####: 1599: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 1574: storeNew4bPackedBool(e);
+ #####: 1600: storeNew4bPackedBool(e);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 1575: }
- -: 1576: else {
- -: 1577: // high nibble, next byte is packed bools
- #####: 1578: storeTypeInHighNbl(e);
- #####: 1579: storeNew8bPackedBool(e);
+ -: 1601: }
+ -: 1602: else {
+ -: 1603: // high nibble, next byte is packed bools
+ #####: 1604: storeTypeInHighNbl(e);
+ #####: 1605: storeNew8bPackedBool(e);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 1580: }
- -: 1581: }
- -: 1582: else {
- -: 1583: // there was a bool before this one, fill bits in nibbles
- #####: 1584: if (ctx->nibble == lowNbl) {
+ -: 1606: }
+ -: 1607: }
+ -: 1608: else {
+ -: 1609: // there was a bool before this one, fill bits in nibbles
+ #####: 1610: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 1585: if (ctx->boolShift == 8) {
+ #####: 1611: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- -: 1586: // previous packed bool is full
- -: 1587: // this byte is the new packed bools
- #####: 1588: storeNew4bPackedBool(e);
+ -: 1612: // previous packed bool is full
+ -: 1613: // this byte is the new packed bools
+ #####: 1614: storeNew4bPackedBool(e);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 1589: }
- -: 1590: else {
- #####: 1591: storeTypeOnly(e);
+ -: 1615: }
+ -: 1616: else {
+ #####: 1617: storeTypeOnly(e);
call 0 never executed
- #####: 1592: storeBool(e);
+ #####: 1618: storeBool(e);
branch 0 never executed
branch 1 never executed
- -: 1593: }
- -: 1594: }
- -: 1595: else {
- -: 1596: // high nibble
- #####: 1597: storeTypeInHighNbl(e);
- #####: 1598: if (ctx->boolShift == 8) {
+ -: 1619: }
+ -: 1620: }
+ -: 1621: else {
+ -: 1622: // high nibble
+ #####: 1623: storeTypeInHighNbl(e);
+ #####: 1624: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- -: 1599: // previous packed bool is full
- -: 1600: // next byte is the new packed bools
- #####: 1601: storeNew8bPackedBool(e);
+ -: 1625: // previous packed bool is full
+ -: 1626: // next byte is the new packed bools
+ #####: 1627: storeNew8bPackedBool(e);
branch 0 never executed
branch 1 never executed
call 2 never executed
- -: 1602: }
- -: 1603: else {
- #####: 1604: storeBool(e);
+ -: 1628: }
+ -: 1629: else {
+ #####: 1630: storeBool(e);
branch 0 never executed
branch 1 never executed
- -: 1605: }
- -: 1606: }
- -: 1607: }
- #####: 1608: break;
- -: 1609: case DICT:
- #####: 1610: dictNetSerialLevel2(r, (sDictt *)e, ctx, /*packed=*/false);
+ -: 1631: }
+ -: 1632: }
+ -: 1633: }
+ #####: 1634: break;
+ -: 1635: case DICT:
+ #####: 1636: dictNetSerialLevel2(r, (sDictt *)e, ctx, /*packed=*/false);
call 0 never executed
- #####: 1611: break;
- -: 1612: case DOUBLE:
- #####: 1613: if (ctx->nibble == lowNbl) {
+ #####: 1637: break;
+ -: 1638: case DOUBLE:
+ #####: 1639: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 1614: storeTypeOnly(e);
+ #####: 1640: storeTypeOnly(e);
call 0 never executed
- -: 1615: }
- -: 1616: else {
- -: 1617: // high nibble
- #####: 1618: storeTypeInHighNbl(e);
- -: 1619: }
- #####: 1620: sBytesPushBuffer(r, &((sDoublet *)e)->value, sizeof(double));
+ -: 1641: }
+ -: 1642: else {
+ -: 1643: // high nibble
+ #####: 1644: storeTypeInHighNbl(e);
+ -: 1645: }
+ #####: 1646: sBytesPushBuffer(r, &((sDoublet *)e)->value, sizeof(double));
call 0 never executed
- #####: 1621: break;
- -: 1622: case INT: {
- -: 1623: // encode int to varint
- -: 1624: // v is int64_t to convert to varint
- #####: 1625: i64 v = ((sIntt *)&(e->type))->value;
- #####: 1626: if (ctx->nibble == lowNbl) {
+ #####: 1647: break;
+ -: 1648: case INT: {
+ -: 1649: // encode int to varint
+ -: 1650: // v is int64_t to convert to varint
+ #####: 1651: i64 v = ((sIntt *)&(e->type))->value;
+ #####: 1652: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- -: 1627: // encode v with arithmetic shifts
- #####: 1628: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], (v << 1) ^ (v >> 63));
+ -: 1653: // encode v with arithmetic shifts
+ #####: 1654: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], (v << 1) ^ (v >> 63));
call 0 never executed
- -: 1629: }
- -: 1630: else {
- -: 1631: // high nibble
- #####: 1632: storeTypeInHighNbl(e);
- #####: 1633: uintToVarint(r, (v << 1) ^ (v >> 63));
+ -: 1655: }
+ -: 1656: else {
+ -: 1657: // high nibble
+ #####: 1658: storeTypeInHighNbl(e);
+ #####: 1659: uintToVarint(r, (v << 1) ^ (v >> 63));
call 0 never executed
- -: 1634: }
- -: 1635: }
- #####: 1636: break;
- -: 1637: case STRING:
- #####: 1638: if (ctx->nibble == lowNbl) {
+ -: 1660: }
+ -: 1661: }
+ #####: 1662: break;
+ -: 1663: case STRING:
+ #####: 1664: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 1639: storeTypeOnly(e);
+ #####: 1665: storeTypeOnly(e);
call 0 never executed
- -: 1640: }
- -: 1641: else {
- -: 1642: // high nibble
- #####: 1643: storeTypeInHighNbl(e);
- -: 1644: }
- #####: 1645: sBytesPushBuffer(r, &((sStringt *)e)->data, sizeof(sStringt) + strlen(&(((sStringt *)e)->data)) -1);
+ -: 1666: }
+ -: 1667: else {
+ -: 1668: // high nibble
+ #####: 1669: storeTypeInHighNbl(e);
+ -: 1670: }
+ #####: 1671: sBytesPushBuffer(r, &((sStringt *)e)->data, sizeof(sStringt) + strlen(&(((sStringt *)e)->data)) -1);
call 0 never executed
- #####: 1646: break;
- -: 1647: case ARRAY:
- #####: 1648: arrayNetSerialLevel2(r, (sArrayt *)e, ctx, /*packed=*/false);
+ #####: 1672: break;
+ -: 1673: case ARRAY:
+ #####: 1674: arrayNetSerialLevel2(r, (sArrayt *)e, ctx, /*packed=*/false);
call 0 never executed
- #####: 1649: break;
- -: 1650: case BYTES:
- #####: 1651: B = (sBytest *)e;
- #####: 1652: if (ctx->nibble == lowNbl) {
+ #####: 1675: break;
+ -: 1676: case BYTES:
+ #####: 1677: B = (sBytest *)e;
+ #####: 1678: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 1653: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], B->count);
+ #####: 1679: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], B->count);
call 0 never executed
- -: 1654: }
- -: 1655: else {
- -: 1656: // high nibble
- #####: 1657: storeTypeInHighNbl(e);
- #####: 1658: uintToVarint(r, B->count);
+ -: 1680: }
+ -: 1681: else {
+ -: 1682: // high nibble
+ #####: 1683: storeTypeInHighNbl(e);
+ #####: 1684: uintToVarint(r, B->count);
call 0 never executed
- -: 1659: }
- #####: 1660: sBytesPushBuffer(r, &(B->data), B->count);
+ -: 1685: }
+ #####: 1686: sBytesPushBuffer(r, &(B->data), B->count);
call 0 never executed
- #####: 1661: break;
- -: 1662: }
- -: 1663: }
- -: 1664: }
- #####: 1665: ret;
- -: 1666:}
- -: 1667:
+ #####: 1687: break;
+ -: 1688: }
+ -: 1689: }
+ -: 1690: }
+ #####: 1691: ret;
+ -: 1692:}
+ -: 1693:
function serialNetSerialLevel2 called 0 returned 0% blocks executed 0%
- #####: 1668:internal smallBytest* serialNetSerialLevel2(smallJsont *self) {
- -: 1669:
- #####: 1670: smallt *o = getsoG(self);
-call 0 never executed
- -: 1671:
- #####: 1672: if (o == NULL)
-branch 0 never executed
-branch 1 never executed
- #####: 1673: ret NULL;
- -: 1674:
- #####: 1675: sBytest *B = netSerialLevel2(o);
-call 0 never executed
- -: 1676:
- #####: 1677: if (!B) {
-branch 0 never executed
-branch 1 never executed
- #####: 1678: ret NULL;
- -: 1679: }
- -: 1680:
- #####: 1681: createAllocateSmallBytes(r);
-call 0 never executed
- #####: 1682: r->B = B;
- #####: 1683: ret r;
- -: 1684:}
- -: 1685:
- -: 1686:// level 3
- -: 1687:
-function netSerial called 76 returned 100% blocks executed 88%
- 76: 1688:internal sBytest* netSerial(smallt *o) {
- 76: 1689: sBytest *r = NULL;
- 76: 1690: sBytest *B = NULL;
- 76: 1691: contextt ctx = {.nibble=lowNbl, .nblOffset=0, .boolShift = 0, .boolOffset=0};
- -: 1692:
- 76: 1693: switch(o->type) {
+ #####: 1694:internal smallBytest* serialNetSerialLevel2(smallJsont *self) {
+ -: 1695:
+ #####: 1696: smallt *o = getsoG(self);
+call 0 never executed
+ -: 1697:
+ #####: 1698: if (o == NULL)
+branch 0 never executed
+branch 1 never executed
+ #####: 1699: ret NULL;
+ -: 1700:
+ #####: 1701: sBytest *B = netSerialLevel2(o);
+call 0 never executed
+ -: 1702:
+ #####: 1703: if (!B) {
+branch 0 never executed
+branch 1 never executed
+ #####: 1704: ret NULL;
+ -: 1705: }
+ -: 1706:
+ #####: 1707: createAllocateSmallBytes(r);
+call 0 never executed
+ #####: 1708: r->B = B;
+ #####: 1709: ret r;
+ -: 1710:}
+ -: 1711:
+ -: 1712:// level 3
+ -: 1713:// like level 2, elements of identical type in a row are packed
+ -: 1714:
+ -: 1715:/**
+ -: 1716: * serializer top function
+ -: 1717: */
+function netSerial called 77 returned 100% blocks executed 88%
+ 77: 1718:internal sBytest* netSerial(smallt *o) {
+ 77: 1719: sBytest *r = NULL;
+ 77: 1720: sBytest *B = NULL;
+ 77: 1721: contextt ctx = {.nibble=lowNbl, .nblOffset=0, .boolShift = 0, .boolOffset=0};
+ -: 1722:
+ 77: 1723: switch(o->type) {
branch 0 taken 1%
branch 1 taken 1%
branch 2 taken 47%
branch 3 taken 1%
branch 4 taken 1%
branch 5 taken 1%
-branch 6 taken 46%
+branch 6 taken 47%
branch 7 taken 0%
branch 8 taken 0%
- -: 1694: case UNDEFINED:
- -: 1695: case CONTAINER:
- 1: 1696: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
-call 0 returned 100%
- 1: 1697: break;
- -: 1698: case BOOL: {
- 1: 1699: u8 c = NET_SERIAL_TYPES[(u8)o->type];
- -: 1700: // set bit 4 when true
- 1: 1701: if (((sBoolt *)&(o->type))->value)
+ -: 1724: case UNDEFINED:
+ -: 1725: case CONTAINER:
+ 1: 1726: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
+call 0 returned 100%
+ 1: 1727: break;
+ -: 1728: case BOOL: {
+ 1: 1729: u8 c = NET_SERIAL_TYPES[(u8)o->type];
+ -: 1730: // set bit 4 when true
+ 1: 1731: if (((sBoolt *)&(o->type))->value)
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- 1: 1702: c |= (1<<4);
- 1: 1703: sBytesPush(&r, c);
-call 0 returned 100%
- -: 1704: }
- 1: 1705: break;
- -: 1706: case DICT:
- 36: 1707: dictNetSerial(&r, (sDictt *)&(o->type), &ctx, /*packing=*/NOPACKING);
-call 0 returned 100%
- 36: 1708: break;
- -: 1709: case DOUBLE:
- 1: 1710: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
-call 0 returned 100%
- 1: 1711: sBytesPushBuffer(&r, &((sDoublet *)&(o->type))->value, sizeof(double));
-call 0 returned 100%
- 1: 1712: break;
- -: 1713: case INT: {
- -: 1714: // encode int to varint
- -: 1715: // v is int64_t to convert to varint
- 1: 1716: i64 v = ((sIntt *)&(o->type))->value;
- -: 1717: // encode v with arithmetic shifts
- 1: 1718: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], (v << 1) ^ (v >> 63));
-call 0 returned 100%
- -: 1719: }
- 1: 1720: break;
- -: 1721: case STRING:
- 1: 1722: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
-call 0 returned 100%
- 1: 1723: sBytesPushBuffer(&r, &((sStringt *)&(o->type))->data, sizeof(sStringt) + strlen(&(((sStringt *)&(o->type))->data)) -1);
-call 0 returned 100%
- 1: 1724: break;
- -: 1725: case ARRAY:
- 35: 1726: arrayNetSerial(&r, (sArrayt *)&(o->type), &ctx, /*packing=*/NOPACKING);
-call 0 returned 100%
- 35: 1727: break;
- -: 1728: case BYTES:
- #####: 1729: B = (sBytest *)&(o->type);
- #####: 1730: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], B->count);
-call 0 never executed
- #####: 1731: sBytesPushBuffer(&r, &(B->data), B->count);
-call 0 never executed
- #####: 1732: break;
- -: 1733: }
- 76: 1734: ret r;
- -: 1735:}
- -: 1736:
- -: 1737:/**
- -: 1738: * serialize dictionary
- -: 1739: *
- -: 1740: * the serialized dict is pushed to r.
- -: 1741: * All elements are serialized recursively
- -: 1742: *
- -: 1743: * the data in containers is not serialized
- -: 1744: *
- -: 1745: * \param
- -: 1746: * r small bytes object
- -: 1747: * dict dictionary to serialize
- -: 1748: */
-function dictNetSerial called 76 returned 100% blocks executed 91%
- 76: 1749:internal void dictNetSerial(sBytest **r, sDictt *dict, contextt *ctx, packingT packing) {
- 76: 1750: sBytest *B = NULL;
- 76: 1751: char *data = NULL;
- -: 1752:
- -: 1753: // check if all elements have same type
- 76: 1754: bool allElementsHaveSameType = true;
- 76: 1755: bool foundFirstType = false;
- 76: 1756: char type = 0;
- 194: 1757: {forEachSDict(dict, e) {
+ 1: 1732: c |= (1<<4);
+ 1: 1733: sBytesPush(&r, c);
+call 0 returned 100%
+ -: 1734: }
+ 1: 1735: break;
+ -: 1736: case DICT:
+ 36: 1737: dictNetSerial(&r, (sDictt *)&(o->type), &ctx, /*packing=*/NOPACKING);
+call 0 returned 100%
+ 36: 1738: break;
+ -: 1739: case DOUBLE:
+ 1: 1740: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
+call 0 returned 100%
+ 1: 1741: sBytesPushBuffer(&r, &((sDoublet *)&(o->type))->value, sizeof(double));
+call 0 returned 100%
+ 1: 1742: break;
+ -: 1743: case INT: {
+ -: 1744: // encode int to varint
+ -: 1745: // v is int64_t to convert to varint
+ 1: 1746: i64 v = ((sIntt *)&(o->type))->value;
+ -: 1747: // encode v with arithmetic shifts
+ 1: 1748: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], (v << 1) ^ (v >> 63));
+call 0 returned 100%
+ -: 1749: }
+ 1: 1750: break;
+ -: 1751: case STRING:
+ 1: 1752: sBytesPush(&r, NET_SERIAL_TYPES[(u8)o->type]);
+call 0 returned 100%
+ 1: 1753: sBytesPushBuffer(&r, &((sStringt *)&(o->type))->data, sizeof(sStringt) + strlen(&(((sStringt *)&(o->type))->data)) -1);
+call 0 returned 100%
+ 1: 1754: break;
+ -: 1755: case ARRAY:
+ 36: 1756: arrayNetSerial(&r, (sArrayt *)&(o->type), &ctx, /*packing=*/NOPACKING);
+call 0 returned 100%
+ 36: 1757: break;
+ -: 1758: case BYTES:
+ #####: 1759: B = (sBytest *)&(o->type);
+ #####: 1760: uintToNetTypeVarint(&r, NET_SERIAL_TYPES[(u8)o->type], B->count);
+call 0 never executed
+ #####: 1761: sBytesPushBuffer(&r, &(B->data), B->count);
+call 0 never executed
+ #####: 1762: break;
+ -: 1763: }
+ 77: 1764: ret r;
+ -: 1765:}
+ -: 1766:
+ -: 1767:/**
+ -: 1768: * serialize dictionary
+ -: 1769: *
+ -: 1770: * the serialized dict is pushed to r.
+ -: 1771: * All elements are serialized recursively
+ -: 1772: *
+ -: 1773: * the data in containers is not serialized
+ -: 1774: *
+ -: 1775: * \param
+ -: 1776: * r small bytes object
+ -: 1777: * dict dictionary to serialize
+ -: 1778: */
+function dictNetSerial called 79 returned 100% blocks executed 91%
+ 79: 1779:internal void dictNetSerial(sBytest **r, sDictt *dict, contextt *ctx, packingT packing) {
+ 79: 1780: sBytest *B = NULL;
+ 79: 1781: char *data = NULL;
+ -: 1782:
+ -: 1783: // check if all elements have same type
+ -: 1784: // then set dict type normal or uniform
+ -: 1785: // array and dict have to be checked recursively to know if they are normal or uniform
+ 79: 1786: bool allElementsHaveSameType = true;
+ 79: 1787: bool foundFirstType = false;
+ 79: 1788: char type = 0;
+ -: 1789: // get first element type
+ -: 1790: // compare to other element type
+ 200: 1791: {forEachSDict(dict, e) {
branch 0 taken 79%
-branch 1 taken 21% (fallthrough)
- 154: 1758: if (e->key) {
+branch 1 taken 22% (fallthrough)
+ 157: 1792: if (e->key) {
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- 154: 1759: if (foundFirstType) {
-branch 0 taken 58% (fallthrough)
-branch 1 taken 42%
- -: 1760: u8 nextType;
- 89: 1761: switch(e->data->type) {
+ 157: 1793: if (foundFirstType) {
+branch 0 taken 57% (fallthrough)
+branch 1 taken 43%
+ -: 1794: u8 nextType;
+ 89: 1795: switch(e->data->type) {
branch 0 taken 17%
branch 1 taken 9%
branch 2 taken 74%
- -: 1762: case DICT:
- 15: 1763: nextType = isDictUniform((sDictt*)e->data);
-call 0 returned 100%
- 15: 1764: break;
- -: 1765: case ARRAY:
- 8: 1766: nextType = isArrayUniform((sArrayt*)e->data);
-call 0 returned 100%
- 8: 1767: break;
- -: 1768: default:
- 66: 1769: nextType = NET_SERIAL_TYPES[(u8)e->data->type];
- -: 1770: }
- 89: 1771: if (nextType != type) {
+ -: 1796: case DICT:
+ 15: 1797: nextType = isDictUniform((sDictt*)e->data);
+call 0 returned 100%
+ 15: 1798: break;
+ -: 1799: case ARRAY:
+ 8: 1800: nextType = isArrayUniform((sArrayt*)e->data);
+call 0 returned 100%
+ 8: 1801: break;
+ -: 1802: default:
+ 66: 1803: nextType = NET_SERIAL_TYPES[(u8)e->data->type];
+ -: 1804: }
+ 89: 1805: if (nextType != type) {
branch 0 taken 40% (fallthrough)
branch 1 taken 60%
- 36: 1772: allElementsHaveSameType = false;
- 36: 1773: break;
- -: 1774: }
- -: 1775: }
- -: 1776: else {
- 65: 1777: switch(e->data->type) {
-branch 0 taken 8%
-branch 1 taken 5%
+ 36: 1806: allElementsHaveSameType = false;
+ 36: 1807: break;
+ -: 1808: }
+ -: 1809: }
+ -: 1810: else {
+ 68: 1811: switch(e->data->type) {
+branch 0 taken 7%
+branch 1 taken 4%
branch 2 taken 88%
- -: 1778: case DICT:
- 5: 1779: type = isDictUniform((sDictt*)e->data);
-call 0 returned 100%
- 5: 1780: break;
- -: 1781: case ARRAY:
- 3: 1782: type = isArrayUniform((sArrayt*)e->data);
-call 0 returned 100%
- 3: 1783: break;
- -: 1784: default:
- 57: 1785: type = NET_SERIAL_TYPES[(u8)e->data->type];
- -: 1786: }
- 65: 1787: foundFirstType = true;
- -: 1788: }
- -: 1789: }
- -: 1790: }}
- -: 1791:
- 76: 1792: if (allElementsHaveSameType) {
-branch 0 taken 53% (fallthrough)
-branch 1 taken 47%
- -: 1793: // pack dictionary
- 40: 1794: if (packing == PACKED) {
-branch 0 taken 45% (fallthrough)
-branch 1 taken 55%
- -: 1795: // uniform dict can't be packed
- -: 1796: // because there is only one type of packed arrays
- 18: 1797: goto normalDict;
- -: 1798: }
- 22: 1799: elif (packing == UNIFORM) {
-branch 0 taken 18% (fallthrough)
-branch 1 taken 82%
- 4: 1800: uintToNetTypeVarint(r, type, dict->count);
+ -: 1812: case DICT:
+ 5: 1813: type = isDictUniform((sDictt*)e->data);
+call 0 returned 100%
+ 5: 1814: break;
+ -: 1815: case ARRAY:
+ 3: 1816: type = isArrayUniform((sArrayt*)e->data);
+call 0 returned 100%
+ 3: 1817: break;
+ -: 1818: default:
+ 60: 1819: type = NET_SERIAL_TYPES[(u8)e->data->type];
+ -: 1820: }
+ 68: 1821: foundFirstType = true;
+ -: 1822: }
+ -: 1823: }
+ -: 1824: }}
+ -: 1825:
+ 79: 1826: if (allElementsHaveSameType) {
+branch 0 taken 54% (fallthrough)
+branch 1 taken 46%
+ -: 1827: // uniform dict
+ -: 1828: // encode type and element count
+ -: 1829:
+ -: 1830: // in pack dictionary
+ 43: 1831: if (packing == PACKED) {
+branch 0 taken 42% (fallthrough)
+branch 1 taken 58%
+ -: 1832: // uniform dict can't be packed
+ -: 1833: // because there is only one type of packed arrays
+ 18: 1834: goto normalDict;
+ -: 1835: }
+ 25: 1836: elif (packing == UNIFORM) {
+branch 0 taken 16% (fallthrough)
+branch 1 taken 84%
+ -: 1837: // when the packing is uniform, there is no need to encode UNIFORM_DICT since all elements have this type
+ 4: 1838: uintToNetTypeVarint(r, type, dict->count);
call 0 returned 100%
- -: 1801: }
- -: 1802: else {
- 18: 1803: if (ctx->nibble == lowNbl) {
-branch 0 taken 94% (fallthrough)
-branch 1 taken 6%
- 17: 1804: sBytesPush(r, (type << 4) + UNIFORM_DICT);
-call 0 returned 100%
- 17: 1805: uintToVarint(r, dict->count);
-call 0 returned 100%
- -: 1806: }
- -: 1807: else {
- -: 1808: // high nibble
- 1: 1809: ctx->nibble = lowNbl;
- 1: 1810: data = (char *)&((*r)->data) + ctx->nblOffset;
- 1: 1811: *data |= UNIFORM_DICT << 4;
- 1: 1812: uintToNetTypeVarint(r, type, dict->count);
-call 0 returned 100%
- -: 1813: }
- -: 1814: }
- -: 1815:
- 22: 1816: switch(type) {
-branch 0 taken 9%
-branch 1 taken 18%
-branch 2 taken 9%
-branch 3 taken 5%
-branch 4 taken 27%
-branch 5 taken 23%
-branch 6 taken 9%
+ -: 1839: }
+ -: 1840: else {
+ 21: 1841: if (ctx->nibble == lowNbl) {
+branch 0 taken 90% (fallthrough)
+branch 1 taken 10%
+ 19: 1842: sBytesPush(r, (type << 4) + UNIFORM_DICT);
+call 0 returned 100%
+ 19: 1843: uintToVarint(r, dict->count);
+call 0 returned 100%
+ -: 1844: }
+ -: 1845: else {
+ -: 1846: // high nibble
+ 2: 1847: ctx->nibble = lowNbl;
+ 2: 1848: data = (char *)&((*r)->data) + ctx->nblOffset;
+ 2: 1849: *data |= UNIFORM_DICT << 4;
+ 2: 1850: uintToNetTypeVarint(r, type, dict->count);
+call 0 returned 100%
+ -: 1851: }
+ -: 1852: }
+ -: 1853:
+ -: 1854: // encode all element keys and values
+ 25: 1855: switch(type) {
+branch 0 taken 8%
+branch 1 taken 16%
+branch 2 taken 8%
+branch 3 taken 4%
+branch 4 taken 36%
+branch 5 taken 20%
+branch 6 taken 8%
branch 7 taken 0%
branch 8 taken 0%
- -: 1817: case S_UNDEFINED:
- 8: 1818: {forEachSDict(dict, e) {
+ -: 1856: case S_UNDEFINED:
+ 8: 1857: {forEachSDict(dict, e) {
branch 0 taken 75%
branch 1 taken 25% (fallthrough)
- 6: 1819: if (e->key) {
+ 6: 1858: if (e->key) {
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- 6: 1820: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
-call 0 returned 100%
- -: 1821: }
- -: 1822: }}
- -: 1823:
- 2: 1824: break;
- -: 1825: case S_BOOL:
- 19: 1826: {forEachSDict(dict, e) {
+ 6: 1859: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+call 0 returned 100%
+ -: 1860: }
+ -: 1861: }}
+ -: 1862:
+ 2: 1863: break;
+ -: 1864: case S_BOOL:
+ 19: 1865: {forEachSDict(dict, e) {
branch 0 taken 79%
branch 1 taken 21% (fallthrough)
- 15: 1827: if (e->key) {
+ 15: 1866: if (e->key) {
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- 15: 1828: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ 15: 1867: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 returned 100%
- -: 1829:
- 15: 1830: if (!ctx->boolOffset) {
+ -: 1868:
+ 15: 1869: if (!ctx->boolOffset) {
branch 0 taken 20% (fallthrough)
branch 1 taken 80%
- -: 1831: // new packed bools
- 3: 1832: storeNew8bPackedBool(e->data);
+ -: 1870: // new packed bools
+ 3: 1871: storeNew8bPackedBool(e->data);
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
call 2 returned 100%
- -: 1833: }
- -: 1834: else {
- -: 1835: // there was a bool before this one, fill bits in nibbles
- 12: 1836: if (ctx->boolShift == 8) {
+ -: 1872: }
+ -: 1873: else {
+ -: 1874: // there was a bool before this one, fill bits in nibbles
+ 12: 1875: if (ctx->boolShift == 8) {
branch 0 taken 8% (fallthrough)
branch 1 taken 92%
- -: 1837: // previous packed bool is full
- -: 1838: // next byte is the new packed bools
- 1: 1839: storeNew8bPackedBool(e->data);
+ -: 1876: // previous packed bool is full
+ -: 1877: // next byte is the new packed bools
+ 1: 1878: storeNew8bPackedBool(e->data);
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
call 2 returned 100%
- -: 1840: }
- -: 1841: else {
- 11: 1842: storeBool(e->data);
+ -: 1879: }
+ -: 1880: else {
+ 11: 1881: storeBool(e->data);
branch 0 taken 91% (fallthrough)
branch 1 taken 9%
- -: 1843: }
- -: 1844: }
- -: 1845: }
- -: 1846: }}
- 4: 1847: break;
- -: 1848: case S_DICT:
- -: 1849: case UNIFORM_DICT:
- 6: 1850: {forEachSDict(dict, e) {
+ -: 1882: }
+ -: 1883: }
+ -: 1884: }
+ -: 1885: }}
+ 4: 1886: break;
+ -: 1887: case S_DICT:
+ -: 1888: case UNIFORM_DICT:
+ 6: 1889: {forEachSDict(dict, e) {
branch 0 taken 67%
branch 1 taken 33% (fallthrough)
- 4: 1851: if (e->key) {
+ 4: 1890: if (e->key) {
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- 4: 1852: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ 4: 1891: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 returned 100%
- 4: 1853: dictNetSerial(r, (sDictt *)(e->data), ctx, /*packing=*/UNIFORM);
+ 4: 1892: dictNetSerial(r, (sDictt *)(e->data), ctx, /*packing=*/UNIFORM);
call 0 returned 100%
- -: 1854: }
- -: 1855: }}
- 2: 1856: break;
- -: 1857: case S_DOUBLE:
- 4: 1858: {forEachSDict(dict, e) {
+ -: 1893: }
+ -: 1894: }}
+ 2: 1895: break;
+ -: 1896: case S_DOUBLE:
+ 4: 1897: {forEachSDict(dict, e) {
branch 0 taken 75%
branch 1 taken 25% (fallthrough)
- 3: 1859: if (e->key) {
+ 3: 1898: if (e->key) {
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- 3: 1860: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
-call 0 returned 100%
- 3: 1861: sBytesPushBuffer(r, &((sDoublet *)(e->data))->value, sizeof(double));
-call 0 returned 100%
- -: 1862: }
- -: 1863: }}
- 1: 1864: break;
- -: 1865: case S_INT:
- 15: 1866: {forEachSDict(dict, e) {
-branch 0 taken 60%
-branch 1 taken 40% (fallthrough)
- 9: 1867: if (e->key) {
+ 3: 1899: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+call 0 returned 100%
+ 3: 1900: sBytesPushBuffer(r, &((sDoublet *)(e->data))->value, sizeof(double));
+call 0 returned 100%
+ -: 1901: }
+ -: 1902: }}
+ 1: 1903: break;
+ -: 1904: case S_INT:
+ 21: 1905: {forEachSDict(dict, e) {
+branch 0 taken 57%
+branch 1 taken 43% (fallthrough)
+ 12: 1906: if (e->key) {
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- 9: 1868: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ 12: 1907: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 returned 100%
- 9: 1869: i64 v = ((sIntt *)(e->data))->value;
- 9: 1870: uintToVarint(r, (v << 1) ^ (v >> 63));
+ 12: 1908: i64 v = ((sIntt *)(e->data))->value;
+ 12: 1909: uintToVarint(r, (v << 1) ^ (v >> 63));
call 0 returned 100%
- -: 1871: }
- -: 1872: }}
- 6: 1873: break;
- -: 1874: case S_STRING:
- 16: 1875: {forEachSDict(dict, e) {
+ -: 1910: }
+ -: 1911: }}
+ 9: 1912: break;
+ -: 1913: case S_STRING:
+ 16: 1914: {forEachSDict(dict, e) {
branch 0 taken 69%
branch 1 taken 31% (fallthrough)
- 11: 1876: if (e->key) {
+ 11: 1915: if (e->key) {
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- 11: 1877: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ 11: 1916: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 returned 100%
- 11: 1878: sBytesPushBuffer(r, &((sStringt *)(e->data))->data, sizeof(sStringt) + strlen(&(((sStringt *)(e->data))->data)) -1);
+ 11: 1917: sBytesPushBuffer(r, &((sStringt *)(e->data))->data, sizeof(sStringt) + strlen(&(((sStringt *)(e->data))->data)) -1);
call 0 returned 100%
- -: 1879: }
- -: 1880: }}
- 5: 1881: break;
- -: 1882: case S_ARRAY:
- -: 1883: case UNIFORM_ARRAY:
- 4: 1884: {forEachSDict(dict, e) {
+ -: 1918: }
+ -: 1919: }}
+ 5: 1920: break;
+ -: 1921: case S_ARRAY:
+ -: 1922: case UNIFORM_ARRAY:
+ 4: 1923: {forEachSDict(dict, e) {
branch 0 taken 50%
branch 1 taken 50% (fallthrough)
- 2: 1885: if (e->key) {
+ 2: 1924: if (e->key) {
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- 2: 1886: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ 2: 1925: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 returned 100%
- 2: 1887: arrayNetSerial(r, (sArrayt *)(e->data), ctx, /*packing=*/UNIFORM);
+ 2: 1926: arrayNetSerial(r, (sArrayt *)(e->data), ctx, /*packing=*/UNIFORM);
call 0 returned 100%
- -: 1888: }
- -: 1889: }}
- 2: 1890: break;
- -: 1891: case S_BYTES:
- #####: 1892: {forEachSDict(dict, e) {
+ -: 1927: }
+ -: 1928: }}
+ 2: 1929: break;
+ -: 1930: case S_BYTES:
+ #####: 1931: {forEachSDict(dict, e) {
branch 0 never executed
branch 1 never executed
- #####: 1893: if (e->key) {
+ #####: 1932: if (e->key) {
branch 0 never executed
branch 1 never executed
- #####: 1894: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+ #####: 1933: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
call 0 never executed
- #####: 1895: B = (sBytest *)(e->data);
- #####: 1896: uintToVarint(r, B->count);
+ #####: 1934: B = (sBytest *)(e->data);
+ #####: 1935: uintToVarint(r, B->count);
call 0 never executed
- #####: 1897: sBytesPushBuffer(r, &(B->data), B->count);
+ #####: 1936: sBytesPushBuffer(r, &(B->data), B->count);
call 0 never executed
- -: 1898: }
- -: 1899: }}
- #####: 1900: break;
- -: 1901: }
- 22: 1902: ret;
- -: 1903: }
- -: 1904:
- -: 1905: normalDict:
- 54: 1906: if (packing == PACKED or packing == UNIFORM) {
+ -: 1937: }
+ -: 1938: }}
+ #####: 1939: break;
+ -: 1940: }
+ 25: 1941: ret;
+ -: 1942: }
+ -: 1943:
+ -: 1944: normalDict:
+ -: 1945: // encode type and element count
+ 54: 1946: if (packing == PACKED or packing == UNIFORM) {
branch 0 taken 57% (fallthrough)
branch 1 taken 43%
branch 2 taken 13% (fallthrough)
branch 3 taken 87%
- 27: 1907: uintToVarint(r, dict->count);
+ -: 1947: // when the packing is packed or uniform, there is no need to encode DICT type since all elements have this type
+ 27: 1948: uintToVarint(r, dict->count);
call 0 returned 100%
- -: 1908: }
- -: 1909: else {
- 27: 1910: if (ctx->nibble == lowNbl) {
+ -: 1949: }
+ -: 1950: else {
+ 27: 1951: if (ctx->nibble == lowNbl) {
branch 0 taken 93% (fallthrough)
branch 1 taken 7%
- 25: 1911: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)dict->type], dict->count);
-call 0 returned 100%
- -: 1912: }
- -: 1913: else {
- -: 1914: // high nibble
- -: 1915: #define storeTypeInHighNbl(o)\
- -: 1916: ctx->nibble = lowNbl;\
- -: 1917: data = (char *)&((*r)->data) + ctx->nblOffset;\
- -: 1918: *data |= NET_SERIAL_TYPES[(u8)o->type] << 4
- 2: 1919: storeTypeInHighNbl(dict);
- 2: 1920: uintToVarint(r, dict->count);
-call 0 returned 100%
- -: 1921: }
- -: 1922: }
- -: 1923:
- 54: 1924: bool pack = false;
- -: 1925: size_t packCount;
- 210: 1926: enumerateSDict(dict, e, eIdx) {
+ 25: 1952: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)dict->type], dict->count);
+call 0 returned 100%
+ -: 1953: }
+ -: 1954: else {
+ -: 1955: // high nibble
+ -: 1956: #define storeTypeInHighNbl(o)\
+ -: 1957: ctx->nibble = lowNbl;\
+ -: 1958: data = (char *)&((*r)->data) + ctx->nblOffset;\
+ -: 1959: *data |= NET_SERIAL_TYPES[(u8)o->type] << 4
+ 2: 1960: storeTypeInHighNbl(dict);
+ 2: 1961: uintToVarint(r, dict->count);
+call 0 returned 100%
+ -: 1962: }
+ -: 1963: }
+ -: 1964:
+ 54: 1965: bool pack = false;
+ -: 1966: size_t packCount;
+ 210: 1967: enumerateSDict(dict, e, eIdx) {
branch 0 taken 74%
branch 1 taken 26% (fallthrough)
- 156: 1927: if (e->key) {
+ 156: 1968: if (e->key) {
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- 156: 1928: if (!pack) {
+ 156: 1969: if (!pack) {
branch 0 taken 76% (fallthrough)
branch 1 taken 24%
- -: 1929: // scan dict for packing
- 118: 1930: if ((dict->count - eIdx) > 3) {
+ -: 1970: // scan dict for packing
+ 118: 1971: if ((dict->count - eIdx) > 3) {
branch 0 taken 35% (fallthrough)
branch 1 taken 65%
- -: 1931: // at least 4 elements, less than that is not worth it
- 41: 1932: if ( e->data->type == DICT
+ -: 1972: // at least 4 elements, less than that is not worth it
+ 41: 1973: if ( e->data->type == DICT
branch 0 taken 93% (fallthrough)
branch 1 taken 7%
- 38: 1933: or e->data->type == DOUBLE
+ 38: 1974: or e->data->type == DOUBLE
branch 0 taken 95% (fallthrough)
branch 1 taken 5%
- 36: 1934: or e->data->type == INT
+ 36: 1975: or e->data->type == INT
branch 0 taken 94% (fallthrough)
branch 1 taken 6%
- 34: 1935: or e->data->type == STRING
+ 34: 1976: or e->data->type == STRING
branch 0 taken 94% (fallthrough)
branch 1 taken 6%
- 32: 1936: or e->data->type == ARRAY
+ 32: 1977: or e->data->type == ARRAY
branch 0 taken 94% (fallthrough)
branch 1 taken 6%
- 30: 1937: or e->data->type == BYTES) {
+ 30: 1978: or e->data->type == BYTES) {
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 11: 1938: type = e->data->type;
- 11: 1939: packCount = 1;
- 11: 1940: sDictElemt *element = &((dict)->elements) + eIdx;
- 49: 1941: for (size_t i = eIdx+1; i < (dict)->count ; i++, element = &((dict)->elements) + i) {
+ 11: 1979: type = e->data->type;
+ 11: 1980: packCount = 1;
+ 11: 1981: sDictElemt *element = &((dict)->elements) + eIdx +1;
+ 49: 1982: for (size_t i = eIdx+1; i < (dict)->count ; i++, element = &((dict)->elements) + i) {
branch 0 taken 100%
branch 1 taken 0% (fallthrough)
- 49: 1942: if (element->key) {
+ 49: 1983: if (element->key) {
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- 49: 1943: if (element->data->type != type) {
+ 49: 1984: if (element->data->type != type) {
branch 0 taken 22% (fallthrough)
branch 1 taken 78%
- 11: 1944: break;
- -: 1945: }
- 38: 1946: packCount++;
- -: 1947: } // element->key
- -: 1948: } // for
- 11: 1949: if (packCount > 3) {
+ 11: 1985: break;
+ -: 1986: }
+ 38: 1987: packCount++;
+ -: 1988: } // element->key
+ -: 1989: } // for
+ 11: 1990: if (packCount > 3) {
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- 11: 1950: type = PACKED_NET_SERIAL_TYPES[(u8)type];
- 11: 1951: pack = true;
- -: 1952: }
- -: 1953: } // test current element type
- -: 1954: } // is dict big enough
- -: 1955: } // not already packing
- -: 1956:
- 156: 1957: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
-call 0 returned 100%
- -: 1958:
- 156: 1959: switch(e->data->type) {
+ 11: 1991: type = PACKED_NET_SERIAL_TYPES[(u8)type];
+ 11: 1992: pack = true;
+ -: 1993: }
+ -: 1994: } // test current element type
+ -: 1995: } // is dict big enough
+ -: 1996: } // not already packing
+ -: 1997:
+ -: 1998: // encode key
+ 156: 1999: sBytesPushBuffer(r, e->key, strlen(e->key) + 1);
+call 0 returned 100%
+ -: 2000:
+ -: 2001: // encode value
+ 156: 2002: switch(e->data->type) {
branch 0 taken 17%
branch 1 taken 20%
branch 2 taken 13%
@@ -2927,1147 +2970,1166 @@ branch 5 taken 14%
branch 6 taken 8%
branch 7 taken 0%
branch 8 taken 0%
- -: 1960: case UNDEFINED:
- -: 1961: case CONTAINER:
- 26: 1962: if (ctx->nibble == lowNbl) {
+ -: 2003: case UNDEFINED:
+ -: 2004: case CONTAINER:
+ 26: 2005: if (ctx->nibble == lowNbl) {
branch 0 taken 92% (fallthrough)
branch 1 taken 8%
- -: 1963: #define storeTypeOnly(o)\
- -: 1964: sBytesPush(r, NET_SERIAL_TYPES[(u8)o->type]);\
- -: 1965: ctx->nibble = highNbl;\
- -: 1966: ctx->nblOffset = (*r)->count -1
- 24: 1967: storeTypeOnly(e->data);
-call 0 returned 100%
- -: 1968: }
- -: 1969: else {
- 2: 1970: storeTypeInHighNbl(e->data);
- -: 1971: }
- 26: 1972: break;
- -: 1973: case BOOL:
- 31: 1974: if (!ctx->boolOffset) {
+ -: 2006: #define storeTypeOnly(o)\
+ -: 2007: sBytesPush(r, NET_SERIAL_TYPES[(u8)o->type]);\
+ -: 2008: ctx->nibble = highNbl;\
+ -: 2009: ctx->nblOffset = (*r)->count -1
+ 24: 2010: storeTypeOnly(e->data);
+call 0 returned 100%
+ -: 2011: }
+ -: 2012: else {
+ 2: 2013: storeTypeInHighNbl(e->data);
+ -: 2014: }
+ 26: 2015: break;
+ -: 2016: case BOOL:
+ 31: 2017: if (!ctx->boolOffset) {
branch 0 taken 16% (fallthrough)
branch 1 taken 84%
- -: 1975: // new packed bools
- 5: 1976: if (ctx->nibble == lowNbl) {
+ -: 2018: // new packed bools
+ 5: 2019: if (ctx->nibble == lowNbl) {
branch 0 taken 60% (fallthrough)
branch 1 taken 40%
- -: 1977: #define storeNew4bPackedBool(o)\
- -: 1978: u8 c = NET_SERIAL_TYPES[(u8)o->type];\
- -: 1979: /* set bit 4 when true */\
- -: 1980: if (((sBoolt *)(o))->value)\
- -: 1981: c |= (1<<4);\
- -: 1982: sBytesPush(r, c);\
- -: 1983: ctx->boolShift = 5;\
- -: 1984: ctx->boolOffset = (*r)->count -1
- 3: 1985: storeNew4bPackedBool(e->data);
+ -: 2020: #define storeNew4bPackedBool(o)\
+ -: 2021: u8 c = NET_SERIAL_TYPES[(u8)o->type];\
+ -: 2022: /* set bit 4 when true */\
+ -: 2023: if (((sBoolt *)(o))->value)\
+ -: 2024: c |= (1<<4);\
+ -: 2025: sBytesPush(r, c);\
+ -: 2026: ctx->boolShift = 5;\
+ -: 2027: ctx->boolOffset = (*r)->count -1
+ 3: 2028: storeNew4bPackedBool(e->data);
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
call 2 returned 100%
- -: 1986: }
- -: 1987: else {
- -: 1988: // high nibble, next byte is packed bools
- 2: 1989: storeTypeInHighNbl(e->data);
- -: 1990: #define storeNew8bPackedBool(o)\
- -: 1991: u8 c = 0;\
- -: 1992: if (((sBoolt *)(o))->value)\
- -: 1993: c = 1;\
- -: 1994: sBytesPush(r, c);\
- -: 1995: ctx->boolShift = 1;\
- -: 1996: ctx->boolOffset = (*r)->count -1
- 2: 1997: storeNew8bPackedBool(e->data);
+ -: 2029: }
+ -: 2030: else {
+ -: 2031: // high nibble, next byte is packed bools
+ 2: 2032: storeTypeInHighNbl(e->data);
+ -: 2033: #define storeNew8bPackedBool(o)\
+ -: 2034: u8 c = 0;\
+ -: 2035: if (((sBoolt *)(o))->value)\
+ -: 2036: c = 1;\
+ -: 2037: sBytesPush(r, c);\
+ -: 2038: ctx->boolShift = 1;\
+ -: 2039: ctx->boolOffset = (*r)->count -1
+ 2: 2040: storeNew8bPackedBool(e->data);
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
call 2 returned 100%
- -: 1998: }
- -: 1999: }
- -: 2000: else {
- -: 2001: // there was a bool before this one, fill bits in nibbles
- 26: 2002: if (ctx->nibble == lowNbl) {
+ -: 2041: }
+ -: 2042: }
+ -: 2043: else {
+ -: 2044: // there was a bool before this one, fill bits in nibbles
+ 26: 2045: if (ctx->nibble == lowNbl) {
branch 0 taken 58% (fallthrough)
branch 1 taken 42%
- 15: 2003: if (ctx->boolShift == 8) {
+ 15: 2046: if (ctx->boolShift == 8) {
branch 0 taken 7% (fallthrough)
branch 1 taken 93%
- -: 2004: // previous packed bool is full
- -: 2005: // this byte is the new packed bools
- 1: 2006: storeNew4bPackedBool(e->data);
+ -: 2047: // previous packed bool is full
+ -: 2048: // this byte is the new packed bools
+ 1: 2049: storeNew4bPackedBool(e->data);
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
call 2 returned 100%
- -: 2007: }
- -: 2008: else {
- 14: 2009: storeTypeOnly(e->data);
-call 0 returned 100%
- -: 2010: #define storeBool(o)\
- -: 2011: data = (char *)&((*r)->data) + ctx->boolOffset;\
- -: 2012: if (((sBoolt *)(o))->value)\
- -: 2013: *data |= 1 << ctx->boolShift;\
- -: 2014: ctx->boolShift++
- 14: 2015: storeBool(e->data);
+ -: 2050: }
+ -: 2051: else {
+ 14: 2052: storeTypeOnly(e->data);
+call 0 returned 100%
+ -: 2053: #define storeBool(o)\
+ -: 2054: data = (char *)&((*r)->data) + ctx->boolOffset;\
+ -: 2055: if (((sBoolt *)(o))->value)\
+ -: 2056: *data |= 1 << ctx->boolShift;\
+ -: 2057: ctx->boolShift++
+ 14: 2058: storeBool(e->data);
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- -: 2016: }
- -: 2017: }
- -: 2018: else {
- -: 2019: // high nibble
- 11: 2020: storeTypeInHighNbl(e->data);
- 11: 2021: if (ctx->boolShift == 8) {
+ -: 2059: }
+ -: 2060: }
+ -: 2061: else {
+ -: 2062: // high nibble
+ 11: 2063: storeTypeInHighNbl(e->data);
+ 11: 2064: if (ctx->boolShift == 8) {
branch 0 taken 18% (fallthrough)
branch 1 taken 82%
- -: 2022: // previous packed bool is full
- -: 2023: // next byte is the new packed bools
- 2: 2024: storeNew8bPackedBool(e->data);
+ -: 2065: // previous packed bool is full
+ -: 2066: // next byte is the new packed bools
+ 2: 2067: storeNew8bPackedBool(e->data);
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
call 2 returned 100%
- -: 2025: }
- -: 2026: else {
- 9: 2027: storeBool(e->data);
+ -: 2068: }
+ -: 2069: else {
+ 9: 2070: storeBool(e->data);
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- -: 2028: }
- -: 2029: }
- -: 2030: }
- 31: 2031: break;
- -: 2032: case DICT:
- 20: 2033: if (pack) {
+ -: 2071: }
+ -: 2072: }
+ -: 2073: }
+ 31: 2074: break;
+ -: 2075: case DICT:
+ 20: 2076: if (pack) {
branch 0 taken 75% (fallthrough)
branch 1 taken 25%
- 15: 2034: if (type) {
+ 15: 2077: if (type) {
branch 0 taken 20% (fallthrough)
branch 1 taken 80%
- -: 2035: // this is the first packed element
- 3: 2036: if (ctx->nibble == lowNbl) {
+ -: 2078: // this is the first packed element
+ 3: 2079: if (ctx->nibble == lowNbl) {
branch 0 taken 67% (fallthrough)
branch 1 taken 33%
- 2: 2037: uintToNetTypeVarint(r, type, packCount);
-call 0 returned 100%
- -: 2038: }
- -: 2039: else {
- -: 2040: // high nibble
- -: 2041: // store type in high nibble
- 1: 2042: ctx->nibble = lowNbl;
- 1: 2043: data = (char *)&((*r)->data) + ctx->nblOffset;
- 1: 2044: *data |= type << 4;
- 1: 2045: uintToVarint(r, packCount);
-call 0 returned 100%
- -: 2046: }
- 3: 2047: type = 0;
- -: 2048: } // if type
- -: 2049:
- 15: 2050: dictNetSerial(r, (sDictt *)(e->data), ctx, /*packing=*/PACKED);
-call 0 returned 100%
- -: 2051: // stop packing when packCount == 0
- 15: 2052: packCount--;
- 15: 2053: if (!packCount) pack = false;
+ 2: 2080: uintToNetTypeVarint(r, type, packCount);
+call 0 returned 100%
+ -: 2081: }
+ -: 2082: else {
+ -: 2083: // high nibble
+ -: 2084: // store type in high nibble
+ 1: 2085: ctx->nibble = lowNbl;
+ 1: 2086: data = (char *)&((*r)->data) + ctx->nblOffset;
+ 1: 2087: *data |= type << 4;
+ 1: 2088: uintToVarint(r, packCount);
+call 0 returned 100%
+ -: 2089: }
+ 3: 2090: type = 0;
+ -: 2091: } // if type
+ -: 2092:
+ 15: 2093: dictNetSerial(r, (sDictt *)(e->data), ctx, /*packing=*/PACKED);
+call 0 returned 100%
+ -: 2094: // stop packing when packCount == 0
+ 15: 2095: packCount--;
+ 15: 2096: if (!packCount) pack = false;
branch 0 taken 20% (fallthrough)
branch 1 taken 80%
- -: 2054: } // if pack
- -: 2055: else
- 5: 2056: dictNetSerial(r, (sDictt *)(e->data), ctx, /*packing=*/NOPACKING);
+ -: 2097: } // if pack
+ -: 2098: else
+ 5: 2099: dictNetSerial(r, (sDictt *)(e->data), ctx, /*packing=*/NOPACKING);
call 0 returned 100%
- 20: 2057: break;
- -: 2058: case DOUBLE:
- 12: 2059: if (pack) {
+ 20: 2100: break;
+ -: 2101: case DOUBLE:
+ 12: 2102: if (pack) {
branch 0 taken 83% (fallthrough)
branch 1 taken 17%
- 10: 2060: if (type) {
+ 10: 2103: if (type) {
branch 0 taken 20% (fallthrough)
branch 1 taken 80%
- -: 2061: // this is the first packed element
- 2: 2062: if (ctx->nibble == lowNbl) {
+ -: 2104: // this is the first packed element
+ 2: 2105: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 2063: uintToNetTypeVarint(r, type, packCount);
-call 0 returned 100%
- -: 2064: }
- -: 2065: else {
- -: 2066: // high nibble
- -: 2067: // store type in high nibble
- 1: 2068: ctx->nibble = lowNbl;
- 1: 2069: data = (char *)&((*r)->data) + ctx->nblOffset;
- 1: 2070: *data |= type << 4;
- 1: 2071: uintToVarint(r, packCount);
-call 0 returned 100%
- -: 2072: }
- 2: 2073: type = 0;
- -: 2074: } // if type
- -: 2075:
- 10: 2076: sBytesPushBuffer(r, &((sDoublet *)(e->data))->value, sizeof(double));
-call 0 returned 100%
- -: 2077: // stop packing when packCount == 0
- 10: 2078: packCount--;
- 10: 2079: if (!packCount) pack = false;
+ 1: 2106: uintToNetTypeVarint(r, type, packCount);
+call 0 returned 100%
+ -: 2107: }
+ -: 2108: else {
+ -: 2109: // high nibble
+ -: 2110: // store type in high nibble
+ 1: 2111: ctx->nibble = lowNbl;
+ 1: 2112: data = (char *)&((*r)->data) + ctx->nblOffset;
+ 1: 2113: *data |= type << 4;
+ 1: 2114: uintToVarint(r, packCount);
+call 0 returned 100%
+ -: 2115: }
+ 2: 2116: type = 0;
+ -: 2117: } // if type
+ -: 2118:
+ 10: 2119: sBytesPushBuffer(r, &((sDoublet *)(e->data))->value, sizeof(double));
+call 0 returned 100%
+ -: 2120: // stop packing when packCount == 0
+ 10: 2121: packCount--;
+ 10: 2122: if (!packCount) pack = false;
branch 0 taken 20% (fallthrough)
branch 1 taken 80%
- -: 2080: } // if pack
- -: 2081: else {
- 2: 2082: if (ctx->nibble == lowNbl) {
+ -: 2123: } // if pack
+ -: 2124: else {
+ 2: 2125: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 2083: storeTypeOnly(e->data);
-call 0 returned 100%
- -: 2084: }
- -: 2085: else {
- -: 2086: // high nibble
- 1: 2087: storeTypeInHighNbl(e->data);
- -: 2088: }
- 2: 2089: sBytesPushBuffer(r, &((sDoublet *)(e->data))->value, sizeof(double));
-call 0 returned 100%
- -: 2090: }
- 12: 2091: break;
- -: 2092: case INT:
- 32: 2093: if (pack) {
+ 1: 2126: storeTypeOnly(e->data);
+call 0 returned 100%
+ -: 2127: }
+ -: 2128: else {
+ -: 2129: // high nibble
+ 1: 2130: storeTypeInHighNbl(e->data);
+ -: 2131: }
+ 2: 2132: sBytesPushBuffer(r, &((sDoublet *)(e->data))->value, sizeof(double));
+call 0 returned 100%
+ -: 2133: }
+ 12: 2134: break;
+ -: 2135: case INT:
+ 32: 2136: if (pack) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 8: 2094: if (type) {
+ 8: 2137: if (type) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2095: // this is the first packed element
- 2: 2096: if (ctx->nibble == lowNbl) {
+ -: 2138: // this is the first packed element
+ 2: 2139: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 2097: uintToNetTypeVarint(r, type, packCount);
-call 0 returned 100%
- -: 2098: }
- -: 2099: else {
- -: 2100: // high nibble
- -: 2101: // store type in high nibble
- 1: 2102: ctx->nibble = lowNbl;
- 1: 2103: data = (char *)&((*r)->data) + ctx->nblOffset;
- 1: 2104: *data |= type << 4;
- 1: 2105: uintToVarint(r, packCount);
-call 0 returned 100%
- -: 2106: }
- 2: 2107: type = 0;
- -: 2108: } // if type
- -: 2109:
- 8: 2110: i64 v = ((sIntt *)(e->data))->value;
- 8: 2111: uintToVarint(r, (v << 1) ^ (v >> 63));
-call 0 returned 100%
- -: 2112: // stop packing when packCount == 0
- 8: 2113: packCount--;
- 8: 2114: if (!packCount) pack = false;
+ 1: 2140: uintToNetTypeVarint(r, type, packCount);
+call 0 returned 100%
+ -: 2141: }
+ -: 2142: else {
+ -: 2143: // high nibble
+ -: 2144: // store type in high nibble
+ 1: 2145: ctx->nibble = lowNbl;
+ 1: 2146: data = (char *)&((*r)->data) + ctx->nblOffset;
+ 1: 2147: *data |= type << 4;
+ 1: 2148: uintToVarint(r, packCount);
+call 0 returned 100%
+ -: 2149: }
+ 2: 2150: type = 0;
+ -: 2151: } // if type
+ -: 2152:
+ 8: 2153: i64 v = ((sIntt *)(e->data))->value;
+ 8: 2154: uintToVarint(r, (v << 1) ^ (v >> 63));
+call 0 returned 100%
+ -: 2155: // stop packing when packCount == 0
+ 8: 2156: packCount--;
+ 8: 2157: if (!packCount) pack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2115: } // if pack
- -: 2116: else {
- -: 2117: // encode int to varint
- -: 2118: // v is int64_t to convert to varint
- 24: 2119: i64 v = ((sIntt *)(e->data))->value;
- 24: 2120: if (ctx->nibble == lowNbl) {
+ -: 2158: } // if pack
+ -: 2159: else {
+ -: 2160: // encode int to varint
+ -: 2161: // v is int64_t to convert to varint
+ 24: 2162: i64 v = ((sIntt *)(e->data))->value;
+ 24: 2163: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- -: 2121: // encode v with arithmetic shifts
- 12: 2122: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], (v << 1) ^ (v >> 63));
-call 0 returned 100%
- -: 2123: }
- -: 2124: else {
- -: 2125: // high nibble
- 12: 2126: storeTypeInHighNbl(e->data);
- 12: 2127: uintToVarint(r, (v << 1) ^ (v >> 63));
-call 0 returned 100%
- -: 2128: }
- -: 2129: }
- 32: 2130: break;
- -: 2131: case STRING:
- 22: 2132: if (pack) {
+ -: 2164: // encode v with arithmetic shifts
+ 12: 2165: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], (v << 1) ^ (v >> 63));
+call 0 returned 100%
+ -: 2166: }
+ -: 2167: else {
+ -: 2168: // high nibble
+ 12: 2169: storeTypeInHighNbl(e->data);
+ 12: 2170: uintToVarint(r, (v << 1) ^ (v >> 63));
+call 0 returned 100%
+ -: 2171: }
+ -: 2172: }
+ 32: 2173: break;
+ -: 2174: case STRING:
+ 22: 2175: if (pack) {
branch 0 taken 36% (fallthrough)
branch 1 taken 64%
- 8: 2133: if (type) {
+ 8: 2176: if (type) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2134: // this is the first packed element
- 2: 2135: if (ctx->nibble == lowNbl) {
+ -: 2177: // this is the first packed element
+ 2: 2178: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 2136: uintToNetTypeVarint(r, type, packCount);
-call 0 returned 100%
- -: 2137: }
- -: 2138: else {
- -: 2139: // high nibble
- -: 2140: // store type in high nibble
- 1: 2141: ctx->nibble = lowNbl;
- 1: 2142: data = (char *)&((*r)->data) + ctx->nblOffset;
- 1: 2143: *data |= type << 4;
- 1: 2144: uintToVarint(r, packCount);
-call 0 returned 100%
- -: 2145: }
- 2: 2146: type = 0;
- -: 2147: } // if type
- -: 2148:
- 8: 2149: sBytesPushBuffer(r, &((sStringt *)(e->data))->data, sizeof(sStringt) + strlen(&(((sStringt *)(e->data))->data)) -1);
-call 0 returned 100%
- -: 2150: // stop packing when packCount == 0
- 8: 2151: packCount--;
- 8: 2152: if (!packCount) pack = false;
+ 1: 2179: uintToNetTypeVarint(r, type, packCount);
+call 0 returned 100%
+ -: 2180: }
+ -: 2181: else {
+ -: 2182: // high nibble
+ -: 2183: // store type in high nibble
+ 1: 2184: ctx->nibble = lowNbl;
+ 1: 2185: data = (char *)&((*r)->data) + ctx->nblOffset;
+ 1: 2186: *data |= type << 4;
+ 1: 2187: uintToVarint(r, packCount);
+call 0 returned 100%
+ -: 2188: }
+ 2: 2189: type = 0;
+ -: 2190: } // if type
+ -: 2191:
+ 8: 2192: sBytesPushBuffer(r, &((sStringt *)(e->data))->data, sizeof(sStringt) + strlen(&(((sStringt *)(e->data))->data)) -1);
+call 0 returned 100%
+ -: 2193: // stop packing when packCount == 0
+ 8: 2194: packCount--;
+ 8: 2195: if (!packCount) pack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2153: } // if pack
- -: 2154: else {
- 14: 2155: if (ctx->nibble == lowNbl) {
+ -: 2196: } // if pack
+ -: 2197: else {
+ 14: 2198: if (ctx->nibble == lowNbl) {
branch 0 taken 93% (fallthrough)
branch 1 taken 7%
- 13: 2156: storeTypeOnly(e->data);
-call 0 returned 100%
- -: 2157: }
- -: 2158: else {
- -: 2159: // high nibble
- 1: 2160: storeTypeInHighNbl(e->data);
- -: 2161: }
- 14: 2162: sBytesPushBuffer(r, &((sStringt *)(e->data))->data, sizeof(sStringt) + strlen(&(((sStringt *)(e->data))->data)) -1);
-call 0 returned 100%
- -: 2163: }
- 22: 2164: break;
- -: 2165: case ARRAY:
- 13: 2166: if (pack) {
+ 13: 2199: storeTypeOnly(e->data);
+call 0 returned 100%
+ -: 2200: }
+ -: 2201: else {
+ -: 2202: // high nibble
+ 1: 2203: storeTypeInHighNbl(e->data);
+ -: 2204: }
+ 14: 2205: sBytesPushBuffer(r, &((sStringt *)(e->data))->data, sizeof(sStringt) + strlen(&(((sStringt *)(e->data))->data)) -1);
+call 0 returned 100%
+ -: 2206: }
+ 22: 2207: break;
+ -: 2208: case ARRAY:
+ 13: 2209: if (pack) {
branch 0 taken 62% (fallthrough)
branch 1 taken 38%
- 8: 2167: if (type) {
+ 8: 2210: if (type) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2168: // this is the first packed element
- 2: 2169: if (ctx->nibble == lowNbl) {
+ -: 2211: // this is the first packed element
+ 2: 2212: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 2170: uintToNetTypeVarint(r, type, packCount);
-call 0 returned 100%
- -: 2171: }
- -: 2172: else {
- -: 2173: // high nibble
- -: 2174: // store type in high nibble
- 1: 2175: ctx->nibble = lowNbl;
- 1: 2176: data = (char *)&((*r)->data) + ctx->nblOffset;
- 1: 2177: *data |= type << 4;
- 1: 2178: uintToVarint(r, packCount);
-call 0 returned 100%
- -: 2179: }
- 2: 2180: type = 0;
- -: 2181: } // if type
- -: 2182:
- 8: 2183: arrayNetSerial(r, (sArrayt *)(e->data), ctx, /*packing=*/PACKED);
-call 0 returned 100%
- -: 2184: // stop packing when packCount == 0
- 8: 2185: packCount--;
- 8: 2186: if (!packCount) pack = false;
+ 1: 2213: uintToNetTypeVarint(r, type, packCount);
+call 0 returned 100%
+ -: 2214: }
+ -: 2215: else {
+ -: 2216: // high nibble
+ -: 2217: // store type in high nibble
+ 1: 2218: ctx->nibble = lowNbl;
+ 1: 2219: data = (char *)&((*r)->data) + ctx->nblOffset;
+ 1: 2220: *data |= type << 4;
+ 1: 2221: uintToVarint(r, packCount);
+call 0 returned 100%
+ -: 2222: }
+ 2: 2223: type = 0;
+ -: 2224: } // if type
+ -: 2225:
+ 8: 2226: arrayNetSerial(r, (sArrayt *)(e->data), ctx, /*packing=*/PACKED);
+call 0 returned 100%
+ -: 2227: // stop packing when packCount == 0
+ 8: 2228: packCount--;
+ 8: 2229: if (!packCount) pack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2187: } // if pack
- -: 2188: else
- 5: 2189: arrayNetSerial(r, (sArrayt *)(e->data), ctx, /*packing=*/NOPACKING);
-call 0 returned 100%
- 13: 2190: break;
- -: 2191: case BYTES:
- #####: 2192: if (pack) {
-branch 0 never executed
-branch 1 never executed
- #####: 2193: if (type) {
-branch 0 never executed
-branch 1 never executed
- -: 2194: // this is the first packed element
- #####: 2195: if (ctx->nibble == lowNbl) {
-branch 0 never executed
-branch 1 never executed
- #####: 2196: uintToNetTypeVarint(r, type, packCount);
-call 0 never executed
- -: 2197: }
- -: 2198: else {
- -: 2199: // high nibble
- -: 2200: // store type in high nibble
- #####: 2201: ctx->nibble = lowNbl;
- #####: 2202: data = (char *)&((*r)->data) + ctx->nblOffset;
- #####: 2203: *data |= type << 4;
- #####: 2204: uintToVarint(r, packCount);
-call 0 never executed
- -: 2205: }
- #####: 2206: type = 0;
- -: 2207: } // if type
- -: 2208:
- #####: 2209: B = (sBytest *)(e->data);
- #####: 2210: uintToVarint(r, B->count);
-call 0 never executed
- #####: 2211: sBytesPushBuffer(r, &(B->data), B->count);
-call 0 never executed
- -: 2212: // stop packing when packCount == 0
- #####: 2213: packCount--;
- #####: 2214: if (!packCount) pack = false;
-branch 0 never executed
-branch 1 never executed
- -: 2215: } // if pack
- -: 2216: else {
- #####: 2217: B = (sBytest *)(e->data);
- #####: 2218: if (ctx->nibble == lowNbl) {
-branch 0 never executed
-branch 1 never executed
- #####: 2219: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], B->count);
-call 0 never executed
- -: 2220: }
- -: 2221: else {
- -: 2222: // high nibble
- #####: 2223: storeTypeInHighNbl(e->data);
- #####: 2224: uintToVarint(r, B->count);
-call 0 never executed
- -: 2225: }
- #####: 2226: sBytesPushBuffer(r, &(B->data), B->count);
-call 0 never executed
- -: 2227: }
- #####: 2228: break;
- -: 2229: }
- -: 2230: }
- -: 2231: }
- 54: 2232: ret;
- -: 2233:}
- -: 2234:
- -: 2235:/**
- -: 2236: * serialize array
- -: 2237: *
- -: 2238: * the serialized array is pushed to r.
- -: 2239: * All elements are serialized recursively
- -: 2240: *
- -: 2241: * the data in containers is not serialized
- -: 2242: *
- -: 2243: * \param
- -: 2244: * r small bytes object
- -: 2245: * array to serialize
- -: 2246: */
-function arrayNetSerial called 71 returned 100% blocks executed 86%
- 71: 2247:internal void arrayNetSerial(sBytest **r, sArrayt *array, contextt *ctx, packingT packing) {
- 71: 2248: sBytest *B = NULL;
- 71: 2249: char *data = NULL;
- -: 2250:
- -: 2251: // check if all elements have same type
- 71: 2252: bool allElementsHaveSameType = true;
- 71: 2253: bool foundFirstType = false;
- 71: 2254: char type = 0;
- -: 2255:
- 213: 2256: {forEachSArray(array, e) {
+ -: 2230: } // if pack
+ -: 2231: else
+ 5: 2232: arrayNetSerial(r, (sArrayt *)(e->data), ctx, /*packing=*/NOPACKING);
+call 0 returned 100%
+ 13: 2233: break;
+ -: 2234: case BYTES:
+ #####: 2235: if (pack) {
+branch 0 never executed
+branch 1 never executed
+ #####: 2236: if (type) {
+branch 0 never executed
+branch 1 never executed
+ -: 2237: // this is the first packed element
+ #####: 2238: if (ctx->nibble == lowNbl) {
+branch 0 never executed
+branch 1 never executed
+ #####: 2239: uintToNetTypeVarint(r, type, packCount);
+call 0 never executed
+ -: 2240: }
+ -: 2241: else {
+ -: 2242: // high nibble
+ -: 2243: // store type in high nibble
+ #####: 2244: ctx->nibble = lowNbl;
+ #####: 2245: data = (char *)&((*r)->data) + ctx->nblOffset;
+ #####: 2246: *data |= type << 4;
+ #####: 2247: uintToVarint(r, packCount);
+call 0 never executed
+ -: 2248: }
+ #####: 2249: type = 0;
+ -: 2250: } // if type
+ -: 2251:
+ #####: 2252: B = (sBytest *)(e->data);
+ #####: 2253: uintToVarint(r, B->count);
+call 0 never executed
+ #####: 2254: sBytesPushBuffer(r, &(B->data), B->count);
+call 0 never executed
+ -: 2255: // stop packing when packCount == 0
+ #####: 2256: packCount--;
+ #####: 2257: if (!packCount) pack = false;
+branch 0 never executed
+branch 1 never executed
+ -: 2258: } // if pack
+ -: 2259: else {
+ #####: 2260: B = (sBytest *)(e->data);
+ #####: 2261: if (ctx->nibble == lowNbl) {
+branch 0 never executed
+branch 1 never executed
+ #####: 2262: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->data->type], B->count);
+call 0 never executed
+ -: 2263: }
+ -: 2264: else {
+ -: 2265: // high nibble
+ #####: 2266: storeTypeInHighNbl(e->data);
+ #####: 2267: uintToVarint(r, B->count);
+call 0 never executed
+ -: 2268: }
+ #####: 2269: sBytesPushBuffer(r, &(B->data), B->count);
+call 0 never executed
+ -: 2270: }
+ #####: 2271: break;
+ -: 2272: }
+ -: 2273: }
+ -: 2274: }
+ 54: 2275: ret;
+ -: 2276:}
+ -: 2277:
+ -: 2278:/**
+ -: 2279: * serialize array
+ -: 2280: *
+ -: 2281: * the serialized array is pushed to r.
+ -: 2282: * All elements are serialized recursively
+ -: 2283: *
+ -: 2284: * the data in containers is not serialized
+ -: 2285: *
+ -: 2286: * \param
+ -: 2287: * r small bytes object
+ -: 2288: * array to serialize
+ -: 2289: */
+function arrayNetSerial called 73 returned 100% blocks executed 86%
+ 73: 2290:internal void arrayNetSerial(sBytest **r, sArrayt *array, contextt *ctx, packingT packing) {
+ 73: 2291: sBytest *B = NULL;
+ 73: 2292: char *data = NULL;
+ -: 2293:
+ -: 2294: // check if all elements have same type
+ -: 2295: // then set array type normal or uniform
+ -: 2296: // array and dict have to be checked recursively to know if they are normal or uniform
+ 73: 2297: bool allElementsHaveSameType = true;
+ 73: 2298: bool foundFirstType = false;
+ 73: 2299: char type = 0;
+ -: 2300:
+ -: 2301: // get first element type
+ -: 2302: // compare to other element type
+ -: 2303: // null element are interpreted as undefined
+ 217: 2304: {forEachSArray(array, e) {
branch 0 taken 82%
branch 1 taken 18% (fallthrough)
- 174: 2257: if (!e) {
+ 177: 2305: if (!e) {
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- #####: 2258: if (foundFirstType) {
+ #####: 2306: if (foundFirstType) {
branch 0 never executed
branch 1 never executed
- #####: 2259: if (type != S_UNDEFINED) {
+ #####: 2307: if (type != S_UNDEFINED) {
branch 0 never executed
branch 1 never executed
- #####: 2260: allElementsHaveSameType = false;
- #####: 2261: break;
- -: 2262: }
- -: 2263: }
- -: 2264: else {
- #####: 2265: type = S_UNDEFINED;
- #####: 2266: foundFirstType = true;
- -: 2267: }
- -: 2268: }
- -: 2269: else {
- 174: 2270: if (foundFirstType) {
+ #####: 2308: allElementsHaveSameType = false;
+ #####: 2309: break;
+ -: 2310: }
+ -: 2311: }
+ -: 2312: else {
+ #####: 2313: type = S_UNDEFINED;
+ #####: 2314: foundFirstType = true;
+ -: 2315: }
+ -: 2316: }
+ -: 2317: else {
+ 177: 2318: if (foundFirstType) {
branch 0 taken 61% (fallthrough)
branch 1 taken 39%
- -: 2271: u8 nextType;
- 107: 2272: switch(e->type) {
-branch 0 taken 7%
+ -: 2319: u8 nextType;
+ 108: 2320: switch(e->type) {
+branch 0 taken 6%
branch 1 taken 10%
branch 2 taken 83%
- -: 2273: case DICT:
- 7: 2274: nextType = isDictUniform((sDictt*)e);
-call 0 returned 100%
- 7: 2275: break;
- -: 2276: case ARRAY:
- 11: 2277: nextType = isArrayUniform((sArrayt*)e);
-call 0 returned 100%
- 11: 2278: break;
- -: 2279: default:
- 89: 2280: nextType = NET_SERIAL_TYPES[(u8)e->type];
- -: 2281: }
- 107: 2282: if (nextType != type) {
-branch 0 taken 30% (fallthrough)
-branch 1 taken 70%
- 32: 2283: allElementsHaveSameType = false;
- 32: 2284: break;
- -: 2285: }
- -: 2286: }
- -: 2287: else {
- 67: 2288: switch(e->type) {
-branch 0 taken 6%
-branch 1 taken 7%
-branch 2 taken 87%
- -: 2289: case DICT:
- 4: 2290: type = isDictUniform((sDictt*)e);
-call 0 returned 100%
- 4: 2291: break;
- -: 2292: case ARRAY:
- 5: 2293: type = isArrayUniform((sArrayt*)e);
-call 0 returned 100%
- 5: 2294: break;
- -: 2295: default:
- 58: 2296: type = NET_SERIAL_TYPES[(u8)e->type];
- -: 2297: }
- 67: 2298: foundFirstType = true;
- -: 2299: }
- -: 2300: }
- -: 2301: }}
- -: 2302:
- 71: 2303: if (allElementsHaveSameType) {
+ -: 2321: case DICT:
+ 7: 2322: nextType = isDictUniform((sDictt*)e);
+call 0 returned 100%
+ 7: 2323: break;
+ -: 2324: case ARRAY:
+ 11: 2325: nextType = isArrayUniform((sArrayt*)e);
+call 0 returned 100%
+ 11: 2326: break;
+ -: 2327: default:
+ 90: 2328: nextType = NET_SERIAL_TYPES[(u8)e->type];
+ -: 2329: }
+ 108: 2330: if (nextType != type) {
+branch 0 taken 31% (fallthrough)
+branch 1 taken 69%
+ 33: 2331: allElementsHaveSameType = false;
+ 33: 2332: break;
+ -: 2333: }
+ -: 2334: }
+ -: 2335: else {
+ 69: 2336: switch(e->type) {
+branch 0 taken 7%
+branch 1 taken 9%
+branch 2 taken 84%
+ -: 2337: case DICT:
+ 5: 2338: type = isDictUniform((sDictt*)e);
+call 0 returned 100%
+ 5: 2339: break;
+ -: 2340: case ARRAY:
+ 6: 2341: type = isArrayUniform((sArrayt*)e);
+call 0 returned 100%
+ 6: 2342: break;
+ -: 2343: default:
+ 58: 2344: type = NET_SERIAL_TYPES[(u8)e->type];
+ -: 2345: }
+ 69: 2346: foundFirstType = true;
+ -: 2347: }
+ -: 2348: }
+ -: 2349: }}
+ -: 2350:
+ 73: 2351: if (allElementsHaveSameType) {
branch 0 taken 55% (fallthrough)
branch 1 taken 45%
- -: 2304: // pack array
- 39: 2305: if (packing == PACKED) {
-branch 0 taken 41% (fallthrough)
-branch 1 taken 59%
- -: 2306: // uniform array can't be packed
- -: 2307: // because there is only one type of packed arrays
- 16: 2308: goto normalArray;
- -: 2309: }
- 23: 2310: elif (packing == UNIFORM) {
-branch 0 taken 9% (fallthrough)
-branch 1 taken 91%
- 2: 2311: uintToNetTypeVarint(r, type, array->count);
+ -: 2352: // uniform array
+ -: 2353: // encode type and element count
+ -: 2354:
+ -: 2355: // in pack array
+ 40: 2356: if (packing == PACKED) {
+branch 0 taken 40% (fallthrough)
+branch 1 taken 60%
+ -: 2357: // uniform array can't be packed
+ -: 2358: // because there is only one type of packed arrays
+ 16: 2359: goto normalArray;
+ -: 2360: }
+ 24: 2361: elif (packing == UNIFORM) {
+branch 0 taken 8% (fallthrough)
+branch 1 taken 92%
+ -: 2362: // when the packing is uniform, there is no need to encode UNIFORM_ARRAY since all elements have this type
+ 2: 2363: uintToNetTypeVarint(r, type, array->count);
call 0 returned 100%
- -: 2312: }
- -: 2313: else {
- 21: 2314: if (ctx->nibble == lowNbl) {
-branch 0 taken 76% (fallthrough)
-branch 1 taken 24%
- 16: 2315: sBytesPush(r, (type << 4) + UNIFORM_ARRAY);
-call 0 returned 100%
- 16: 2316: uintToVarint(r, array->count);
-call 0 returned 100%
- -: 2317: }
- -: 2318: else {
- -: 2319: // high nibble
- 5: 2320: ctx->nibble = lowNbl;
- 5: 2321: data = (char *)&((*r)->data) + ctx->nblOffset;
- 5: 2322: *data |= UNIFORM_ARRAY << 4;
- 5: 2323: uintToNetTypeVarint(r, type, array->count);
-call 0 returned 100%
- -: 2324: }
- -: 2325: }
- -: 2326:
- 23: 2327: switch(type) {
-branch 0 taken 9%
-branch 1 taken 9%
+ -: 2364: }
+ -: 2365: else {
+ 22: 2366: if (ctx->nibble == lowNbl) {
+branch 0 taken 77% (fallthrough)
+branch 1 taken 23%
+ 17: 2367: sBytesPush(r, (type << 4) + UNIFORM_ARRAY);
+call 0 returned 100%
+ 17: 2368: uintToVarint(r, array->count);
+call 0 returned 100%
+ -: 2369: }
+ -: 2370: else {
+ -: 2371: // high nibble
+ 5: 2372: ctx->nibble = lowNbl;
+ 5: 2373: data = (char *)&((*r)->data) + ctx->nblOffset;
+ 5: 2374: *data |= UNIFORM_ARRAY << 4;
+ 5: 2375: uintToNetTypeVarint(r, type, array->count);
+call 0 returned 100%
+ -: 2376: }
+ -: 2377: }
+ -: 2378:
+ -: 2379: // encode all element values
+ 24: 2380: switch(type) {
+branch 0 taken 8%
+branch 1 taken 8%
branch 2 taken 4%
-branch 3 taken 48%
+branch 3 taken 46%
branch 4 taken 4%
-branch 5 taken 13%
+branch 5 taken 17%
branch 6 taken 0%
branch 7 taken 13%
- -: 2328: case S_BOOL:
- 16: 2329: {forEachSArray(array, e) {
+ -: 2381: case S_BOOL:
+ 16: 2382: {forEachSArray(array, e) {
branch 0 taken 88%
branch 1 taken 13% (fallthrough)
- 14: 2330: if (!ctx->boolOffset) {
+ 14: 2383: if (!ctx->boolOffset) {
branch 0 taken 14% (fallthrough)
branch 1 taken 86%
- -: 2331: // new packed bools
- 2: 2332: storeNew8bPackedBool(e);
+ -: 2384: // new packed bools
+ 2: 2385: storeNew8bPackedBool(e);
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
call 2 returned 100%
- -: 2333: }
- -: 2334: else {
- -: 2335: // there was a bool before this one, fill bits in nibbles
- 12: 2336: if (ctx->boolShift == 8) {
+ -: 2386: }
+ -: 2387: else {
+ -: 2388: // there was a bool before this one, fill bits in nibbles
+ 12: 2389: if (ctx->boolShift == 8) {
branch 0 taken 8% (fallthrough)
branch 1 taken 92%
- -: 2337: // previous packed bool is full
- -: 2338: // next byte is the new packed bools
- 1: 2339: storeNew8bPackedBool(e);
+ -: 2390: // previous packed bool is full
+ -: 2391: // next byte is the new packed bools
+ 1: 2392: storeNew8bPackedBool(e);
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
call 2 returned 100%
- -: 2340: }
- -: 2341: else {
- 11: 2342: storeBool(e);
+ -: 2393: }
+ -: 2394: else {
+ 11: 2395: storeBool(e);
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
- -: 2343: }
- -: 2344: }
- -: 2345: }}
- 2: 2346: break;
- -: 2347: case S_DICT:
- -: 2348: case UNIFORM_DICT:
- 6: 2349: {forEachSArray(array, e) {
+ -: 2396: }
+ -: 2397: }
+ -: 2398: }}
+ 2: 2399: break;
+ -: 2400: case S_DICT:
+ -: 2401: case UNIFORM_DICT:
+ 6: 2402: {forEachSArray(array, e) {
branch 0 taken 67%
branch 1 taken 33% (fallthrough)
- 4: 2350: dictNetSerial(r, (sDictt *)e, ctx, /*packing=*/UNIFORM);
+ 4: 2403: dictNetSerial(r, (sDictt *)e, ctx, /*packing=*/UNIFORM);
call 0 returned 100%
- -: 2351: }}
- 2: 2352: break;
- -: 2353: case S_DOUBLE:
- 4: 2354: {forEachSArray(array, e) {
+ -: 2404: }}
+ 2: 2405: break;
+ -: 2406: case S_DOUBLE:
+ 4: 2407: {forEachSArray(array, e) {
branch 0 taken 75%
branch 1 taken 25% (fallthrough)
- 3: 2355: sBytesPushBuffer(r, &((sDoublet *)e)->value, sizeof(double));
+ 3: 2408: sBytesPushBuffer(r, &((sDoublet *)e)->value, sizeof(double));
call 0 returned 100%
- -: 2356: }}
- 1: 2357: break;
- -: 2358: case S_INT:
- 49: 2359: {forEachSArray(array, e) {
+ -: 2409: }}
+ 1: 2410: break;
+ -: 2411: case S_INT:
+ 49: 2412: {forEachSArray(array, e) {
branch 0 taken 78%
branch 1 taken 22% (fallthrough)
- 38: 2360: i64 v = ((sIntt *)e)->value;
- 38: 2361: uintToVarint(r, (v << 1) ^ (v >> 63));
+ 38: 2413: i64 v = ((sIntt *)e)->value;
+ 38: 2414: uintToVarint(r, (v << 1) ^ (v >> 63));
call 0 returned 100%
- -: 2362: }}
- 11: 2363: break;
- -: 2364: case S_STRING:
- 4: 2365: {forEachSArray(array, e) {
+ -: 2415: }}
+ 11: 2416: break;
+ -: 2417: case S_STRING:
+ 4: 2418: {forEachSArray(array, e) {
branch 0 taken 75%
branch 1 taken 25% (fallthrough)
- 3: 2366: sBytesPushBuffer(r, &((sStringt *)e)->data, sizeof(sStringt) + strlen(&(((sStringt *)e)->data)) -1);
+ 3: 2419: sBytesPushBuffer(r, &((sStringt *)e)->data, sizeof(sStringt) + strlen(&(((sStringt *)e)->data)) -1);
call 0 returned 100%
- -: 2367: }}
- 1: 2368: break;
- -: 2369: case S_ARRAY:
- -: 2370: case UNIFORM_ARRAY:
- 8: 2371: {forEachSArray(array, e) {
-branch 0 taken 63%
-branch 1 taken 38% (fallthrough)
- 5: 2372: arrayNetSerial(r, (sArrayt *)e, ctx, /*packing=*/UNIFORM);
+ -: 2420: }}
+ 1: 2421: break;
+ -: 2422: case S_ARRAY:
+ -: 2423: case UNIFORM_ARRAY:
+ 10: 2424: {forEachSArray(array, e) {
+branch 0 taken 60%
+branch 1 taken 40% (fallthrough)
+ 6: 2425: arrayNetSerial(r, (sArrayt *)e, ctx, /*packing=*/UNIFORM);
call 0 returned 100%
- -: 2373: }}
- 3: 2374: break;
- -: 2375: case S_BYTES:
- #####: 2376: {forEachSArray(array, e) {
+ -: 2426: }}
+ 4: 2427: break;
+ -: 2428: case S_BYTES:
+ #####: 2429: {forEachSArray(array, e) {
branch 0 never executed
branch 1 never executed
- #####: 2377: B = (sBytest *)e;
- #####: 2378: uintToVarint(r, B->count);
+ #####: 2430: B = (sBytest *)e;
+ #####: 2431: uintToVarint(r, B->count);
call 0 never executed
- #####: 2379: sBytesPushBuffer(r, &(B->data), B->count);
+ #####: 2432: sBytesPushBuffer(r, &(B->data), B->count);
call 0 never executed
- -: 2380: }}
- #####: 2381: break;
- -: 2382: }
- 23: 2383: ret;
- -: 2384: }
- -: 2385:
- -: 2386: normalArray:
- 48: 2387: if (packing == PACKED or packing == UNIFORM) {
+ -: 2433: }}
+ #####: 2434: break;
+ -: 2435: }
+ 24: 2436: ret;
+ -: 2437: }
+ -: 2438:
+ -: 2439: normalArray:
+ -: 2440: // encode type and element count
+ 49: 2441: if (packing == PACKED or packing == UNIFORM) {
branch 0 taken 67% (fallthrough)
branch 1 taken 33%
-branch 2 taken 16% (fallthrough)
-branch 3 taken 84%
- 21: 2388: uintToVarint(r, array->count);
-call 0 returned 100%
- -: 2389: }
- -: 2390: else {
- 27: 2391: if (ctx->nibble == lowNbl) {
+branch 2 taken 18% (fallthrough)
+branch 3 taken 82%
+ -: 2442: // when the packing is packed or uniform, there is no need to encode ARRAY type since all elements have this type
+ 22: 2443: uintToVarint(r, array->count);
+call 0 returned 100%
+ -: 2444: }
+ -: 2445: else {
+ 27: 2446: if (ctx->nibble == lowNbl) {
branch 0 taken 96% (fallthrough)
branch 1 taken 4%
- 26: 2392: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)array->type], array->count);
-call 0 returned 100%
- -: 2393: }
- -: 2394: else {
- -: 2395: // high nibble
- 1: 2396: storeTypeInHighNbl(array);
- 1: 2397: uintToVarint(r, array->count);
-call 0 returned 100%
- -: 2398: }
- -: 2399: }
- -: 2400:
- 48: 2401: bool pack = false;
- -: 2402: size_t packCount;
- 198: 2403: enumerateSArray(array, e, eIdx) {
+ 26: 2447: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)array->type], array->count);
+call 0 returned 100%
+ -: 2448: }
+ -: 2449: else {
+ -: 2450: // high nibble
+ 1: 2451: storeTypeInHighNbl(array);
+ 1: 2452: uintToVarint(r, array->count);
+call 0 returned 100%
+ -: 2453: }
+ -: 2454: }
+ -: 2455:
+ 49: 2456: bool pack = false;
+ -: 2457: size_t packCount;
+ 203: 2458: enumerateSArray(array, e, eIdx) {
branch 0 taken 76%
branch 1 taken 24% (fallthrough)
- 150: 2404: if (!e) {
+ 154: 2459: if (!e) {
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- -: 2405: // empty slots are represented as undefined elements
- #####: 2406: if (ctx->nibble == lowNbl) {
-branch 0 never executed
-branch 1 never executed
- #####: 2407: sBytesPush(r, NET_SERIAL_TYPES[UNDEFINED]);
-call 0 never executed
- #####: 2408: ctx->nibble = highNbl;
- #####: 2409: ctx->nblOffset = (*r)->count -1;
- -: 2410: }
- -: 2411: else {
- -: 2412: // high nibble
- #####: 2413: ctx->nibble = lowNbl;
- #####: 2414: data = (char *)&((*r)->data) + ctx->nblOffset;
- #####: 2415: *data |= NET_SERIAL_TYPES[UNDEFINED] << 4;
- -: 2416: }
- -: 2417: }
- -: 2418: else {
- 150: 2419: if (!pack) {
-branch 0 taken 80% (fallthrough)
-branch 1 taken 20%
- -: 2420: // scan array for packing
- 120: 2421: if ((array->count - eIdx) > 3) {
-branch 0 taken 33% (fallthrough)
+ -: 2460: // empty slots are represented as undefined elements
+ #####: 2461: if (ctx->nibble == lowNbl) {
+branch 0 never executed
+branch 1 never executed
+ #####: 2462: sBytesPush(r, NET_SERIAL_TYPES[UNDEFINED]);
+call 0 never executed
+ #####: 2463: ctx->nibble = highNbl;
+ #####: 2464: ctx->nblOffset = (*r)->count -1;
+ -: 2465: }
+ -: 2466: else {
+ -: 2467: // high nibble
+ #####: 2468: ctx->nibble = lowNbl;
+ #####: 2469: data = (char *)&((*r)->data) + ctx->nblOffset;
+ #####: 2470: *data |= NET_SERIAL_TYPES[UNDEFINED] << 4;
+ -: 2471: }
+ -: 2472: }
+ -: 2473: else {
+ 154: 2474: if (!pack) {
+branch 0 taken 81% (fallthrough)
+branch 1 taken 19%
+ -: 2475: // scan array for packing
+ 124: 2476: if ((array->count - eIdx) > 3) {
+branch 0 taken 32% (fallthrough)
branch 1 taken 68%
- -: 2422: // at least 4 elements, less than that is not worth it
- 39: 2423: if ( e->type == DICT
-branch 0 taken 92% (fallthrough)
-branch 1 taken 8%
- 36: 2424: or e->type == DOUBLE
+ -: 2477: // at least 4 elements, less than that is not worth it
+ 40: 2478: if ( e->type == DICT
+branch 0 taken 90% (fallthrough)
+branch 1 taken 10%
+ 36: 2479: or e->type == DOUBLE
branch 0 taken 94% (fallthrough)
branch 1 taken 6%
- 34: 2425: or e->type == INT
+ 34: 2480: or e->type == INT
branch 0 taken 91% (fallthrough)
branch 1 taken 9%
- 31: 2426: or e->type == STRING
+ 31: 2481: or e->type == STRING
branch 0 taken 94% (fallthrough)
branch 1 taken 6%
- 29: 2427: or e->type == ARRAY
+ 29: 2482: or e->type == ARRAY
branch 0 taken 93% (fallthrough)
branch 1 taken 7%
- 27: 2428: or e->type == BYTES) {
+ 27: 2483: or e->type == BYTES) {
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 12: 2429: type = e->type;
- 12: 2430: packCount = 1;
- 12: 2431: smallt *element = ((smallt **) &((array)->data))[eIdx];
- 45: 2432: for (size_t i = eIdx+1; i < (array)->count ; i++, element = ((smallt **) &((array)->data))[i]) {
+ 13: 2484: type = e->type;
+ 13: 2485: packCount = 1;
+ 13: 2486: smallt *element = ((smallt **) &((array)->data))[eIdx+1];
+ 45: 2487: for (size_t i = eIdx+1; i < (array)->count ; i++, element = ((smallt **) &((array)->data))[i]) {
branch 0 taken 100%
branch 1 taken 0% (fallthrough)
- 45: 2433: if (!element) {
+ 45: 2488: if (!element) {
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- -: 2434: // null element are undefined
- #####: 2435: break;
- -: 2436: }
- -: 2437: else {
- 45: 2438: if (element->type != type) {
-branch 0 taken 27% (fallthrough)
-branch 1 taken 73%
- 12: 2439: break;
- -: 2440: }
- 33: 2441: packCount++;
- -: 2442: } // if element
- -: 2443: } // for
- 12: 2444: if (packCount > 3) {
-branch 0 taken 83% (fallthrough)
-branch 1 taken 17%
- 10: 2445: type = PACKED_NET_SERIAL_TYPES[(u8)type];
- 10: 2446: pack = true;
- -: 2447: }
- -: 2448: } // test current element type
- -: 2449: } // is array big enough
- -: 2450: } // not already packing
- -: 2451:
- 150: 2452: switch(e->type) {
-branch 0 taken 18%
+ -: 2489: // null element are undefined
+ #####: 2490: break;
+ -: 2491: }
+ -: 2492: else {
+ 45: 2493: if (element->type != type) {
+branch 0 taken 29% (fallthrough)
+branch 1 taken 71%
+ 13: 2494: break;
+ -: 2495: }
+ 32: 2496: packCount++;
+ -: 2497: } // if element
+ -: 2498: } // for
+ 13: 2499: if (packCount > 3) {
+branch 0 taken 77% (fallthrough)
branch 1 taken 23%
-branch 2 taken 8%
-branch 3 taken 7%
-branch 4 taken 20%
+ 10: 2500: type = PACKED_NET_SERIAL_TYPES[(u8)type];
+ 10: 2501: pack = true;
+ -: 2502: }
+ -: 2503: } // test current element type
+ -: 2504: } // is array big enough
+ -: 2505: } // not already packing
+ -: 2506:
+ -: 2507: // encode element value
+ 154: 2508: switch(e->type) {
+branch 0 taken 18%
+branch 1 taken 22%
+branch 2 taken 10%
+branch 3 taken 6%
+branch 4 taken 19%
branch 5 taken 14%
-branch 6 taken 11%
+branch 6 taken 10%
branch 7 taken 0%
branch 8 taken 0%
- -: 2453: case UNDEFINED:
- -: 2454: case CONTAINER:
- 27: 2455: if (ctx->nibble == lowNbl) {
+ -: 2509: case UNDEFINED:
+ -: 2510: case CONTAINER:
+ 28: 2511: if (ctx->nibble == lowNbl) {
branch 0 taken 93% (fallthrough)
branch 1 taken 7%
- 25: 2456: storeTypeOnly(e);
-call 0 returned 100%
- -: 2457: }
- -: 2458: else {
- -: 2459: // high nibble
- 2: 2460: storeTypeInHighNbl(e);
- -: 2461: }
- 27: 2462: break;
- -: 2463: case BOOL:
- 34: 2464: if (!ctx->boolOffset) {
+ 26: 2512: storeTypeOnly(e);
+call 0 returned 100%
+ -: 2513: }
+ -: 2514: else {
+ -: 2515: // high nibble
+ 2: 2516: storeTypeInHighNbl(e);
+ -: 2517: }
+ 28: 2518: break;
+ -: 2519: case BOOL:
+ 34: 2520: if (!ctx->boolOffset) {
branch 0 taken 18% (fallthrough)
branch 1 taken 82%
- -: 2465: // new packed bools
- 6: 2466: if (ctx->nibble == lowNbl) {
+ -: 2521: // new packed bools
+ 6: 2522: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 3: 2467: storeNew4bPackedBool(e);
+ 3: 2523: storeNew4bPackedBool(e);
branch 0 taken 67% (fallthrough)
branch 1 taken 33%
call 2 returned 100%
- -: 2468: }
- -: 2469: else {
- -: 2470: // high nibble, next byte is packed bools
- 3: 2471: storeTypeInHighNbl(e);
- 3: 2472: storeNew8bPackedBool(e);
+ -: 2524: }
+ -: 2525: else {
+ -: 2526: // high nibble, next byte is packed bools
+ 3: 2527: storeTypeInHighNbl(e);
+ 3: 2528: storeNew8bPackedBool(e);
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
call 2 returned 100%
- -: 2473: }
- -: 2474: }
- -: 2475: else {
- -: 2476: // there was a bool before this one, fill bits in nibbles
- 28: 2477: if (ctx->nibble == lowNbl) {
+ -: 2529: }
+ -: 2530: }
+ -: 2531: else {
+ -: 2532: // there was a bool before this one, fill bits in nibbles
+ 28: 2533: if (ctx->nibble == lowNbl) {
branch 0 taken 61% (fallthrough)
branch 1 taken 39%
- 17: 2478: if (ctx->boolShift == 8) {
+ 17: 2534: if (ctx->boolShift == 8) {
branch 0 taken 12% (fallthrough)
branch 1 taken 88%
- -: 2479: // previous packed bool is full
- -: 2480: // this byte is the new packed bools
- 2: 2481: storeNew4bPackedBool(e);
+ -: 2535: // previous packed bool is full
+ -: 2536: // this byte is the new packed bools
+ 2: 2537: storeNew4bPackedBool(e);
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
call 2 returned 100%
- -: 2482: }
- -: 2483: else {
- 15: 2484: storeTypeOnly(e);
+ -: 2538: }
+ -: 2539: else {
+ 15: 2540: storeTypeOnly(e);
call 0 returned 100%
- 15: 2485: storeBool(e);
+ 15: 2541: storeBool(e);
branch 0 taken 53% (fallthrough)
branch 1 taken 47%
- -: 2486: }
- -: 2487: }
- -: 2488: else {
- -: 2489: // high nibble
- 11: 2490: storeTypeInHighNbl(e);
- 11: 2491: if (ctx->boolShift == 8) {
+ -: 2542: }
+ -: 2543: }
+ -: 2544: else {
+ -: 2545: // high nibble
+ 11: 2546: storeTypeInHighNbl(e);
+ 11: 2547: if (ctx->boolShift == 8) {
branch 0 taken 18% (fallthrough)
branch 1 taken 82%
- -: 2492: // previous packed bool is full
- -: 2493: // next byte is the new packed bools
- 2: 2494: storeNew8bPackedBool(e);
+ -: 2548: // previous packed bool is full
+ -: 2549: // next byte is the new packed bools
+ 2: 2550: storeNew8bPackedBool(e);
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
call 2 returned 100%
- -: 2495: }
- -: 2496: else {
- 9: 2497: storeBool(e);
+ -: 2551: }
+ -: 2552: else {
+ 9: 2553: storeBool(e);
branch 0 taken 78% (fallthrough)
branch 1 taken 22%
- -: 2498: }
- -: 2499: }
- -: 2500: }
- 34: 2501: break;
- -: 2502: case DICT:
- 12: 2503: if (pack) {
-branch 0 taken 67% (fallthrough)
-branch 1 taken 33%
- 8: 2504: if (type) {
+ -: 2554: }
+ -: 2555: }
+ -: 2556: }
+ 34: 2557: break;
+ -: 2558: case DICT:
+ 15: 2559: if (pack) {
+branch 0 taken 53% (fallthrough)
+branch 1 taken 47%
+ 8: 2560: if (type) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2505: // this is the first packed element
- 2: 2506: if (ctx->nibble == lowNbl) {
+ -: 2561: // this is the first packed element
+ 2: 2562: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 2507: uintToNetTypeVarint(r, type, packCount);
-call 0 returned 100%
- -: 2508: }
- -: 2509: else {
- -: 2510: // high nibble
- -: 2511: // store type in high nibble
- 1: 2512: ctx->nibble = lowNbl;
- 1: 2513: data = (char *)&((*r)->data) + ctx->nblOffset;
- 1: 2514: *data |= type << 4;
- 1: 2515: uintToVarint(r, packCount);
-call 0 returned 100%
- -: 2516: }
- 2: 2517: type = 0;
- -: 2518: } // if type
- -: 2519:
- 8: 2520: dictNetSerial(r, (sDictt *)e, ctx, /*packing=*/PACKED);
-call 0 returned 100%
- -: 2521: // stop packing when packCount == 0
- 8: 2522: packCount--;
- 8: 2523: if (!packCount) pack = false;
+ 1: 2563: uintToNetTypeVarint(r, type, packCount);
+call 0 returned 100%
+ -: 2564: }
+ -: 2565: else {
+ -: 2566: // high nibble
+ -: 2567: // store type in high nibble
+ 1: 2568: ctx->nibble = lowNbl;
+ 1: 2569: data = (char *)&((*r)->data) + ctx->nblOffset;
+ 1: 2570: *data |= type << 4;
+ 1: 2571: uintToVarint(r, packCount);
+call 0 returned 100%
+ -: 2572: }
+ 2: 2573: type = 0;
+ -: 2574: } // if type
+ -: 2575:
+ 8: 2576: dictNetSerial(r, (sDictt *)e, ctx, /*packing=*/PACKED);
+call 0 returned 100%
+ -: 2577: // stop packing when packCount == 0
+ 8: 2578: packCount--;
+ 8: 2579: if (!packCount) pack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2524: } // if pack
- -: 2525: else
- 4: 2526: dictNetSerial(r, (sDictt *)e, ctx, /*packing=*/NOPACKING);
+ -: 2580: } // if pack
+ -: 2581: else
+ 7: 2582: dictNetSerial(r, (sDictt *)e, ctx, /*packing=*/NOPACKING);
call 0 returned 100%
- 12: 2527: break;
- -: 2528: case DOUBLE:
- 10: 2529: if (pack) {
+ 15: 2583: break;
+ -: 2584: case DOUBLE:
+ 10: 2585: if (pack) {
branch 0 taken 80% (fallthrough)
branch 1 taken 20%
- 8: 2530: if (type) {
+ 8: 2586: if (type) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2531: // this is the first packed element
- 2: 2532: if (ctx->nibble == lowNbl) {
+ -: 2587: // this is the first packed element
+ 2: 2588: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 2533: uintToNetTypeVarint(r, type, packCount);
-call 0 returned 100%
- -: 2534: }
- -: 2535: else {
- -: 2536: // high nibble
- -: 2537: // store type in high nibble
- 1: 2538: ctx->nibble = lowNbl;
- 1: 2539: data = (char *)&((*r)->data) + ctx->nblOffset;
- 1: 2540: *data |= type << 4;
- 1: 2541: uintToVarint(r, packCount);
-call 0 returned 100%
- -: 2542: }
- 2: 2543: type = 0;
- -: 2544: } // if type
- -: 2545:
- 8: 2546: sBytesPushBuffer(r, &((sDoublet *)e)->value, sizeof(double));
-call 0 returned 100%
- -: 2547: // stop packing when packCount == 0
- 8: 2548: packCount--;
- 8: 2549: if (!packCount) pack = false;
+ 1: 2589: uintToNetTypeVarint(r, type, packCount);
+call 0 returned 100%
+ -: 2590: }
+ -: 2591: else {
+ -: 2592: // high nibble
+ -: 2593: // store type in high nibble
+ 1: 2594: ctx->nibble = lowNbl;
+ 1: 2595: data = (char *)&((*r)->data) + ctx->nblOffset;
+ 1: 2596: *data |= type << 4;
+ 1: 2597: uintToVarint(r, packCount);
+call 0 returned 100%
+ -: 2598: }
+ 2: 2599: type = 0;
+ -: 2600: } // if type
+ -: 2601:
+ 8: 2602: sBytesPushBuffer(r, &((sDoublet *)e)->value, sizeof(double));
+call 0 returned 100%
+ -: 2603: // stop packing when packCount == 0
+ 8: 2604: packCount--;
+ 8: 2605: if (!packCount) pack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2550: } // if pack
- -: 2551: else {
- 2: 2552: if (ctx->nibble == lowNbl) {
+ -: 2606: } // if pack
+ -: 2607: else {
+ 2: 2608: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 2553: storeTypeOnly(e);
-call 0 returned 100%
- -: 2554: }
- -: 2555: else {
- -: 2556: // high nibble
- 1: 2557: storeTypeInHighNbl(e);
- -: 2558: }
- 2: 2559: sBytesPushBuffer(r, &((sDoublet *)e)->value, sizeof(double));
-call 0 returned 100%
- -: 2560: }
- 10: 2561: break;
- -: 2562: case INT:
- 30: 2563: if (pack) {
+ 1: 2609: storeTypeOnly(e);
+call 0 returned 100%
+ -: 2610: }
+ -: 2611: else {
+ -: 2612: // high nibble
+ 1: 2613: storeTypeInHighNbl(e);
+ -: 2614: }
+ 2: 2615: sBytesPushBuffer(r, &((sDoublet *)e)->value, sizeof(double));
+call 0 returned 100%
+ -: 2616: }
+ 10: 2617: break;
+ -: 2618: case INT:
+ 30: 2619: if (pack) {
branch 0 taken 27% (fallthrough)
branch 1 taken 73%
- 8: 2564: if (type) {
+ 8: 2620: if (type) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2565: // this is the first packed element
- 2: 2566: if (ctx->nibble == lowNbl) {
+ -: 2621: // this is the first packed element
+ 2: 2622: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 2567: uintToNetTypeVarint(r, type, packCount);
-call 0 returned 100%
- -: 2568: }
- -: 2569: else {
- -: 2570: // high nibble
- -: 2571: // store type in high nibble
- 1: 2572: ctx->nibble = lowNbl;
- 1: 2573: data = (char *)&((*r)->data) + ctx->nblOffset;
- 1: 2574: *data |= type << 4;
- 1: 2575: uintToVarint(r, packCount);
-call 0 returned 100%
- -: 2576: }
- 2: 2577: type = 0;
- -: 2578: } // if type
- -: 2579:
- 8: 2580: i64 v = ((sIntt *)&(e->type))->value;
- 8: 2581: uintToVarint(r, (v << 1) ^ (v >> 63));
-call 0 returned 100%
- -: 2582: // stop packing when packCount == 0
- 8: 2583: packCount--;
- 8: 2584: if (!packCount) pack = false;
+ 1: 2623: uintToNetTypeVarint(r, type, packCount);
+call 0 returned 100%
+ -: 2624: }
+ -: 2625: else {
+ -: 2626: // high nibble
+ -: 2627: // store type in high nibble
+ 1: 2628: ctx->nibble = lowNbl;
+ 1: 2629: data = (char *)&((*r)->data) + ctx->nblOffset;
+ 1: 2630: *data |= type << 4;
+ 1: 2631: uintToVarint(r, packCount);
+call 0 returned 100%
+ -: 2632: }
+ 2: 2633: type = 0;
+ -: 2634: } // if type
+ -: 2635:
+ 8: 2636: i64 v = ((sIntt *)&(e->type))->value;
+ 8: 2637: uintToVarint(r, (v << 1) ^ (v >> 63));
+call 0 returned 100%
+ -: 2638: // stop packing when packCount == 0
+ 8: 2639: packCount--;
+ 8: 2640: if (!packCount) pack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2585: } // if pack
- -: 2586: else {
- -: 2587: // encode int to varint
- -: 2588: // v is int64_t to convert to varint
- 22: 2589: i64 v = ((sIntt *)&(e->type))->value;
- 22: 2590: if (ctx->nibble == lowNbl) {
+ -: 2641: } // if pack
+ -: 2642: else {
+ -: 2643: // encode int to varint
+ -: 2644: // v is int64_t to convert to varint
+ 22: 2645: i64 v = ((sIntt *)&(e->type))->value;
+ 22: 2646: if (ctx->nibble == lowNbl) {
branch 0 taken 82% (fallthrough)
branch 1 taken 18%
- -: 2591: // encode v with arithmetic shifts
- 18: 2592: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], (v << 1) ^ (v >> 63));
-call 0 returned 100%
- -: 2593: }
- -: 2594: else {
- -: 2595: // high nibble
- 4: 2596: storeTypeInHighNbl(e);
- 4: 2597: uintToVarint(r, (v << 1) ^ (v >> 63));
-call 0 returned 100%
- -: 2598: }
- -: 2599: }
- 30: 2600: break;
- -: 2601: case STRING:
- 21: 2602: if (pack) {
+ -: 2647: // encode v with arithmetic shifts
+ 18: 2648: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], (v << 1) ^ (v >> 63));
+call 0 returned 100%
+ -: 2649: }
+ -: 2650: else {
+ -: 2651: // high nibble
+ 4: 2652: storeTypeInHighNbl(e);
+ 4: 2653: uintToVarint(r, (v << 1) ^ (v >> 63));
+call 0 returned 100%
+ -: 2654: }
+ -: 2655: }
+ 30: 2656: break;
+ -: 2657: case STRING:
+ 21: 2658: if (pack) {
branch 0 taken 38% (fallthrough)
branch 1 taken 62%
- 8: 2603: if (type) {
+ 8: 2659: if (type) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2604: // this is the first packed element
- 2: 2605: if (ctx->nibble == lowNbl) {
+ -: 2660: // this is the first packed element
+ 2: 2661: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 2606: uintToNetTypeVarint(r, type, packCount);
-call 0 returned 100%
- -: 2607: }
- -: 2608: else {
- -: 2609: // high nibble
- -: 2610: // store type in high nibble
- 1: 2611: ctx->nibble = lowNbl;
- 1: 2612: data = (char *)&((*r)->data) + ctx->nblOffset;
- 1: 2613: *data |= type << 4;
- 1: 2614: uintToVarint(r, packCount);
-call 0 returned 100%
- -: 2615: }
- 2: 2616: type = 0;
- -: 2617: } // if type
- -: 2618:
- 8: 2619: sBytesPushBuffer(r, &((sStringt *)e)->data, sizeof(sStringt) + strlen(&(((sStringt *)e)->data)) -1);
-call 0 returned 100%
- -: 2620: // stop packing when packCount == 0
- 8: 2621: packCount--;
- 8: 2622: if (!packCount) pack = false;
+ 1: 2662: uintToNetTypeVarint(r, type, packCount);
+call 0 returned 100%
+ -: 2663: }
+ -: 2664: else {
+ -: 2665: // high nibble
+ -: 2666: // store type in high nibble
+ 1: 2667: ctx->nibble = lowNbl;
+ 1: 2668: data = (char *)&((*r)->data) + ctx->nblOffset;
+ 1: 2669: *data |= type << 4;
+ 1: 2670: uintToVarint(r, packCount);
+call 0 returned 100%
+ -: 2671: }
+ 2: 2672: type = 0;
+ -: 2673: } // if type
+ -: 2674:
+ 8: 2675: sBytesPushBuffer(r, &((sStringt *)e)->data, sizeof(sStringt) + strlen(&(((sStringt *)e)->data)) -1);
+call 0 returned 100%
+ -: 2676: // stop packing when packCount == 0
+ 8: 2677: packCount--;
+ 8: 2678: if (!packCount) pack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2623: } // if pack
- -: 2624: else {
- 13: 2625: if (ctx->nibble == lowNbl) {
+ -: 2679: } // if pack
+ -: 2680: else {
+ 13: 2681: if (ctx->nibble == lowNbl) {
branch 0 taken 69% (fallthrough)
branch 1 taken 31%
- 9: 2626: storeTypeOnly(e);
-call 0 returned 100%
- -: 2627: }
- -: 2628: else {
- -: 2629: // high nibble
- 4: 2630: storeTypeInHighNbl(e);
- -: 2631: }
- 13: 2632: sBytesPushBuffer(r, &((sStringt *)e)->data, sizeof(sStringt) + strlen(&(((sStringt *)e)->data)) -1);
-call 0 returned 100%
- -: 2633: }
- 21: 2634: break;
- -: 2635: case ARRAY:
- 16: 2636: if (pack) {
+ 9: 2682: storeTypeOnly(e);
+call 0 returned 100%
+ -: 2683: }
+ -: 2684: else {
+ -: 2685: // high nibble
+ 4: 2686: storeTypeInHighNbl(e);
+ -: 2687: }
+ 13: 2688: sBytesPushBuffer(r, &((sStringt *)e)->data, sizeof(sStringt) + strlen(&(((sStringt *)e)->data)) -1);
+call 0 returned 100%
+ -: 2689: }
+ 21: 2690: break;
+ -: 2691: case ARRAY:
+ 16: 2692: if (pack) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 8: 2637: if (type) {
+ 8: 2693: if (type) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2638: // this is the first packed element
- 2: 2639: if (ctx->nibble == lowNbl) {
+ -: 2694: // this is the first packed element
+ 2: 2695: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 2640: uintToNetTypeVarint(r, type, packCount);
-call 0 returned 100%
- -: 2641: }
- -: 2642: else {
- -: 2643: // high nibble
- -: 2644: // store type in high nibble
- 1: 2645: ctx->nibble = lowNbl;
- 1: 2646: data = (char *)&((*r)->data) + ctx->nblOffset;
- 1: 2647: *data |= type << 4;
- 1: 2648: uintToVarint(r, packCount);
-call 0 returned 100%
- -: 2649: }
- 2: 2650: type = 0;
- -: 2651: } // if type
- -: 2652:
- 8: 2653: arrayNetSerial(r, (sArrayt *)e, ctx, /*packing=*/PACKED);
-call 0 returned 100%
- -: 2654: // stop packing when packCount == 0
- 8: 2655: packCount--;
- 8: 2656: if (!packCount) pack = false;
+ 1: 2696: uintToNetTypeVarint(r, type, packCount);
+call 0 returned 100%
+ -: 2697: }
+ -: 2698: else {
+ -: 2699: // high nibble
+ -: 2700: // store type in high nibble
+ 1: 2701: ctx->nibble = lowNbl;
+ 1: 2702: data = (char *)&((*r)->data) + ctx->nblOffset;
+ 1: 2703: *data |= type << 4;
+ 1: 2704: uintToVarint(r, packCount);
+call 0 returned 100%
+ -: 2705: }
+ 2: 2706: type = 0;
+ -: 2707: } // if type
+ -: 2708:
+ 8: 2709: arrayNetSerial(r, (sArrayt *)e, ctx, /*packing=*/PACKED);
+call 0 returned 100%
+ -: 2710: // stop packing when packCount == 0
+ 8: 2711: packCount--;
+ 8: 2712: if (!packCount) pack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- -: 2657: } // if pack
- -: 2658: else
- 8: 2659: arrayNetSerial(r, (sArrayt *)e, ctx, /*packing=*/NOPACKING);
+ -: 2713: } // if pack
+ -: 2714: else
+ 8: 2715: arrayNetSerial(r, (sArrayt *)e, ctx, /*packing=*/NOPACKING);
call 0 returned 100%
- 16: 2660: break;
- -: 2661: case BYTES:
- #####: 2662: if (pack) {
+ 16: 2716: break;
+ -: 2717: case BYTES:
+ #####: 2718: if (pack) {
branch 0 never executed
branch 1 never executed
- #####: 2663: if (type) {
+ #####: 2719: if (type) {
branch 0 never executed
branch 1 never executed
- -: 2664: // this is the first packed element
- #####: 2665: if (ctx->nibble == lowNbl) {
+ -: 2720: // this is the first packed element
+ #####: 2721: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 2666: uintToNetTypeVarint(r, type, packCount);
+ #####: 2722: uintToNetTypeVarint(r, type, packCount);
call 0 never executed
- -: 2667: }
- -: 2668: else {
- -: 2669: // high nibble
- -: 2670: // store type in high nibble
- #####: 2671: ctx->nibble = lowNbl;
- #####: 2672: data = (char *)&((*r)->data) + ctx->nblOffset;
- #####: 2673: *data |= type << 4;
- #####: 2674: uintToVarint(r, packCount);
+ -: 2723: }
+ -: 2724: else {
+ -: 2725: // high nibble
+ -: 2726: // store type in high nibble
+ #####: 2727: ctx->nibble = lowNbl;
+ #####: 2728: data = (char *)&((*r)->data) + ctx->nblOffset;
+ #####: 2729: *data |= type << 4;
+ #####: 2730: uintToVarint(r, packCount);
call 0 never executed
- -: 2675: }
- #####: 2676: type = 0;
- -: 2677: } // if type
- -: 2678:
- #####: 2679: B = (sBytest *)e;
- #####: 2680: uintToVarint(r, B->count);
+ -: 2731: }
+ #####: 2732: type = 0;
+ -: 2733: } // if type
+ -: 2734:
+ #####: 2735: B = (sBytest *)e;
+ #####: 2736: uintToVarint(r, B->count);
call 0 never executed
- #####: 2681: sBytesPushBuffer(r, &(B->data), B->count);
+ #####: 2737: sBytesPushBuffer(r, &(B->data), B->count);
call 0 never executed
- -: 2682: // stop packing when packCount == 0
- #####: 2683: packCount--;
- #####: 2684: if (!packCount) pack = false;
+ -: 2738: // stop packing when packCount == 0
+ #####: 2739: packCount--;
+ #####: 2740: if (!packCount) pack = false;
branch 0 never executed
branch 1 never executed
- -: 2685: } // if pack
- -: 2686: else {
- #####: 2687: B = (sBytest *)e;
- #####: 2688: if (ctx->nibble == lowNbl) {
+ -: 2741: } // if pack
+ -: 2742: else {
+ #####: 2743: B = (sBytest *)e;
+ #####: 2744: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 2689: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], B->count);
+ #####: 2745: uintToNetTypeVarint(r, NET_SERIAL_TYPES[(u8)e->type], B->count);
call 0 never executed
- -: 2690: }
- -: 2691: else {
- -: 2692: // high nibble
- #####: 2693: storeTypeInHighNbl(e);
- #####: 2694: uintToVarint(r, B->count);
+ -: 2746: }
+ -: 2747: else {
+ -: 2748: // high nibble
+ #####: 2749: storeTypeInHighNbl(e);
+ #####: 2750: uintToVarint(r, B->count);
call 0 never executed
- -: 2695: }
- #####: 2696: sBytesPushBuffer(r, &(B->data), B->count);
+ -: 2751: }
+ #####: 2752: sBytesPushBuffer(r, &(B->data), B->count);
call 0 never executed
- -: 2697: }
- #####: 2698: break;
- -: 2699: }
- -: 2700: }
- -: 2701: }
- 48: 2702: ret;
- -: 2703:}
- -: 2704:
-function serialNetSerial called 76 returned 100% blocks executed 80%
- 76: 2705:internal smallBytest* serialNetSerial(smallJsont *self) {
- -: 2706:
- 76: 2707: smallt *o = getsoG(self);
+ -: 2753: }
+ #####: 2754: break;
+ -: 2755: }
+ -: 2756: }
+ -: 2757: }
+ 49: 2758: ret;
+ -: 2759:}
+ -: 2760:
+function serialNetSerial called 77 returned 100% blocks executed 80%
+ 77: 2761:internal smallBytest* serialNetSerial(smallJsont *self) {
+ -: 2762:
+ 77: 2763: smallt *o = getsoG(self);
call 0 returned 100%
- -: 2708:
- 76: 2709: if (o == NULL)
+ -: 2764:
+ 77: 2765: if (o == NULL)
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- #####: 2710: ret NULL;
- -: 2711:
- 76: 2712: sBytest *B = netSerial(o);
+ #####: 2766: ret NULL;
+ -: 2767:
+ 77: 2768: sBytest *B = netSerial(o);
call 0 returned 100%
- -: 2713:
- 76: 2714: if (!B) {
+ -: 2769:
+ 77: 2770: if (!B) {
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- #####: 2715: ret NULL;
- -: 2716: }
- -: 2717:
- 76: 2718: createAllocateSmallBytes(r);
-call 0 returned 100%
- 76: 2719: r->B = B;
- 76: 2720: ret r;
- -: 2721:}
- -: 2722:
- -: 2723:// -------------------------------------
- -: 2724:// Deserializers
- -: 2725:
+ #####: 2771: ret NULL;
+ -: 2772: }
+ -: 2773:
+ 77: 2774: createAllocateSmallBytes(r);
+call 0 returned 100%
+ 77: 2775: r->B = B;
+ 77: 2776: ret r;
+ -: 2777:}
+ -: 2778:
+ -: 2779:// -------------------------------------
+ -: 2780:// Deserializers
+ -: 2781:
+ -: 2782:// level 0
+ -: 2783:// like smallJson with ints and length encoded as varints
+ -: 2784:
+ -: 2785:/**
+ -: 2786: * deserializer top function
+ -: 2787: */
function netDeserialLevel0 called 0 returned 0% blocks executed 0%
- #####: 2726:internal smallt* netDeserialLevel0(sBytest *obj) {
- #####: 2727: smallt *r = NULL;
- #####: 2728: double *D = NULL;
- #####: 2729: char *s = NULL;
- #####: 2730: sBytest *B = NULL;
- -: 2731: uint32_t count;
- #####: 2732: char *data = NULL;
- -: 2733:
- #####: 2734: switch(obj->data & 0xF) {
+ #####: 2788:internal smallt* netDeserialLevel0(sBytest *obj) {
+ #####: 2789: smallt *r = NULL;
+ #####: 2790: double *D = NULL;
+ #####: 2791: char *s = NULL;
+ #####: 2792: sBytest *B = NULL;
+ -: 2793: uint32_t count;
+ #####: 2794: char *data = NULL;
+ -: 2795:
+ #####: 2796: switch(obj->data & 0xF) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -4077,103 +4139,103 @@ branch 5 never executed
branch 6 never executed
branch 7 never executed
branch 8 never executed
- -: 2735: case S_UNDEFINED:
- #####: 2736: r = (smallt *) allocSUndefined();
-call 0 never executed
- #####: 2737: break;
- -: 2738: case S_BOOL:
- #####: 2739: r = (smallt *) allocSBool(obj->data & 0x10);
-call 0 never executed
- #####: 2740: break;
- -: 2741: case S_DICT:
- #####: 2742: data = (char *)&(obj->data);
- #####: 2743: dictNetDeserialLevel0((sDictt **)&r, &data);
-call 0 never executed
- #####: 2744: break;
- -: 2745: case S_DOUBLE:
- #####: 2746: data = &(obj->data)+1;
- #####: 2747: D = (double *)data;
- #####: 2748: r = (smallt *) allocSDouble(*D);
-call 0 never executed
- #####: 2749: break;
- -: 2750: case S_INT:
- #####: 2751: data = &(obj->data);
- #####: 2752: i64 v = netTypeVarintToUint((u8**)&data);
-call 0 never executed
- #####: 2753: v = (v >> 1) ^ ((v << 63) >> 63);
- #####: 2754: r = (smallt *) allocSInt(v);
-call 0 never executed
- #####: 2755: break;
- -: 2756: case S_STRING:
- #####: 2757: s = (char *)&(obj->data)+1;
- #####: 2758: r = (smallt *) allocSStringTiny(s);
-call 0 never executed
- #####: 2759: break;
- -: 2760: case S_ARRAY:
- #####: 2761: data = (char *)&(obj->data);
- #####: 2762: arrayNetDeserialLevel0((sArrayt **)&r, &data);
-call 0 never executed
- #####: 2763: break;
- -: 2764: case S_BYTES:
- #####: 2765: B = allocSBytes();
-call 0 never executed
- #####: 2766: data = &(obj->data);
- #####: 2767: count = netTypeVarintToUint((u8**)&data);
-call 0 never executed
- #####: 2768: sBytesPushBuffer(&B, data, count);
-call 0 never executed
- #####: 2769: r = (smallt *)B;
- #####: 2770: break;
- -: 2771: }
- -: 2772:
- #####: 2773: ret r;
- -: 2774:}
- -: 2775:
- -: 2776:/**
- -: 2777: * deserialize dictionary from data
- -: 2778: *
- -: 2779: * a new dictionary is allocated
- -: 2780: *
- -: 2781: * \param
- -: 2782: * dict dictionary holding the elements
- -: 2783: * data serialized dictionary
- -: 2784: */
+ -: 2797: case S_UNDEFINED:
+ #####: 2798: r = (smallt *) allocSUndefined();
+call 0 never executed
+ #####: 2799: break;
+ -: 2800: case S_BOOL:
+ #####: 2801: r = (smallt *) allocSBool(obj->data & 0x10);
+call 0 never executed
+ #####: 2802: break;
+ -: 2803: case S_DICT:
+ #####: 2804: data = (char *)&(obj->data);
+ #####: 2805: dictNetDeserialLevel0((sDictt **)&r, &data);
+call 0 never executed
+ #####: 2806: break;
+ -: 2807: case S_DOUBLE:
+ #####: 2808: data = &(obj->data)+1;
+ #####: 2809: D = (double *)data;
+ #####: 2810: r = (smallt *) allocSDouble(*D);
+call 0 never executed
+ #####: 2811: break;
+ -: 2812: case S_INT:
+ #####: 2813: data = &(obj->data);
+ #####: 2814: i64 v = netTypeVarintToUint((u8**)&data);
+call 0 never executed
+ #####: 2815: v = (v >> 1) ^ ((v << 63) >> 63);
+ #####: 2816: r = (smallt *) allocSInt(v);
+call 0 never executed
+ #####: 2817: break;
+ -: 2818: case S_STRING:
+ #####: 2819: s = (char *)&(obj->data)+1;
+ #####: 2820: r = (smallt *) allocSStringTiny(s);
+call 0 never executed
+ #####: 2821: break;
+ -: 2822: case S_ARRAY:
+ #####: 2823: data = (char *)&(obj->data);
+ #####: 2824: arrayNetDeserialLevel0((sArrayt **)&r, &data);
+call 0 never executed
+ #####: 2825: break;
+ -: 2826: case S_BYTES:
+ #####: 2827: B = allocSBytes();
+call 0 never executed
+ #####: 2828: data = &(obj->data);
+ #####: 2829: count = netTypeVarintToUint((u8**)&data);
+call 0 never executed
+ #####: 2830: sBytesPushBuffer(&B, data, count);
+call 0 never executed
+ #####: 2831: r = (smallt *)B;
+ #####: 2832: break;
+ -: 2833: }
+ -: 2834:
+ #####: 2835: ret r;
+ -: 2836:}
+ -: 2837:
+ -: 2838:/**
+ -: 2839: * deserialize dictionary from data
+ -: 2840: *
+ -: 2841: * a new dictionary is allocated
+ -: 2842: *
+ -: 2843: * \param
+ -: 2844: * dict dictionary holding the elements
+ -: 2845: * data serialized dictionary
+ -: 2846: */
function dictNetDeserialLevel0 called 0 returned 0% blocks executed 0%
- #####: 2785:internal void dictNetDeserialLevel0(sDictt **dict, char **data) {
- #####: 2786: sUndefinedt *u = NULL;
- #####: 2787: sBoolt *bo = NULL;
- #####: 2788: double *D = NULL;
- #####: 2789: sDoublet *Do = NULL;
- #####: 2790: sDictt *d = NULL;
- #####: 2791: sIntt *io = NULL;
- #####: 2792: char *s = NULL;
- #####: 2793: sStringt *so = NULL;
- #####: 2794: sArrayt *a = NULL;
- #####: 2795: sBytest *B = NULL;
- -: 2796: uint32_t count;
- -: 2797: uint32_t dictCount;
- -: 2798:
- #####: 2799: dictCount = netTypeVarintToUint((u8**)data);
-call 0 never executed
- -: 2800:
- #####: 2801: if (!dictCount) {
-branch 0 never executed
-branch 1 never executed
- #####: 2802: *dict = allocSDict();
-call 0 never executed
- #####: 2803: ret;
- -: 2804: }
- -: 2805:
- #####: 2806: loop(dictCount) {
-branch 0 never executed
-branch 1 never executed
- -: 2807: char type;
- -: 2808: char *key;
- #####: 2809: key = *data;
- #####: 2810: *data += strlen(key)+1;
- #####: 2811: type = **data;
- -: 2812:
- #####: 2813: switch(type & 0xF) {
+ #####: 2847:internal void dictNetDeserialLevel0(sDictt **dict, char **data) {
+ #####: 2848: sUndefinedt *u = NULL;
+ #####: 2849: sBoolt *bo = NULL;
+ #####: 2850: double *D = NULL;
+ #####: 2851: sDoublet *Do = NULL;
+ #####: 2852: sDictt *d = NULL;
+ #####: 2853: sIntt *io = NULL;
+ #####: 2854: char *s = NULL;
+ #####: 2855: sStringt *so = NULL;
+ #####: 2856: sArrayt *a = NULL;
+ #####: 2857: sBytest *B = NULL;
+ -: 2858: uint32_t count;
+ -: 2859: uint32_t dictCount;
+ -: 2860:
+ #####: 2861: dictCount = netTypeVarintToUint((u8**)data);
+call 0 never executed
+ -: 2862:
+ #####: 2863: if (!dictCount) {
+branch 0 never executed
+branch 1 never executed
+ #####: 2864: *dict = allocSDict();
+call 0 never executed
+ #####: 2865: ret;
+ -: 2866: }
+ -: 2867:
+ #####: 2868: loop(dictCount) {
+branch 0 never executed
+branch 1 never executed
+ -: 2869: char type;
+ -: 2870: char *key;
+ #####: 2871: key = *data;
+ #####: 2872: *data += strlen(key)+1;
+ #####: 2873: type = **data;
+ -: 2874:
+ #####: 2875: switch(type & 0xF) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -4183,119 +4245,119 @@ branch 5 never executed
branch 6 never executed
branch 7 never executed
branch 8 never executed
- -: 2814: case S_UNDEFINED:
- #####: 2815: (*data)++;
- #####: 2816: u = allocSUndefined();
-call 0 never executed
- #####: 2817: sDictPushTiny(dict, key, (smallt *) u);
-call 0 never executed
- #####: 2818: break;
- -: 2819: case S_BOOL:
- #####: 2820: (*data)++;
- #####: 2821: bo = allocSBool(type & 0x10);
-call 0 never executed
- #####: 2822: sDictPushTiny(dict, key, (smallt *) bo);
-call 0 never executed
- #####: 2823: break;
- -: 2824: case S_DICT:
- #####: 2825: d = NULL;
- #####: 2826: dictNetDeserialLevel0(&d, data);
-call 0 never executed
- #####: 2827: sDictPushTiny(dict, key, (smallt *) d);
-call 0 never executed
- #####: 2828: break;
- -: 2829: case S_DOUBLE:
- #####: 2830: (*data)++;
- #####: 2831: D = (double *)(*data);
- #####: 2832: *data += sizeof(double);
- #####: 2833: Do = allocSDouble(*D);
-call 0 never executed
- #####: 2834: sDictPushTiny(dict, key, (smallt *) Do);
-call 0 never executed
- #####: 2835: break;
- -: 2836: case S_INT: {
- #####: 2837: i64 v = netTypeVarintToUint((u8**)data);
-call 0 never executed
- #####: 2838: v = (v >> 1) ^ ((v << 63) >> 63);
- #####: 2839: io = allocSInt(v);
-call 0 never executed
- #####: 2840: sDictPushTiny(dict, key, (smallt *) io);
-call 0 never executed
- -: 2841: }
- #####: 2842: break;
- -: 2843: case S_STRING:
- #####: 2844: (*data)++;
- #####: 2845: s = (char *)(*data);
- #####: 2846: *data += strlen(s)+1;
- #####: 2847: so = allocSStringTiny(s);
-call 0 never executed
- #####: 2848: sDictPushTiny(dict, key, (smallt *) so);
-call 0 never executed
- #####: 2849: break;
- -: 2850: case S_ARRAY:
- #####: 2851: a = NULL;
- #####: 2852: arrayNetDeserialLevel0(&a, data);
-call 0 never executed
- #####: 2853: sDictPushTiny(dict, key, (smallt *) a);
-call 0 never executed
- #####: 2854: break;
- -: 2855: case S_BYTES:
- #####: 2856: B = allocSBytes();
-call 0 never executed
- #####: 2857: count = netTypeVarintToUint((u8**)data);
-call 0 never executed
- #####: 2858: sBytesPushBuffer(&B, data, count);
-call 0 never executed
- #####: 2859: *data += count;
- #####: 2860: sDictPushTiny(dict, key, (smallt *) B);
-call 0 never executed
- #####: 2861: break;
- -: 2862: }
- -: 2863: }
- -: 2864:}
- -: 2865:
- -: 2866:/**
- -: 2867: * deserialize array from data
- -: 2868: *
- -: 2869: * a new array is allocated
- -: 2870: *
- -: 2871: * \param
- -: 2872: * array holding the elements
- -: 2873: * data serialized dictionary
- -: 2874: */
+ -: 2876: case S_UNDEFINED:
+ #####: 2877: (*data)++;
+ #####: 2878: u = allocSUndefined();
+call 0 never executed
+ #####: 2879: sDictPushTiny(dict, key, (smallt *) u);
+call 0 never executed
+ #####: 2880: break;
+ -: 2881: case S_BOOL:
+ #####: 2882: (*data)++;
+ #####: 2883: bo = allocSBool(type & 0x10);
+call 0 never executed
+ #####: 2884: sDictPushTiny(dict, key, (smallt *) bo);
+call 0 never executed
+ #####: 2885: break;
+ -: 2886: case S_DICT:
+ #####: 2887: d = NULL;
+ #####: 2888: dictNetDeserialLevel0(&d, data);
+call 0 never executed
+ #####: 2889: sDictPushTiny(dict, key, (smallt *) d);
+call 0 never executed
+ #####: 2890: break;
+ -: 2891: case S_DOUBLE:
+ #####: 2892: (*data)++;
+ #####: 2893: D = (double *)(*data);
+ #####: 2894: *data += sizeof(double);
+ #####: 2895: Do = allocSDouble(*D);
+call 0 never executed
+ #####: 2896: sDictPushTiny(dict, key, (smallt *) Do);
+call 0 never executed
+ #####: 2897: break;
+ -: 2898: case S_INT: {
+ #####: 2899: i64 v = netTypeVarintToUint((u8**)data);
+call 0 never executed
+ #####: 2900: v = (v >> 1) ^ ((v << 63) >> 63);
+ #####: 2901: io = allocSInt(v);
+call 0 never executed
+ #####: 2902: sDictPushTiny(dict, key, (smallt *) io);
+call 0 never executed
+ -: 2903: }
+ #####: 2904: break;
+ -: 2905: case S_STRING:
+ #####: 2906: (*data)++;
+ #####: 2907: s = (char *)(*data);
+ #####: 2908: *data += strlen(s)+1;
+ #####: 2909: so = allocSStringTiny(s);
+call 0 never executed
+ #####: 2910: sDictPushTiny(dict, key, (smallt *) so);
+call 0 never executed
+ #####: 2911: break;
+ -: 2912: case S_ARRAY:
+ #####: 2913: a = NULL;
+ #####: 2914: arrayNetDeserialLevel0(&a, data);
+call 0 never executed
+ #####: 2915: sDictPushTiny(dict, key, (smallt *) a);
+call 0 never executed
+ #####: 2916: break;
+ -: 2917: case S_BYTES:
+ #####: 2918: B = allocSBytes();
+call 0 never executed
+ #####: 2919: count = netTypeVarintToUint((u8**)data);
+call 0 never executed
+ #####: 2920: sBytesPushBuffer(&B, data, count);
+call 0 never executed
+ #####: 2921: *data += count;
+ #####: 2922: sDictPushTiny(dict, key, (smallt *) B);
+call 0 never executed
+ #####: 2923: break;
+ -: 2924: }
+ -: 2925: }
+ -: 2926:}
+ -: 2927:
+ -: 2928:/**
+ -: 2929: * deserialize array from data
+ -: 2930: *
+ -: 2931: * a new array is allocated
+ -: 2932: *
+ -: 2933: * \param
+ -: 2934: * array holding the elements
+ -: 2935: * data serialized dictionary
+ -: 2936: */
function arrayNetDeserialLevel0 called 0 returned 0% blocks executed 0%
- #####: 2875:internal void arrayNetDeserialLevel0(sArrayt **array, char **data) {
- #####: 2876: sUndefinedt *u = NULL;
- #####: 2877: sBoolt *bo = NULL;
- #####: 2878: double *D = NULL;
- #####: 2879: sDoublet *Do = NULL;
- #####: 2880: sDictt *d = NULL;
- #####: 2881: sIntt *io = NULL;
- #####: 2882: char *s = NULL;
- #####: 2883: sStringt *so = NULL;
- #####: 2884: sArrayt *a = NULL;
- #####: 2885: sBytest *B = NULL;
- -: 2886: uint32_t count;
- -: 2887: uint32_t arrayCount;
- -: 2888:
- #####: 2889: arrayCount = netTypeVarintToUint((u8**)data);
+ #####: 2937:internal void arrayNetDeserialLevel0(sArrayt **array, char **data) {
+ #####: 2938: sUndefinedt *u = NULL;
+ #####: 2939: sBoolt *bo = NULL;
+ #####: 2940: double *D = NULL;
+ #####: 2941: sDoublet *Do = NULL;
+ #####: 2942: sDictt *d = NULL;
+ #####: 2943: sIntt *io = NULL;
+ #####: 2944: char *s = NULL;
+ #####: 2945: sStringt *so = NULL;
+ #####: 2946: sArrayt *a = NULL;
+ #####: 2947: sBytest *B = NULL;
+ -: 2948: uint32_t count;
+ -: 2949: uint32_t arrayCount;
+ -: 2950:
+ #####: 2951: arrayCount = netTypeVarintToUint((u8**)data);
call 0 never executed
- -: 2890:
- #####: 2891: if (!arrayCount) {
+ -: 2952:
+ #####: 2953: if (!arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 2892: *array = allocSArray();;
+ #####: 2954: *array = allocSArray();;
call 0 never executed
- #####: 2893: ret;
- -: 2894: }
- -: 2895:
- #####: 2896: loop(arrayCount) {
+ #####: 2955: ret;
+ -: 2956: }
+ -: 2957:
+ #####: 2958: loop(arrayCount) {
branch 0 never executed
branch 1 never executed
- -: 2897: char type;
- #####: 2898: type = **data;
- -: 2899:
- #####: 2900: switch(type & 0xF) {
+ -: 2959: char type;
+ #####: 2960: type = **data;
+ -: 2961:
+ #####: 2962: switch(type & 0xF) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -4305,117 +4367,121 @@ branch 5 never executed
branch 6 never executed
branch 7 never executed
branch 8 never executed
- -: 2901: case S_UNDEFINED:
- #####: 2902: (*data)++;
- #####: 2903: u = allocSUndefined();
+ -: 2963: case S_UNDEFINED:
+ #####: 2964: (*data)++;
+ #####: 2965: u = allocSUndefined();
call 0 never executed
- #####: 2904: sArrayPushTiny(array, (smallt *) u);
+ #####: 2966: sArrayPushTiny(array, (smallt *) u);
call 0 never executed
- #####: 2905: break;
- -: 2906: case S_BOOL:
- #####: 2907: (*data)++;
- #####: 2908: bo = allocSBool(type & 0x10);
+ #####: 2967: break;
+ -: 2968: case S_BOOL:
+ #####: 2969: (*data)++;
+ #####: 2970: bo = allocSBool(type & 0x10);
call 0 never executed
- #####: 2909: sArrayPushTiny(array, (smallt *) bo);
+ #####: 2971: sArrayPushTiny(array, (smallt *) bo);
call 0 never executed
- #####: 2910: break;
- -: 2911: case S_DICT:
- #####: 2912: d = NULL;
- #####: 2913: dictNetDeserialLevel0(&d, data);
+ #####: 2972: break;
+ -: 2973: case S_DICT:
+ #####: 2974: d = NULL;
+ #####: 2975: dictNetDeserialLevel0(&d, data);
call 0 never executed
- #####: 2914: sArrayPushTiny(array, (smallt *) d);
+ #####: 2976: sArrayPushTiny(array, (smallt *) d);
call 0 never executed
- #####: 2915: break;
- -: 2916: case S_DOUBLE:
- #####: 2917: (*data)++;
- #####: 2918: D = (double *)(*data);
- #####: 2919: *data += sizeof(double);
- #####: 2920: Do = allocSDouble(*D);
+ #####: 2977: break;
+ -: 2978: case S_DOUBLE:
+ #####: 2979: (*data)++;
+ #####: 2980: D = (double *)(*data);
+ #####: 2981: *data += sizeof(double);
+ #####: 2982: Do = allocSDouble(*D);
call 0 never executed
- #####: 2921: sArrayPushTiny(array, (smallt *) Do);
+ #####: 2983: sArrayPushTiny(array, (smallt *) Do);
call 0 never executed
- #####: 2922: break;
- -: 2923: case S_INT: {
- #####: 2924: i64 v = netTypeVarintToUint((u8**)data);
+ #####: 2984: break;
+ -: 2985: case S_INT: {
+ #####: 2986: i64 v = netTypeVarintToUint((u8**)data);
call 0 never executed
- #####: 2925: v = (v >> 1) ^ ((v << 63) >> 63);
- #####: 2926: io = allocSInt(v);
+ #####: 2987: v = (v >> 1) ^ ((v << 63) >> 63);
+ #####: 2988: io = allocSInt(v);
call 0 never executed
- #####: 2927: sArrayPushTiny(array, (smallt *) io);
+ #####: 2989: sArrayPushTiny(array, (smallt *) io);
call 0 never executed
- -: 2928: }
- #####: 2929: break;
- -: 2930: case S_STRING:
- #####: 2931: (*data)++;
- #####: 2932: s = (char *)(*data);
- #####: 2933: *data += strlen(s)+1;
- #####: 2934: so = allocSStringTiny(s);
+ -: 2990: }
+ #####: 2991: break;
+ -: 2992: case S_STRING:
+ #####: 2993: (*data)++;
+ #####: 2994: s = (char *)(*data);
+ #####: 2995: *data += strlen(s)+1;
+ #####: 2996: so = allocSStringTiny(s);
call 0 never executed
- #####: 2935: sArrayPushTiny(array, (smallt *) so);
+ #####: 2997: sArrayPushTiny(array, (smallt *) so);
call 0 never executed
- #####: 2936: break;
- -: 2937: case S_ARRAY:
- #####: 2938: a = NULL;
- #####: 2939: arrayNetDeserialLevel0(&a, data);
+ #####: 2998: break;
+ -: 2999: case S_ARRAY:
+ #####: 3000: a = NULL;
+ #####: 3001: arrayNetDeserialLevel0(&a, data);
call 0 never executed
- #####: 2940: sArrayPushTiny(array, (smallt *) a);
+ #####: 3002: sArrayPushTiny(array, (smallt *) a);
call 0 never executed
- #####: 2941: break;
- -: 2942: case S_BYTES:
- #####: 2943: B = allocSBytes();
+ #####: 3003: break;
+ -: 3004: case S_BYTES:
+ #####: 3005: B = allocSBytes();
call 0 never executed
- #####: 2944: count = netTypeVarintToUint((u8**)data);
+ #####: 3006: count = netTypeVarintToUint((u8**)data);
call 0 never executed
- #####: 2945: sBytesPushBuffer(&B, data, count);
+ #####: 3007: sBytesPushBuffer(&B, data, count);
call 0 never executed
- #####: 2946: *data += count;
- #####: 2947: sArrayPushTiny(array, (smallt *) B);
+ #####: 3008: *data += count;
+ #####: 3009: sArrayPushTiny(array, (smallt *) B);
call 0 never executed
- #####: 2948: break;
- -: 2949: }
- -: 2950: }
- -: 2951:}
- -: 2952:
+ #####: 3010: break;
+ -: 3011: }
+ -: 3012: }
+ -: 3013:}
+ -: 3014:
function deserialNetSerialLevel0 called 0 returned 0% blocks executed 0%
- #####: 2953:internal smallJsont* deserialNetSerialLevel0(smallJsont *self, smallBytest *data) {
- -: 2954:
- #####: 2955: if (!data) {
+ #####: 3015:internal smallJsont* deserialNetSerialLevel0(smallJsont *self, smallBytest *data) {
+ -: 3016:
+ #####: 3017: if (!data) {
branch 0 never executed
branch 1 never executed
- #####: 2956: ret self;
- -: 2957: }
- -: 2958:
- #####: 2959: smallt *o = netDeserialLevel0(data->B);
+ #####: 3018: ret self;
+ -: 3019: }
+ -: 3020:
+ #####: 3021: smallt *o = netDeserialLevel0(data->B);
call 0 never executed
- -: 2960:
- #####: 2961: if (!o) {
+ -: 3022:
+ #####: 3023: if (!o) {
branch 0 never executed
branch 1 never executed
- #####: 2962: ret self;
- -: 2963: }
- -: 2964:
- #####: 2965: freeG(self);
-call 0 never executed
- -: 2966:
- #####: 2967: setsoG(self, o);
-call 0 never executed
- -: 2968:
- #####: 2969: ret self;
- -: 2970:}
- -: 2971:
- -: 2972:// level 1
- -: 2973:
+ #####: 3024: ret self;
+ -: 3025: }
+ -: 3026:
+ #####: 3027: freeG(self);
+call 0 never executed
+ -: 3028:
+ #####: 3029: setsoG(self, o);
+call 0 never executed
+ -: 3030:
+ #####: 3031: ret self;
+ -: 3032:}
+ -: 3033:
+ -: 3034:// level 1
+ -: 3035:// like level 0 with type encoded in nibbles and bools are packed
+ -: 3036:
+ -: 3037:/**
+ -: 3038: * deserializer top function
+ -: 3039: */
function netDeserialLevel1 called 0 returned 0% blocks executed 0%
- #####: 2974:internal smallt* netDeserialLevel1(sBytest *obj) {
- #####: 2975: smallt *r = NULL;
- #####: 2976: double *D = NULL;
- #####: 2977: char *s = NULL;
- #####: 2978: sBytest *B = NULL;
- -: 2979: uint32_t count;
- #####: 2980: char *data = NULL;
- #####: 2981: contextt ctx = {.nibble=lowNbl, .nblAddr=NULL, .boolShift = 0, .boolAddr=NULL};
- -: 2982:
- #####: 2983: switch(obj->data & 0xF) {
+ #####: 3040:internal smallt* netDeserialLevel1(sBytest *obj) {
+ #####: 3041: smallt *r = NULL;
+ #####: 3042: double *D = NULL;
+ #####: 3043: char *s = NULL;
+ #####: 3044: sBytest *B = NULL;
+ -: 3045: uint32_t count;
+ #####: 3046: char *data = NULL;
+ #####: 3047: contextt ctx = {.nibble=lowNbl, .nblAddr=NULL, .boolShift = 0, .boolAddr=NULL};
+ -: 3048:
+ #####: 3049: switch(obj->data & 0xF) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -4425,130 +4491,130 @@ branch 5 never executed
branch 6 never executed
branch 7 never executed
branch 8 never executed
- -: 2984: case S_UNDEFINED:
- #####: 2985: r = (smallt *) allocSUndefined();
-call 0 never executed
- #####: 2986: break;
- -: 2987: case S_BOOL:
- #####: 2988: r = (smallt *) allocSBool(obj->data & 0x10);
-call 0 never executed
- #####: 2989: break;
- -: 2990: case S_DICT:
- #####: 2991: data = (char *)&(obj->data);
- -: 2992: //debug - ctx.dbuf = (u8*) data;
- #####: 2993: dictNetDeserialLevel1((sDictt **)&r, (u8**)&data, &ctx);
-call 0 never executed
- #####: 2994: break;
- -: 2995: case S_DOUBLE:
- #####: 2996: data = &(obj->data)+1;
- #####: 2997: D = (double *)data;
- #####: 2998: r = (smallt *) allocSDouble(*D);
-call 0 never executed
- #####: 2999: break;
- -: 3000: case S_INT:
- #####: 3001: data = &(obj->data);
- #####: 3002: i64 v = netTypeVarintToUint((u8**)&data);
-call 0 never executed
- #####: 3003: v = (v >> 1) ^ ((v << 63) >> 63);
- #####: 3004: r = (smallt *) allocSInt(v);
-call 0 never executed
- #####: 3005: break;
- -: 3006: case S_STRING:
- #####: 3007: s = (char *)&(obj->data)+1;
- #####: 3008: r = (smallt *) allocSStringTiny(s);
-call 0 never executed
- #####: 3009: break;
- -: 3010: case S_ARRAY:
- #####: 3011: data = (char *)&(obj->data);
- -: 3012: //debug - ctx.dbuf = (u8*) data;
- #####: 3013: arrayNetDeserialLevel1((sArrayt **)&r, (u8**)&data, &ctx);
-call 0 never executed
- #####: 3014: break;
- -: 3015: case S_BYTES:
- #####: 3016: B = allocSBytes();
-call 0 never executed
- #####: 3017: data = &(obj->data);
- #####: 3018: count = netTypeVarintToUint((u8**)&data);
-call 0 never executed
- #####: 3019: sBytesPushBuffer(&B, data, count);
-call 0 never executed
- #####: 3020: r = (smallt *)B;
- #####: 3021: break;
- -: 3022: }
- -: 3023:
- #####: 3024: ret r;
- -: 3025:}
- -: 3026:
- -: 3027:/**
- -: 3028: * deserialize dictionary from data
- -: 3029: *
- -: 3030: * a new dictionary is allocated
- -: 3031: *
- -: 3032: * \param
- -: 3033: * dict dictionary holding the elements
- -: 3034: * data serialized dictionary
- -: 3035: */
+ -: 3050: case S_UNDEFINED:
+ #####: 3051: r = (smallt *) allocSUndefined();
+call 0 never executed
+ #####: 3052: break;
+ -: 3053: case S_BOOL:
+ #####: 3054: r = (smallt *) allocSBool(obj->data & 0x10);
+call 0 never executed
+ #####: 3055: break;
+ -: 3056: case S_DICT:
+ #####: 3057: data = (char *)&(obj->data);
+ -: 3058: //debug - ctx.dbuf = (u8*) data;
+ #####: 3059: dictNetDeserialLevel1((sDictt **)&r, (u8**)&data, &ctx);
+call 0 never executed
+ #####: 3060: break;
+ -: 3061: case S_DOUBLE:
+ #####: 3062: data = &(obj->data)+1;
+ #####: 3063: D = (double *)data;
+ #####: 3064: r = (smallt *) allocSDouble(*D);
+call 0 never executed
+ #####: 3065: break;
+ -: 3066: case S_INT:
+ #####: 3067: data = &(obj->data);
+ #####: 3068: i64 v = netTypeVarintToUint((u8**)&data);
+call 0 never executed
+ #####: 3069: v = (v >> 1) ^ ((v << 63) >> 63);
+ #####: 3070: r = (smallt *) allocSInt(v);
+call 0 never executed
+ #####: 3071: break;
+ -: 3072: case S_STRING:
+ #####: 3073: s = (char *)&(obj->data)+1;
+ #####: 3074: r = (smallt *) allocSStringTiny(s);
+call 0 never executed
+ #####: 3075: break;
+ -: 3076: case S_ARRAY:
+ #####: 3077: data = (char *)&(obj->data);
+ -: 3078: //debug - ctx.dbuf = (u8*) data;
+ #####: 3079: arrayNetDeserialLevel1((sArrayt **)&r, (u8**)&data, &ctx);
+call 0 never executed
+ #####: 3080: break;
+ -: 3081: case S_BYTES:
+ #####: 3082: B = allocSBytes();
+call 0 never executed
+ #####: 3083: data = &(obj->data);
+ #####: 3084: count = netTypeVarintToUint((u8**)&data);
+call 0 never executed
+ #####: 3085: sBytesPushBuffer(&B, data, count);
+call 0 never executed
+ #####: 3086: r = (smallt *)B;
+ #####: 3087: break;
+ -: 3088: }
+ -: 3089:
+ #####: 3090: ret r;
+ -: 3091:}
+ -: 3092:
+ -: 3093:/**
+ -: 3094: * deserialize dictionary from data
+ -: 3095: *
+ -: 3096: * a new dictionary is allocated
+ -: 3097: *
+ -: 3098: * \param
+ -: 3099: * dict dictionary holding the elements
+ -: 3100: * data serialized dictionary
+ -: 3101: */
function dictNetDeserialLevel1 called 0 returned 0% blocks executed 0%
- #####: 3036:internal void dictNetDeserialLevel1(sDictt **dict, u8 **data, contextt *ctx) {
- #####: 3037: sUndefinedt *u = NULL;
- #####: 3038: sBoolt *bo = NULL;
- #####: 3039: double *D = NULL;
- #####: 3040: sDoublet *Do = NULL;
- #####: 3041: sDictt *d = NULL;
- #####: 3042: sIntt *io = NULL;
- #####: 3043: char *s = NULL;
- #####: 3044: sStringt *so = NULL;
- #####: 3045: sArrayt *a = NULL;
- #####: 3046: sBytest *B = NULL;
- -: 3047: uint32_t count;
- -: 3048: uint32_t dictCount;
- -: 3049:
- #####: 3050: if (ctx->nibble == lowNbl) {
+ #####: 3102:internal void dictNetDeserialLevel1(sDictt **dict, u8 **data, contextt *ctx) {
+ #####: 3103: sUndefinedt *u = NULL;
+ #####: 3104: sBoolt *bo = NULL;
+ #####: 3105: double *D = NULL;
+ #####: 3106: sDoublet *Do = NULL;
+ #####: 3107: sDictt *d = NULL;
+ #####: 3108: sIntt *io = NULL;
+ #####: 3109: char *s = NULL;
+ #####: 3110: sStringt *so = NULL;
+ #####: 3111: sArrayt *a = NULL;
+ #####: 3112: sBytest *B = NULL;
+ -: 3113: uint32_t count;
+ -: 3114: uint32_t dictCount;
+ -: 3115:
+ #####: 3116: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3051: dictCount = netTypeVarintToUint(data);
+ #####: 3117: dictCount = netTypeVarintToUint(data);
call 0 never executed
- -: 3052: }
- -: 3053: else {
- -: 3054: // high nibble
- -: 3055: // type = *(ctx->dbuf + ctx->nblOffset) >> 4;
- -: 3056: #define readTypeInHighNbl\
- -: 3057: ctx->nibble = lowNbl;\
- -: 3058: if (ctx->nblAddr == *data)\
- -: 3059: /* data points to the type, next byte is count */\
- -: 3060: (*data)++
- #####: 3061: readTypeInHighNbl;
+ -: 3118: }
+ -: 3119: else {
+ -: 3120: // high nibble
+ -: 3121: // type = *(ctx->dbuf + ctx->nblOffset) >> 4;
+ -: 3122: #define readTypeInHighNbl\
+ -: 3123: ctx->nibble = lowNbl;\
+ -: 3124: if (ctx->nblAddr == *data)\
+ -: 3125: /* data points to the type, next byte is count */\
+ -: 3126: (*data)++
+ #####: 3127: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3062: dictCount = varintToUint(data);
+ #####: 3128: dictCount = varintToUint(data);
call 0 never executed
- -: 3063: }
- -: 3064:
- #####: 3065: if (!dictCount) {
+ -: 3129: }
+ -: 3130:
+ #####: 3131: if (!dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3066: *dict = allocSDict();
+ #####: 3132: *dict = allocSDict();
call 0 never executed
- #####: 3067: ret;
- -: 3068: }
- -: 3069:
- #####: 3070: loop(dictCount) {
+ #####: 3133: ret;
+ -: 3134: }
+ -: 3135:
+ #####: 3136: loop(dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3071: char *key = (char*)*data;
- #####: 3072: *data += strlen(key)+1;
- -: 3073: char type;
- #####: 3074: if (ctx->nibble == lowNbl) {
+ #####: 3137: char *key = (char*)*data;
+ #####: 3138: *data += strlen(key)+1;
+ -: 3139: char type;
+ #####: 3140: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3075: type = (**data) & 0xF;
- -: 3076: }
- -: 3077: else {
- -: 3078: // high nibble
- #####: 3079: type = (*ctx->nblAddr) >> 4;
- -: 3080: }
- -: 3081:
- #####: 3082: switch(type) {
+ #####: 3141: type = (**data) & 0xF;
+ -: 3142: }
+ -: 3143: else {
+ -: 3144: // high nibble
+ #####: 3145: type = (*ctx->nblAddr) >> 4;
+ -: 3146: }
+ -: 3147:
+ #####: 3148: switch(type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -4558,261 +4624,261 @@ branch 5 never executed
branch 6 never executed
branch 7 never executed
branch 8 never executed
- -: 3083: case S_UNDEFINED:
- #####: 3084: if (ctx->nibble == lowNbl) {
+ -: 3149: case S_UNDEFINED:
+ #####: 3150: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- -: 3085: #define readTypeOnly\
- -: 3086: ctx->nibble = highNbl;\
- -: 3087: ctx->nblAddr = *data;\
- -: 3088: (*data)++
- #####: 3089: readTypeOnly;
- -: 3090: }
- -: 3091: else {
- -: 3092: // high nibble
- #####: 3093: readTypeInHighNbl;
+ -: 3151: #define readTypeOnly\
+ -: 3152: ctx->nibble = highNbl;\
+ -: 3153: ctx->nblAddr = *data;\
+ -: 3154: (*data)++
+ #####: 3155: readTypeOnly;
+ -: 3156: }
+ -: 3157: else {
+ -: 3158: // high nibble
+ #####: 3159: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- -: 3094: }
- #####: 3095: u = allocSUndefined();
+ -: 3160: }
+ #####: 3161: u = allocSUndefined();
call 0 never executed
- #####: 3096: sDictPushTiny(dict, key, (smallt *) u);
+ #####: 3162: sDictPushTiny(dict, key, (smallt *) u);
call 0 never executed
- #####: 3097: break;
- -: 3098: case S_BOOL:
- #####: 3099: if (!ctx->boolAddr) {
+ #####: 3163: break;
+ -: 3164: case S_BOOL:
+ #####: 3165: if (!ctx->boolAddr) {
branch 0 never executed
branch 1 never executed
- -: 3100: // new packed bools
- #####: 3101: if (ctx->nibble == lowNbl) {
+ -: 3166: // new packed bools
+ #####: 3167: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- -: 3102: #define read4bPackedBool\
- -: 3103: ctx->boolShift = 5;\
- -: 3104: ctx->boolAddr = *data;\
- -: 3105: (*data)++
- #####: 3106: read4bPackedBool;
- #####: 3107: bo = allocSBool((*ctx->boolAddr) & 0x10);
+ -: 3168: #define read4bPackedBool\
+ -: 3169: ctx->boolShift = 5;\
+ -: 3170: ctx->boolAddr = *data;\
+ -: 3171: (*data)++
+ #####: 3172: read4bPackedBool;
+ #####: 3173: bo = allocSBool((*ctx->boolAddr) & 0x10);
call 0 never executed
- -: 3108: }
- -: 3109: else {
- -: 3110: // high nibble
- #####: 3111: readTypeInHighNbl;
+ -: 3174: }
+ -: 3175: else {
+ -: 3176: // high nibble
+ #####: 3177: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- -: 3112: #define read8bPackedBool\
- -: 3113: ctx->boolShift = 1;\
- -: 3114: ctx->boolAddr = *data;\
- -: 3115: (*data)++
- #####: 3116: read8bPackedBool;
- #####: 3117: bo = allocSBool((*ctx->boolAddr) & 0x1);
+ -: 3178: #define read8bPackedBool\
+ -: 3179: ctx->boolShift = 1;\
+ -: 3180: ctx->boolAddr = *data;\
+ -: 3181: (*data)++
+ #####: 3182: read8bPackedBool;
+ #####: 3183: bo = allocSBool((*ctx->boolAddr) & 0x1);
call 0 never executed
- -: 3118: }
- -: 3119: }
- -: 3120: else {
- -: 3121: // there was a bool before this one, read bits in nibbles
- #####: 3122: if (ctx->nibble == lowNbl) {
+ -: 3184: }
+ -: 3185: }
+ -: 3186: else {
+ -: 3187: // there was a bool before this one, read bits in nibbles
+ #####: 3188: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3123: if (ctx->boolShift == 8) {
+ #####: 3189: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- #####: 3124: read4bPackedBool;
- #####: 3125: bo = allocSBool((*ctx->boolAddr) & 0x10);
+ #####: 3190: read4bPackedBool;
+ #####: 3191: bo = allocSBool((*ctx->boolAddr) & 0x10);
call 0 never executed
- -: 3126: }
- -: 3127: else {
- #####: 3128: readTypeOnly;
- #####: 3129: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+ -: 3192: }
+ -: 3193: else {
+ #####: 3194: readTypeOnly;
+ #####: 3195: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
call 0 never executed
- -: 3130: }
- -: 3131: }
- -: 3132: else {
- -: 3133: // high nibble
- #####: 3134: readTypeInHighNbl;
+ -: 3196: }
+ -: 3197: }
+ -: 3198: else {
+ -: 3199: // high nibble
+ #####: 3200: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3135: if (ctx->boolShift == 8) {
+ #####: 3201: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- #####: 3136: read8bPackedBool;
- #####: 3137: bo = allocSBool((*ctx->boolAddr) & 0x1);
+ #####: 3202: read8bPackedBool;
+ #####: 3203: bo = allocSBool((*ctx->boolAddr) & 0x1);
call 0 never executed
- -: 3138: }
- -: 3139: else {
- -: 3140: // high nibble
- #####: 3141: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+ -: 3204: }
+ -: 3205: else {
+ -: 3206: // high nibble
+ #####: 3207: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
call 0 never executed
- -: 3142: }
- -: 3143: }
- -: 3144: }
- #####: 3145: sDictPushTiny(dict, key, (smallt *) bo);
+ -: 3208: }
+ -: 3209: }
+ -: 3210: }
+ #####: 3211: sDictPushTiny(dict, key, (smallt *) bo);
call 0 never executed
- #####: 3146: break;
- -: 3147: case S_DICT:
- #####: 3148: d = NULL;
- #####: 3149: dictNetDeserialLevel1(&d, data, ctx);
+ #####: 3212: break;
+ -: 3213: case S_DICT:
+ #####: 3214: d = NULL;
+ #####: 3215: dictNetDeserialLevel1(&d, data, ctx);
call 0 never executed
- #####: 3150: sDictPushTiny(dict, key, (smallt *) d);
+ #####: 3216: sDictPushTiny(dict, key, (smallt *) d);
call 0 never executed
- #####: 3151: break;
- -: 3152: case S_DOUBLE:
- #####: 3153: if (ctx->nibble == lowNbl) {
+ #####: 3217: break;
+ -: 3218: case S_DOUBLE:
+ #####: 3219: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3154: readTypeOnly;
- -: 3155: }
- -: 3156: else {
- -: 3157: // high nibble
- #####: 3158: readTypeInHighNbl;
+ #####: 3220: readTypeOnly;
+ -: 3221: }
+ -: 3222: else {
+ -: 3223: // high nibble
+ #####: 3224: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- -: 3159: }
- #####: 3160: D = (double *)(*data);
- #####: 3161: *data += sizeof(double);
- #####: 3162: Do = allocSDouble(*D);
+ -: 3225: }
+ #####: 3226: D = (double *)(*data);
+ #####: 3227: *data += sizeof(double);
+ #####: 3228: Do = allocSDouble(*D);
call 0 never executed
- #####: 3163: sDictPushTiny(dict, key, (smallt *) Do);
+ #####: 3229: sDictPushTiny(dict, key, (smallt *) Do);
call 0 never executed
- #####: 3164: break;
- -: 3165: case S_INT: {
- -: 3166: i64 v;
- #####: 3167: if (ctx->nibble == lowNbl) {
+ #####: 3230: break;
+ -: 3231: case S_INT: {
+ -: 3232: i64 v;
+ #####: 3233: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3168: v = netTypeVarintToUint((u8**)data);
+ #####: 3234: v = netTypeVarintToUint((u8**)data);
call 0 never executed
- -: 3169: }
- -: 3170: else {
- -: 3171: // high nibble
- #####: 3172: readTypeInHighNbl;
+ -: 3235: }
+ -: 3236: else {
+ -: 3237: // high nibble
+ #####: 3238: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3173: v = varintToUint(data);
+ #####: 3239: v = varintToUint(data);
call 0 never executed
- -: 3174: }
- #####: 3175: v = (v >> 1) ^ ((v << 63) >> 63);
- #####: 3176: io = allocSInt(v);
+ -: 3240: }
+ #####: 3241: v = (v >> 1) ^ ((v << 63) >> 63);
+ #####: 3242: io = allocSInt(v);
call 0 never executed
- #####: 3177: sDictPushTiny(dict, key, (smallt *) io);
+ #####: 3243: sDictPushTiny(dict, key, (smallt *) io);
call 0 never executed
- -: 3178: }
- #####: 3179: break;
- -: 3180: case S_STRING:
- #####: 3181: if (ctx->nibble == lowNbl) {
+ -: 3244: }
+ #####: 3245: break;
+ -: 3246: case S_STRING:
+ #####: 3247: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3182: readTypeOnly;
- -: 3183: }
- -: 3184: else {
- -: 3185: // high nibble
- #####: 3186: readTypeInHighNbl;
+ #####: 3248: readTypeOnly;
+ -: 3249: }
+ -: 3250: else {
+ -: 3251: // high nibble
+ #####: 3252: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- -: 3187: }
- #####: 3188: s = (char *)(*data);
- #####: 3189: *data += strlen(s)+1;
- #####: 3190: so = allocSStringTiny(s);
+ -: 3253: }
+ #####: 3254: s = (char *)(*data);
+ #####: 3255: *data += strlen(s)+1;
+ #####: 3256: so = allocSStringTiny(s);
call 0 never executed
- #####: 3191: sDictPushTiny(dict, key, (smallt *) so);
+ #####: 3257: sDictPushTiny(dict, key, (smallt *) so);
call 0 never executed
- #####: 3192: break;
- -: 3193: case S_ARRAY:
- #####: 3194: a = NULL;
- #####: 3195: arrayNetDeserialLevel1(&a, data, ctx);
+ #####: 3258: break;
+ -: 3259: case S_ARRAY:
+ #####: 3260: a = NULL;
+ #####: 3261: arrayNetDeserialLevel1(&a, data, ctx);
call 0 never executed
- #####: 3196: sDictPushTiny(dict, key, (smallt *) a);
+ #####: 3262: sDictPushTiny(dict, key, (smallt *) a);
call 0 never executed
- #####: 3197: break;
- -: 3198: case S_BYTES:
- #####: 3199: B = allocSBytes();
+ #####: 3263: break;
+ -: 3264: case S_BYTES:
+ #####: 3265: B = allocSBytes();
call 0 never executed
- #####: 3200: if (ctx->nibble == lowNbl) {
+ #####: 3266: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3201: count = netTypeVarintToUint((u8**)data);
+ #####: 3267: count = netTypeVarintToUint((u8**)data);
call 0 never executed
- -: 3202: }
- -: 3203: else {
- -: 3204: // high nibble
- #####: 3205: readTypeInHighNbl;
+ -: 3268: }
+ -: 3269: else {
+ -: 3270: // high nibble
+ #####: 3271: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3206: count = varintToUint((u8**)data);
+ #####: 3272: count = varintToUint((u8**)data);
call 0 never executed
- -: 3207: }
- #####: 3208: sBytesPushBuffer(&B, data, count);
+ -: 3273: }
+ #####: 3274: sBytesPushBuffer(&B, data, count);
call 0 never executed
- #####: 3209: *data += count;
- #####: 3210: sDictPushTiny(dict, key, (smallt *) B);
+ #####: 3275: *data += count;
+ #####: 3276: sDictPushTiny(dict, key, (smallt *) B);
call 0 never executed
- #####: 3211: break;
- -: 3212: }
- -: 3213: }
- -: 3214:}
- -: 3215:
- -: 3216:/**
- -: 3217: * deserialize array from data
- -: 3218: *
- -: 3219: * a new array is allocated
- -: 3220: *
- -: 3221: * \param
- -: 3222: * array holding the elements
- -: 3223: * data serialized dictionary
- -: 3224: */
+ #####: 3277: break;
+ -: 3278: }
+ -: 3279: }
+ -: 3280:}
+ -: 3281:
+ -: 3282:/**
+ -: 3283: * deserialize array from data
+ -: 3284: *
+ -: 3285: * a new array is allocated
+ -: 3286: *
+ -: 3287: * \param
+ -: 3288: * array holding the elements
+ -: 3289: * data serialized dictionary
+ -: 3290: */
function arrayNetDeserialLevel1 called 0 returned 0% blocks executed 0%
- #####: 3225:internal void arrayNetDeserialLevel1(sArrayt **array, u8 **data, contextt *ctx) {
- #####: 3226: sUndefinedt *u = NULL;
- #####: 3227: sBoolt *bo = NULL;
- #####: 3228: double *D = NULL;
- #####: 3229: sDoublet *Do = NULL;
- #####: 3230: sDictt *d = NULL;
- #####: 3231: sIntt *io = NULL;
- #####: 3232: char *s = NULL;
- #####: 3233: sStringt *so = NULL;
- #####: 3234: sArrayt *a = NULL;
- #####: 3235: sBytest *B = NULL;
- -: 3236: uint32_t count;
- -: 3237: uint32_t arrayCount;
- -: 3238:
- #####: 3239: if (ctx->nibble == lowNbl) {
+ #####: 3291:internal void arrayNetDeserialLevel1(sArrayt **array, u8 **data, contextt *ctx) {
+ #####: 3292: sUndefinedt *u = NULL;
+ #####: 3293: sBoolt *bo = NULL;
+ #####: 3294: double *D = NULL;
+ #####: 3295: sDoublet *Do = NULL;
+ #####: 3296: sDictt *d = NULL;
+ #####: 3297: sIntt *io = NULL;
+ #####: 3298: char *s = NULL;
+ #####: 3299: sStringt *so = NULL;
+ #####: 3300: sArrayt *a = NULL;
+ #####: 3301: sBytest *B = NULL;
+ -: 3302: uint32_t count;
+ -: 3303: uint32_t arrayCount;
+ -: 3304:
+ #####: 3305: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3240: arrayCount = netTypeVarintToUint(data);
+ #####: 3306: arrayCount = netTypeVarintToUint(data);
call 0 never executed
- -: 3241: }
- -: 3242: else {
- -: 3243: // high nibble
- #####: 3244: readTypeInHighNbl;
+ -: 3307: }
+ -: 3308: else {
+ -: 3309: // high nibble
+ #####: 3310: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3245: arrayCount = varintToUint(data);
+ #####: 3311: arrayCount = varintToUint(data);
call 0 never executed
- -: 3246: }
- -: 3247:
- #####: 3248: if (!arrayCount) {
+ -: 3312: }
+ -: 3313:
+ #####: 3314: if (!arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 3249: *array = allocSArray();;
+ #####: 3315: *array = allocSArray();;
call 0 never executed
- #####: 3250: ret;
- -: 3251: }
- -: 3252:
- #####: 3253: loop(arrayCount) {
+ #####: 3316: ret;
+ -: 3317: }
+ -: 3318:
+ #####: 3319: loop(arrayCount) {
branch 0 never executed
branch 1 never executed
- -: 3254: char type;
- #####: 3255: if (ctx->nibble == lowNbl) {
+ -: 3320: char type;
+ #####: 3321: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3256: type = (**data) & 0xF;
- -: 3257: }
- -: 3258: else {
- -: 3259: // high nibble
- #####: 3260: type = (*ctx->nblAddr) >> 4;
- -: 3261: }
- -: 3262:
- #####: 3263: switch(type) {
+ #####: 3322: type = (**data) & 0xF;
+ -: 3323: }
+ -: 3324: else {
+ -: 3325: // high nibble
+ #####: 3326: type = (*ctx->nblAddr) >> 4;
+ -: 3327: }
+ -: 3328:
+ #####: 3329: switch(type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -4822,226 +4888,230 @@ branch 5 never executed
branch 6 never executed
branch 7 never executed
branch 8 never executed
- -: 3264: case S_UNDEFINED:
- #####: 3265: if (ctx->nibble == lowNbl) {
+ -: 3330: case S_UNDEFINED:
+ #####: 3331: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3266: readTypeOnly;
- -: 3267: }
- -: 3268: else {
- -: 3269: // high nibble
- #####: 3270: readTypeInHighNbl;
+ #####: 3332: readTypeOnly;
+ -: 3333: }
+ -: 3334: else {
+ -: 3335: // high nibble
+ #####: 3336: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- -: 3271: }
- #####: 3272: u = allocSUndefined();
+ -: 3337: }
+ #####: 3338: u = allocSUndefined();
call 0 never executed
- #####: 3273: sArrayPushTiny(array, (smallt *) u);
+ #####: 3339: sArrayPushTiny(array, (smallt *) u);
call 0 never executed
- #####: 3274: break;
- -: 3275: case S_BOOL:
- #####: 3276: if (!ctx->boolAddr) {
+ #####: 3340: break;
+ -: 3341: case S_BOOL:
+ #####: 3342: if (!ctx->boolAddr) {
branch 0 never executed
branch 1 never executed
- -: 3277: // new packed bools
- #####: 3278: if (ctx->nibble == lowNbl) {
+ -: 3343: // new packed bools
+ #####: 3344: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3279: read4bPackedBool;
- #####: 3280: bo = allocSBool((*ctx->boolAddr) & 0x10);
+ #####: 3345: read4bPackedBool;
+ #####: 3346: bo = allocSBool((*ctx->boolAddr) & 0x10);
call 0 never executed
- -: 3281: }
- -: 3282: else {
- -: 3283: // high nibble
- #####: 3284: readTypeInHighNbl;
+ -: 3347: }
+ -: 3348: else {
+ -: 3349: // high nibble
+ #####: 3350: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3285: read8bPackedBool;
- #####: 3286: bo = allocSBool((*ctx->boolAddr) & 0x1);
+ #####: 3351: read8bPackedBool;
+ #####: 3352: bo = allocSBool((*ctx->boolAddr) & 0x1);
call 0 never executed
- -: 3287: }
- -: 3288: }
- -: 3289: else {
- -: 3290: // there was a bool before this one, read bits in nibbles
- #####: 3291: if (ctx->nibble == lowNbl) {
+ -: 3353: }
+ -: 3354: }
+ -: 3355: else {
+ -: 3356: // there was a bool before this one, read bits in nibbles
+ #####: 3357: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3292: if (ctx->boolShift == 8) {
+ #####: 3358: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- #####: 3293: read4bPackedBool;
- #####: 3294: bo = allocSBool((*ctx->boolAddr) & 0x10);
+ #####: 3359: read4bPackedBool;
+ #####: 3360: bo = allocSBool((*ctx->boolAddr) & 0x10);
call 0 never executed
- -: 3295: }
- -: 3296: else {
- #####: 3297: readTypeOnly;
- #####: 3298: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+ -: 3361: }
+ -: 3362: else {
+ #####: 3363: readTypeOnly;
+ #####: 3364: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
call 0 never executed
- -: 3299: }
- -: 3300: }
- -: 3301: else {
- -: 3302: // high nibble
- #####: 3303: readTypeInHighNbl;
+ -: 3365: }
+ -: 3366: }
+ -: 3367: else {
+ -: 3368: // high nibble
+ #####: 3369: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3304: if (ctx->boolShift == 8) {
+ #####: 3370: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- #####: 3305: read8bPackedBool;
- #####: 3306: bo = allocSBool((*ctx->boolAddr) & 0x1);
+ #####: 3371: read8bPackedBool;
+ #####: 3372: bo = allocSBool((*ctx->boolAddr) & 0x1);
call 0 never executed
- -: 3307: }
- -: 3308: else {
- #####: 3309: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+ -: 3373: }
+ -: 3374: else {
+ #####: 3375: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
call 0 never executed
- -: 3310: }
- -: 3311: }
- -: 3312: }
- #####: 3313: sArrayPushTiny(array, (smallt *) bo);
+ -: 3376: }
+ -: 3377: }
+ -: 3378: }
+ #####: 3379: sArrayPushTiny(array, (smallt *) bo);
call 0 never executed
- #####: 3314: break;
- -: 3315: case S_DICT:
- #####: 3316: d = NULL;
- #####: 3317: dictNetDeserialLevel1(&d, data, ctx);
+ #####: 3380: break;
+ -: 3381: case S_DICT:
+ #####: 3382: d = NULL;
+ #####: 3383: dictNetDeserialLevel1(&d, data, ctx);
call 0 never executed
- #####: 3318: sArrayPushTiny(array, (smallt *) d);
+ #####: 3384: sArrayPushTiny(array, (smallt *) d);
call 0 never executed
- #####: 3319: break;
- -: 3320: case S_DOUBLE:
- #####: 3321: if (ctx->nibble == lowNbl) {
+ #####: 3385: break;
+ -: 3386: case S_DOUBLE:
+ #####: 3387: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3322: readTypeOnly;
- -: 3323: }
- -: 3324: else {
- -: 3325: // high nibble
- #####: 3326: readTypeInHighNbl;
+ #####: 3388: readTypeOnly;
+ -: 3389: }
+ -: 3390: else {
+ -: 3391: // high nibble
+ #####: 3392: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- -: 3327: }
- #####: 3328: D = (double *)(*data);
- #####: 3329: *data += sizeof(double);
- #####: 3330: Do = allocSDouble(*D);
+ -: 3393: }
+ #####: 3394: D = (double *)(*data);
+ #####: 3395: *data += sizeof(double);
+ #####: 3396: Do = allocSDouble(*D);
call 0 never executed
- #####: 3331: sArrayPushTiny(array, (smallt *) Do);
+ #####: 3397: sArrayPushTiny(array, (smallt *) Do);
call 0 never executed
- #####: 3332: break;
- -: 3333: case S_INT: {
- -: 3334: i64 v;
- #####: 3335: if (ctx->nibble == lowNbl) {
+ #####: 3398: break;
+ -: 3399: case S_INT: {
+ -: 3400: i64 v;
+ #####: 3401: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3336: v = netTypeVarintToUint((u8**)data);
+ #####: 3402: v = netTypeVarintToUint((u8**)data);
call 0 never executed
- -: 3337: }
- -: 3338: else {
- -: 3339: // high nibble
- #####: 3340: readTypeInHighNbl;
+ -: 3403: }
+ -: 3404: else {
+ -: 3405: // high nibble
+ #####: 3406: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3341: v = varintToUint(data);
+ #####: 3407: v = varintToUint(data);
call 0 never executed
- -: 3342: }
- #####: 3343: v = (v >> 1) ^ ((v << 63) >> 63);
- #####: 3344: io = allocSInt(v);
+ -: 3408: }
+ #####: 3409: v = (v >> 1) ^ ((v << 63) >> 63);
+ #####: 3410: io = allocSInt(v);
call 0 never executed
- #####: 3345: sArrayPushTiny(array, (smallt *) io);
+ #####: 3411: sArrayPushTiny(array, (smallt *) io);
call 0 never executed
- -: 3346: }
- #####: 3347: break;
- -: 3348: case S_STRING:
- #####: 3349: if (ctx->nibble == lowNbl) {
+ -: 3412: }
+ #####: 3413: break;
+ -: 3414: case S_STRING:
+ #####: 3415: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3350: readTypeOnly;
- -: 3351: }
- -: 3352: else {
- -: 3353: // high nibble
- #####: 3354: readTypeInHighNbl;
+ #####: 3416: readTypeOnly;
+ -: 3417: }
+ -: 3418: else {
+ -: 3419: // high nibble
+ #####: 3420: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- -: 3355: }
- #####: 3356: s = (char *)(*data);
- #####: 3357: *data += strlen(s)+1;
- #####: 3358: so = allocSStringTiny(s);
+ -: 3421: }
+ #####: 3422: s = (char *)(*data);
+ #####: 3423: *data += strlen(s)+1;
+ #####: 3424: so = allocSStringTiny(s);
call 0 never executed
- #####: 3359: sArrayPushTiny(array, (smallt *) so);
+ #####: 3425: sArrayPushTiny(array, (smallt *) so);
call 0 never executed
- #####: 3360: break;
- -: 3361: case S_ARRAY:
- #####: 3362: a = NULL;
- #####: 3363: arrayNetDeserialLevel1(&a, data, ctx);
+ #####: 3426: break;
+ -: 3427: case S_ARRAY:
+ #####: 3428: a = NULL;
+ #####: 3429: arrayNetDeserialLevel1(&a, data, ctx);
call 0 never executed
- #####: 3364: sArrayPushTiny(array, (smallt *) a);
+ #####: 3430: sArrayPushTiny(array, (smallt *) a);
call 0 never executed
- #####: 3365: break;
- -: 3366: case S_BYTES:
- #####: 3367: B = allocSBytes();
+ #####: 3431: break;
+ -: 3432: case S_BYTES:
+ #####: 3433: B = allocSBytes();
call 0 never executed
- #####: 3368: if (ctx->nibble == lowNbl) {
+ #####: 3434: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3369: count = netTypeVarintToUint((u8**)data);
+ #####: 3435: count = netTypeVarintToUint((u8**)data);
call 0 never executed
- -: 3370: }
- -: 3371: else {
- -: 3372: // high nibble
- #####: 3373: readTypeInHighNbl;
+ -: 3436: }
+ -: 3437: else {
+ -: 3438: // high nibble
+ #####: 3439: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3374: count = varintToUint((u8**)data);
+ #####: 3440: count = varintToUint((u8**)data);
call 0 never executed
- -: 3375: }
- #####: 3376: sBytesPushBuffer(&B, data, count);
+ -: 3441: }
+ #####: 3442: sBytesPushBuffer(&B, data, count);
call 0 never executed
- #####: 3377: *data += count;
- #####: 3378: sArrayPushTiny(array, (smallt *) B);
+ #####: 3443: *data += count;
+ #####: 3444: sArrayPushTiny(array, (smallt *) B);
call 0 never executed
- #####: 3379: break;
- -: 3380: }
- -: 3381: }
- -: 3382:}
- -: 3383:
+ #####: 3445: break;
+ -: 3446: }
+ -: 3447: }
+ -: 3448:}
+ -: 3449:
function deserialNetSerialLevel1 called 0 returned 0% blocks executed 0%
- #####: 3384:internal smallJsont* deserialNetSerialLevel1(smallJsont *self, smallBytest *data) {
- -: 3385:
- #####: 3386: if (!data) {
-branch 0 never executed
-branch 1 never executed
- #####: 3387: ret self;
- -: 3388: }
- -: 3389:
- #####: 3390: smallt *o = netDeserialLevel1(data->B);
-call 0 never executed
- -: 3391:
- #####: 3392: if (!o) {
-branch 0 never executed
-branch 1 never executed
- #####: 3393: ret self;
- -: 3394: }
- -: 3395:
- #####: 3396: freeG(self);
-call 0 never executed
- -: 3397:
- #####: 3398: setsoG(self, o);
-call 0 never executed
- -: 3399:
- #####: 3400: ret self;
- -: 3401:}
- -: 3402:
- -: 3403:// level 2
- -: 3404:
+ #####: 3450:internal smallJsont* deserialNetSerialLevel1(smallJsont *self, smallBytest *data) {
+ -: 3451:
+ #####: 3452: if (!data) {
+branch 0 never executed
+branch 1 never executed
+ #####: 3453: ret self;
+ -: 3454: }
+ -: 3455:
+ #####: 3456: smallt *o = netDeserialLevel1(data->B);
+call 0 never executed
+ -: 3457:
+ #####: 3458: if (!o) {
+branch 0 never executed
+branch 1 never executed
+ #####: 3459: ret self;
+ -: 3460: }
+ -: 3461:
+ #####: 3462: freeG(self);
+call 0 never executed
+ -: 3463:
+ #####: 3464: setsoG(self, o);
+call 0 never executed
+ -: 3465:
+ #####: 3466: ret self;
+ -: 3467:}
+ -: 3468:
+ -: 3469:// level 2
+ -: 3470:// like level 1, arrays are set to uniform when all elements are same type
+ -: 3471:
+ -: 3472:/**
+ -: 3473: * deserializer top function
+ -: 3474: */
function netDeserialLevel2 called 0 returned 0% blocks executed 0%
- #####: 3405:internal smallt* netDeserialLevel2(sBytest *obj) {
- #####: 3406: smallt *r = NULL;
- #####: 3407: double *D = NULL;
- #####: 3408: char *s = NULL;
- #####: 3409: sBytest *B = NULL;
- -: 3410: uint32_t count;
- #####: 3411: char *data = NULL;
- #####: 3412: contextt ctx = {.nibble=lowNbl, .nblAddr=NULL, .boolShift = 0, .boolAddr=NULL};
- -: 3413:
- #####: 3414: switch(obj->data & 0xF) {
+ #####: 3475:internal smallt* netDeserialLevel2(sBytest *obj) {
+ #####: 3476: smallt *r = NULL;
+ #####: 3477: double *D = NULL;
+ #####: 3478: char *s = NULL;
+ #####: 3479: sBytest *B = NULL;
+ -: 3480: uint32_t count;
+ #####: 3481: char *data = NULL;
+ #####: 3482: contextt ctx = {.nibble=lowNbl, .nblAddr=NULL, .boolShift = 0, .boolAddr=NULL};
+ -: 3483:
+ #####: 3484: switch(obj->data & 0xF) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -5053,150 +5123,150 @@ branch 7 never executed
branch 8 never executed
branch 9 never executed
branch 10 never executed
- -: 3415: case S_UNDEFINED:
- #####: 3416: r = (smallt *) allocSUndefined();
-call 0 never executed
- #####: 3417: break;
- -: 3418: case S_BOOL:
- #####: 3419: r = (smallt *) allocSBool(obj->data & 0x10);
-call 0 never executed
- #####: 3420: break;
- -: 3421: case S_DICT:
- #####: 3422: data = (char *)&(obj->data);
- -: 3423: //debug - ctx.dbuf = (u8*) data;
- #####: 3424: dictNetDeserialLevel2((sDictt **)&r, (u8**)&data, &ctx, /*packed=*/false);
-call 0 never executed
- #####: 3425: break;
- -: 3426: case S_DOUBLE:
- #####: 3427: data = &(obj->data)+1;
- #####: 3428: D = (double *)data;
- #####: 3429: r = (smallt *) allocSDouble(*D);
-call 0 never executed
- #####: 3430: break;
- -: 3431: case S_INT:
- #####: 3432: data = &(obj->data);
- #####: 3433: i64 v = netTypeVarintToUint((u8**)&data);
-call 0 never executed
- #####: 3434: v = (v >> 1) ^ ((v << 63) >> 63);
- #####: 3435: r = (smallt *) allocSInt(v);
-call 0 never executed
- #####: 3436: break;
- -: 3437: case S_STRING:
- #####: 3438: s = (char *)&(obj->data)+1;
- #####: 3439: r = (smallt *) allocSStringTiny(s);
-call 0 never executed
- #####: 3440: break;
- -: 3441: case S_ARRAY:
- #####: 3442: data = (char *)&(obj->data);
- -: 3443: //debug - ctx.dbuf = (u8*) data;
- #####: 3444: arrayNetDeserialLevel2((sArrayt **)&r, (u8**)&data, &ctx, /*packed=*/false);
-call 0 never executed
- #####: 3445: break;
- -: 3446: case S_BYTES:
- #####: 3447: B = allocSBytes();
-call 0 never executed
- #####: 3448: data = &(obj->data);
- #####: 3449: count = netTypeVarintToUint((u8**)&data);
-call 0 never executed
- #####: 3450: sBytesPushBuffer(&B, data, count);
-call 0 never executed
- #####: 3451: r = (smallt *)B;
- #####: 3452: break;
- -: 3453: case UNIFORM_DICT:
- #####: 3454: data = (char *)&(obj->data);
- -: 3455: //debug - ctx.dbuf = (u8*) data;
- #####: 3456: uniformDictNetDeserialLevel2((sDictt **)&r, (u8**)&data, &ctx, /*packed=*/false);
-call 0 never executed
- #####: 3457: break;
- -: 3458: case UNIFORM_ARRAY:
- #####: 3459: data = (char *)&(obj->data);
- -: 3460: //debug - ctx.dbuf = (u8*) data;
- #####: 3461: uniformArrayNetDeserialLevel2((sArrayt **)&r, (u8**)&data, &ctx, /*packed=*/false);
-call 0 never executed
- #####: 3462: break;
- -: 3463: }
- -: 3464:
- #####: 3465: ret r;
- -: 3466:}
- -: 3467:
- -: 3468:/**
- -: 3469: * deserialize dictionary from data
- -: 3470: *
- -: 3471: * a new dictionary is allocated
- -: 3472: *
- -: 3473: * \param
- -: 3474: * dict dictionary holding the elements
- -: 3475: * data serialized dictionary
- -: 3476: */
+ -: 3485: case S_UNDEFINED:
+ #####: 3486: r = (smallt *) allocSUndefined();
+call 0 never executed
+ #####: 3487: break;
+ -: 3488: case S_BOOL:
+ #####: 3489: r = (smallt *) allocSBool(obj->data & 0x10);
+call 0 never executed
+ #####: 3490: break;
+ -: 3491: case S_DICT:
+ #####: 3492: data = (char *)&(obj->data);
+ -: 3493: //debug - ctx.dbuf = (u8*) data;
+ #####: 3494: dictNetDeserialLevel2((sDictt **)&r, (u8**)&data, &ctx, /*packed=*/false);
+call 0 never executed
+ #####: 3495: break;
+ -: 3496: case S_DOUBLE:
+ #####: 3497: data = &(obj->data)+1;
+ #####: 3498: D = (double *)data;
+ #####: 3499: r = (smallt *) allocSDouble(*D);
+call 0 never executed
+ #####: 3500: break;
+ -: 3501: case S_INT:
+ #####: 3502: data = &(obj->data);
+ #####: 3503: i64 v = netTypeVarintToUint((u8**)&data);
+call 0 never executed
+ #####: 3504: v = (v >> 1) ^ ((v << 63) >> 63);
+ #####: 3505: r = (smallt *) allocSInt(v);
+call 0 never executed
+ #####: 3506: break;
+ -: 3507: case S_STRING:
+ #####: 3508: s = (char *)&(obj->data)+1;
+ #####: 3509: r = (smallt *) allocSStringTiny(s);
+call 0 never executed
+ #####: 3510: break;
+ -: 3511: case S_ARRAY:
+ #####: 3512: data = (char *)&(obj->data);
+ -: 3513: //debug - ctx.dbuf = (u8*) data;
+ #####: 3514: arrayNetDeserialLevel2((sArrayt **)&r, (u8**)&data, &ctx, /*packed=*/false);
+call 0 never executed
+ #####: 3515: break;
+ -: 3516: case S_BYTES:
+ #####: 3517: B = allocSBytes();
+call 0 never executed
+ #####: 3518: data = &(obj->data);
+ #####: 3519: count = netTypeVarintToUint((u8**)&data);
+call 0 never executed
+ #####: 3520: sBytesPushBuffer(&B, data, count);
+call 0 never executed
+ #####: 3521: r = (smallt *)B;
+ #####: 3522: break;
+ -: 3523: case UNIFORM_DICT:
+ #####: 3524: data = (char *)&(obj->data);
+ -: 3525: //debug - ctx.dbuf = (u8*) data;
+ #####: 3526: uniformDictNetDeserialLevel2((sDictt **)&r, (u8**)&data, &ctx, /*packed=*/false);
+call 0 never executed
+ #####: 3527: break;
+ -: 3528: case UNIFORM_ARRAY:
+ #####: 3529: data = (char *)&(obj->data);
+ -: 3530: //debug - ctx.dbuf = (u8*) data;
+ #####: 3531: uniformArrayNetDeserialLevel2((sArrayt **)&r, (u8**)&data, &ctx, /*packed=*/false);
+call 0 never executed
+ #####: 3532: break;
+ -: 3533: }
+ -: 3534:
+ #####: 3535: ret r;
+ -: 3536:}
+ -: 3537:
+ -: 3538:/**
+ -: 3539: * deserialize dictionary from data
+ -: 3540: *
+ -: 3541: * a new dictionary is allocated
+ -: 3542: *
+ -: 3543: * \param
+ -: 3544: * dict dictionary holding the elements
+ -: 3545: * data serialized dictionary
+ -: 3546: */
function dictNetDeserialLevel2 called 0 returned 0% blocks executed 0%
- #####: 3477:internal void dictNetDeserialLevel2(sDictt **dict, u8 **data, contextt *ctx, bool packed) {
- #####: 3478: sUndefinedt *u = NULL;
- #####: 3479: sBoolt *bo = NULL;
- #####: 3480: double *D = NULL;
- #####: 3481: sDoublet *Do = NULL;
- #####: 3482: sDictt *d = NULL;
- #####: 3483: sIntt *io = NULL;
- #####: 3484: char *s = NULL;
- #####: 3485: sStringt *so = NULL;
- #####: 3486: sArrayt *a = NULL;
- #####: 3487: sBytest *B = NULL;
- -: 3488: uint32_t count;
- -: 3489: uint32_t dictCount;
- -: 3490:
- #####: 3491: if (packed) {
+ #####: 3547:internal void dictNetDeserialLevel2(sDictt **dict, u8 **data, contextt *ctx, bool packed) {
+ #####: 3548: sUndefinedt *u = NULL;
+ #####: 3549: sBoolt *bo = NULL;
+ #####: 3550: double *D = NULL;
+ #####: 3551: sDoublet *Do = NULL;
+ #####: 3552: sDictt *d = NULL;
+ #####: 3553: sIntt *io = NULL;
+ #####: 3554: char *s = NULL;
+ #####: 3555: sStringt *so = NULL;
+ #####: 3556: sArrayt *a = NULL;
+ #####: 3557: sBytest *B = NULL;
+ -: 3558: uint32_t count;
+ -: 3559: uint32_t dictCount;
+ -: 3560:
+ #####: 3561: if (packed) {
branch 0 never executed
branch 1 never executed
- #####: 3492: dictCount = varintToUint(data);
+ #####: 3562: dictCount = varintToUint(data);
call 0 never executed
- -: 3493: }
- -: 3494: else {
- #####: 3495: if (ctx->nibble == lowNbl) {
+ -: 3563: }
+ -: 3564: else {
+ #####: 3565: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3496: dictCount = netTypeVarintToUint(data);
+ #####: 3566: dictCount = netTypeVarintToUint(data);
call 0 never executed
- -: 3497: }
- -: 3498: else {
- -: 3499: // high nibble
- -: 3500: // type = *(ctx->dbuf + ctx->nblOffset) >> 4;
- -: 3501: #define readTypeInHighNbl\
- -: 3502: ctx->nibble = lowNbl;\
- -: 3503: if (ctx->nblAddr == *data)\
- -: 3504: /* data points to the type, next byte is count */\
- -: 3505: (*data)++
- #####: 3506: readTypeInHighNbl;
+ -: 3567: }
+ -: 3568: else {
+ -: 3569: // high nibble
+ -: 3570: // type = *(ctx->dbuf + ctx->nblOffset) >> 4;
+ -: 3571: #define readTypeInHighNbl\
+ -: 3572: ctx->nibble = lowNbl;\
+ -: 3573: if (ctx->nblAddr == *data)\
+ -: 3574: /* data points to the type, next byte is count */\
+ -: 3575: (*data)++
+ #####: 3576: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3507: dictCount = varintToUint(data);
+ #####: 3577: dictCount = varintToUint(data);
call 0 never executed
- -: 3508: }
- -: 3509: }
- -: 3510:
- #####: 3511: if (!dictCount) {
+ -: 3578: }
+ -: 3579: }
+ -: 3580:
+ #####: 3581: if (!dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3512: *dict = allocSDict();
+ #####: 3582: *dict = allocSDict();
call 0 never executed
- #####: 3513: ret;
- -: 3514: }
- -: 3515:
- #####: 3516: loop(dictCount) {
+ #####: 3583: ret;
+ -: 3584: }
+ -: 3585:
+ #####: 3586: loop(dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3517: char *key = (char*)*data;
- #####: 3518: *data += strlen(key)+1;
- -: 3519: char type;
- #####: 3520: if (ctx->nibble == lowNbl) {
+ #####: 3587: char *key = (char*)*data;
+ #####: 3588: *data += strlen(key)+1;
+ -: 3589: char type;
+ #####: 3590: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3521: type = (**data) & 0xF;
- -: 3522: }
- -: 3523: else {
- -: 3524: // high nibble
- #####: 3525: type = (*ctx->nblAddr) >> 4;
- -: 3526: }
- -: 3527:
- #####: 3528: switch(type) {
+ #####: 3591: type = (**data) & 0xF;
+ -: 3592: }
+ -: 3593: else {
+ -: 3594: // high nibble
+ #####: 3595: type = (*ctx->nblAddr) >> 4;
+ -: 3596: }
+ -: 3597:
+ #####: 3598: switch(type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -5208,274 +5278,274 @@ branch 7 never executed
branch 8 never executed
branch 9 never executed
branch 10 never executed
- -: 3529: case S_UNDEFINED:
- #####: 3530: if (ctx->nibble == lowNbl) {
+ -: 3599: case S_UNDEFINED:
+ #####: 3600: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- -: 3531: #define readTypeOnly\
- -: 3532: ctx->nibble = highNbl;\
- -: 3533: ctx->nblAddr = *data;\
- -: 3534: (*data)++
- #####: 3535: readTypeOnly;
- -: 3536: }
- -: 3537: else {
- -: 3538: // high nibble
- #####: 3539: readTypeInHighNbl;
+ -: 3601: #define readTypeOnly\
+ -: 3602: ctx->nibble = highNbl;\
+ -: 3603: ctx->nblAddr = *data;\
+ -: 3604: (*data)++
+ #####: 3605: readTypeOnly;
+ -: 3606: }
+ -: 3607: else {
+ -: 3608: // high nibble
+ #####: 3609: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- -: 3540: }
- #####: 3541: u = allocSUndefined();
+ -: 3610: }
+ #####: 3611: u = allocSUndefined();
call 0 never executed
- #####: 3542: sDictPushTiny(dict, key, (smallt *) u);
+ #####: 3612: sDictPushTiny(dict, key, (smallt *) u);
call 0 never executed
- #####: 3543: break;
- -: 3544: case S_BOOL:
- #####: 3545: if (!ctx->boolAddr) {
+ #####: 3613: break;
+ -: 3614: case S_BOOL:
+ #####: 3615: if (!ctx->boolAddr) {
branch 0 never executed
branch 1 never executed
- -: 3546: // new packed bools
- #####: 3547: if (ctx->nibble == lowNbl) {
+ -: 3616: // new packed bools
+ #####: 3617: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- -: 3548: #define read4bPackedBool\
- -: 3549: ctx->boolShift = 5;\
- -: 3550: ctx->boolAddr = *data;\
- -: 3551: (*data)++
- #####: 3552: read4bPackedBool;
- #####: 3553: bo = allocSBool((*ctx->boolAddr) & 0x10);
+ -: 3618: #define read4bPackedBool\
+ -: 3619: ctx->boolShift = 5;\
+ -: 3620: ctx->boolAddr = *data;\
+ -: 3621: (*data)++
+ #####: 3622: read4bPackedBool;
+ #####: 3623: bo = allocSBool((*ctx->boolAddr) & 0x10);
call 0 never executed
- -: 3554: }
- -: 3555: else {
- -: 3556: // high nibble
- #####: 3557: readTypeInHighNbl;
+ -: 3624: }
+ -: 3625: else {
+ -: 3626: // high nibble
+ #####: 3627: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- -: 3558: #define read8bPackedBool\
- -: 3559: ctx->boolShift = 1;\
- -: 3560: ctx->boolAddr = *data;\
- -: 3561: (*data)++
- #####: 3562: read8bPackedBool;
- #####: 3563: bo = allocSBool((*ctx->boolAddr) & 0x1);
+ -: 3628: #define read8bPackedBool\
+ -: 3629: ctx->boolShift = 1;\
+ -: 3630: ctx->boolAddr = *data;\
+ -: 3631: (*data)++
+ #####: 3632: read8bPackedBool;
+ #####: 3633: bo = allocSBool((*ctx->boolAddr) & 0x1);
call 0 never executed
- -: 3564: }
- -: 3565: }
- -: 3566: else {
- -: 3567: // there was a bool before this one, read bits in nibbles
- #####: 3568: if (ctx->nibble == lowNbl) {
+ -: 3634: }
+ -: 3635: }
+ -: 3636: else {
+ -: 3637: // there was a bool before this one, read bits in nibbles
+ #####: 3638: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3569: if (ctx->boolShift == 8) {
+ #####: 3639: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- #####: 3570: read4bPackedBool;
- #####: 3571: bo = allocSBool((*ctx->boolAddr) & 0x10);
+ #####: 3640: read4bPackedBool;
+ #####: 3641: bo = allocSBool((*ctx->boolAddr) & 0x10);
call 0 never executed
- -: 3572: }
- -: 3573: else {
- #####: 3574: readTypeOnly;
- #####: 3575: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+ -: 3642: }
+ -: 3643: else {
+ #####: 3644: readTypeOnly;
+ #####: 3645: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
call 0 never executed
- -: 3576: }
- -: 3577: }
- -: 3578: else {
- -: 3579: // high nibble
- #####: 3580: readTypeInHighNbl;
+ -: 3646: }
+ -: 3647: }
+ -: 3648: else {
+ -: 3649: // high nibble
+ #####: 3650: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3581: if (ctx->boolShift == 8) {
+ #####: 3651: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- #####: 3582: read8bPackedBool;
- #####: 3583: bo = allocSBool((*ctx->boolAddr) & 0x1);
+ #####: 3652: read8bPackedBool;
+ #####: 3653: bo = allocSBool((*ctx->boolAddr) & 0x1);
call 0 never executed
- -: 3584: }
- -: 3585: else {
- -: 3586: // high nibble
- #####: 3587: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+ -: 3654: }
+ -: 3655: else {
+ -: 3656: // high nibble
+ #####: 3657: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
call 0 never executed
- -: 3588: }
- -: 3589: }
- -: 3590: }
- #####: 3591: sDictPushTiny(dict, key, (smallt *) bo);
+ -: 3658: }
+ -: 3659: }
+ -: 3660: }
+ #####: 3661: sDictPushTiny(dict, key, (smallt *) bo);
call 0 never executed
- #####: 3592: break;
- -: 3593: case S_DICT:
- #####: 3594: d = NULL;
- #####: 3595: dictNetDeserialLevel2(&d, data, ctx, /*packed=*/false);
+ #####: 3662: break;
+ -: 3663: case S_DICT:
+ #####: 3664: d = NULL;
+ #####: 3665: dictNetDeserialLevel2(&d, data, ctx, /*packed=*/false);
call 0 never executed
- #####: 3596: sDictPushTiny(dict, key, (smallt *) d);
+ #####: 3666: sDictPushTiny(dict, key, (smallt *) d);
call 0 never executed
- #####: 3597: break;
- -: 3598: case S_DOUBLE:
- #####: 3599: if (ctx->nibble == lowNbl) {
+ #####: 3667: break;
+ -: 3668: case S_DOUBLE:
+ #####: 3669: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3600: readTypeOnly;
- -: 3601: }
- -: 3602: else {
- -: 3603: // high nibble
- #####: 3604: readTypeInHighNbl;
+ #####: 3670: readTypeOnly;
+ -: 3671: }
+ -: 3672: else {
+ -: 3673: // high nibble
+ #####: 3674: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- -: 3605: }
- #####: 3606: D = (double *)(*data);
- #####: 3607: *data += sizeof(double);
- #####: 3608: Do = allocSDouble(*D);
+ -: 3675: }
+ #####: 3676: D = (double *)(*data);
+ #####: 3677: *data += sizeof(double);
+ #####: 3678: Do = allocSDouble(*D);
call 0 never executed
- #####: 3609: sDictPushTiny(dict, key, (smallt *) Do);
+ #####: 3679: sDictPushTiny(dict, key, (smallt *) Do);
call 0 never executed
- #####: 3610: break;
- -: 3611: case S_INT: {
- -: 3612: i64 v;
- #####: 3613: if (ctx->nibble == lowNbl) {
+ #####: 3680: break;
+ -: 3681: case S_INT: {
+ -: 3682: i64 v;
+ #####: 3683: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3614: v = netTypeVarintToUint((u8**)data);
+ #####: 3684: v = netTypeVarintToUint((u8**)data);
call 0 never executed
- -: 3615: }
- -: 3616: else {
- -: 3617: // high nibble
- #####: 3618: readTypeInHighNbl;
+ -: 3685: }
+ -: 3686: else {
+ -: 3687: // high nibble
+ #####: 3688: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3619: v = varintToUint(data);
+ #####: 3689: v = varintToUint(data);
call 0 never executed
- -: 3620: }
- #####: 3621: v = (v >> 1) ^ ((v << 63) >> 63);
- #####: 3622: io = allocSInt(v);
+ -: 3690: }
+ #####: 3691: v = (v >> 1) ^ ((v << 63) >> 63);
+ #####: 3692: io = allocSInt(v);
call 0 never executed
- #####: 3623: sDictPushTiny(dict, key, (smallt *) io);
+ #####: 3693: sDictPushTiny(dict, key, (smallt *) io);
call 0 never executed
- -: 3624: }
- #####: 3625: break;
- -: 3626: case S_STRING:
- #####: 3627: if (ctx->nibble == lowNbl) {
+ -: 3694: }
+ #####: 3695: break;
+ -: 3696: case S_STRING:
+ #####: 3697: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3628: readTypeOnly;
- -: 3629: }
- -: 3630: else {
- -: 3631: // high nibble
- #####: 3632: readTypeInHighNbl;
+ #####: 3698: readTypeOnly;
+ -: 3699: }
+ -: 3700: else {
+ -: 3701: // high nibble
+ #####: 3702: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- -: 3633: }
- #####: 3634: s = (char *)(*data);
- #####: 3635: *data += strlen(s)+1;
- #####: 3636: so = allocSStringTiny(s);
+ -: 3703: }
+ #####: 3704: s = (char *)(*data);
+ #####: 3705: *data += strlen(s)+1;
+ #####: 3706: so = allocSStringTiny(s);
call 0 never executed
- #####: 3637: sDictPushTiny(dict, key, (smallt *) so);
+ #####: 3707: sDictPushTiny(dict, key, (smallt *) so);
call 0 never executed
- #####: 3638: break;
- -: 3639: case S_ARRAY:
- #####: 3640: a = NULL;
- #####: 3641: arrayNetDeserialLevel2(&a, data, ctx, /*packed=*/false);
+ #####: 3708: break;
+ -: 3709: case S_ARRAY:
+ #####: 3710: a = NULL;
+ #####: 3711: arrayNetDeserialLevel2(&a, data, ctx, /*packed=*/false);
call 0 never executed
- #####: 3642: sDictPushTiny(dict, key, (smallt *) a);
+ #####: 3712: sDictPushTiny(dict, key, (smallt *) a);
call 0 never executed
- #####: 3643: break;
- -: 3644: case S_BYTES:
- #####: 3645: B = allocSBytes();
+ #####: 3713: break;
+ -: 3714: case S_BYTES:
+ #####: 3715: B = allocSBytes();
call 0 never executed
- #####: 3646: if (ctx->nibble == lowNbl) {
+ #####: 3716: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3647: count = netTypeVarintToUint((u8**)data);
+ #####: 3717: count = netTypeVarintToUint((u8**)data);
call 0 never executed
- -: 3648: }
- -: 3649: else {
- -: 3650: // high nibble
- #####: 3651: readTypeInHighNbl;
+ -: 3718: }
+ -: 3719: else {
+ -: 3720: // high nibble
+ #####: 3721: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3652: count = varintToUint((u8**)data);
+ #####: 3722: count = varintToUint((u8**)data);
call 0 never executed
- -: 3653: }
- #####: 3654: sBytesPushBuffer(&B, data, count);
+ -: 3723: }
+ #####: 3724: sBytesPushBuffer(&B, data, count);
call 0 never executed
- #####: 3655: *data += count;
- #####: 3656: sDictPushTiny(dict, key, (smallt *) B);
+ #####: 3725: *data += count;
+ #####: 3726: sDictPushTiny(dict, key, (smallt *) B);
call 0 never executed
- #####: 3657: break;
- -: 3658: case UNIFORM_DICT:
- #####: 3659: d = NULL;
- #####: 3660: uniformDictNetDeserialLevel2(&d, data, ctx, /*packed=*/false);
+ #####: 3727: break;
+ -: 3728: case UNIFORM_DICT:
+ #####: 3729: d = NULL;
+ #####: 3730: uniformDictNetDeserialLevel2(&d, data, ctx, /*packed=*/false);
call 0 never executed
- #####: 3661: sDictPushTiny(dict, key, (smallt *) d);
+ #####: 3731: sDictPushTiny(dict, key, (smallt *) d);
call 0 never executed
- #####: 3662: break;
- -: 3663: case UNIFORM_ARRAY:
- #####: 3664: a = NULL;
- #####: 3665: uniformArrayNetDeserialLevel2(&a, data, ctx, /*packed=*/false);
+ #####: 3732: break;
+ -: 3733: case UNIFORM_ARRAY:
+ #####: 3734: a = NULL;
+ #####: 3735: uniformArrayNetDeserialLevel2(&a, data, ctx, /*packed=*/false);
call 0 never executed
- #####: 3666: sDictPushTiny(dict, key, (smallt *) a);
+ #####: 3736: sDictPushTiny(dict, key, (smallt *) a);
call 0 never executed
- #####: 3667: break;
- -: 3668: }
- -: 3669: }
- -: 3670:}
- -: 3671:
- -: 3672:/**
- -: 3673: * deserialize dictionary from data
- -: 3674: *
- -: 3675: * a new dictionary is allocated
- -: 3676: *
- -: 3677: * \param
- -: 3678: * dict dictionary holding the elements
- -: 3679: * data serialized dictionary
- -: 3680: */
+ #####: 3737: break;
+ -: 3738: }
+ -: 3739: }
+ -: 3740:}
+ -: 3741:
+ -: 3742:/**
+ -: 3743: * deserialize dictionary from data
+ -: 3744: *
+ -: 3745: * a new dictionary is allocated
+ -: 3746: *
+ -: 3747: * \param
+ -: 3748: * dict dictionary holding the elements
+ -: 3749: * data serialized dictionary
+ -: 3750: */
function uniformDictNetDeserialLevel2 called 0 returned 0% blocks executed 0%
- #####: 3681:internal void uniformDictNetDeserialLevel2(sDictt **dict, u8 **data, contextt *ctx, bool packed) {
- #####: 3682: sUndefinedt *u = NULL;
- #####: 3683: sBoolt *bo = NULL;
- #####: 3684: double *D = NULL;
- #####: 3685: sDoublet *Do = NULL;
- #####: 3686: sDictt *d = NULL;
- #####: 3687: sIntt *io = NULL;
- #####: 3688: char *s = NULL;
- #####: 3689: sStringt *so = NULL;
- #####: 3690: sArrayt *a = NULL;
- #####: 3691: sBytest *B = NULL;
- -: 3692: uint32_t count;
- -: 3693: uint32_t dictCount;
- -: 3694: u8 type;
- -: 3695:
- #####: 3696: if (packed) {
+ #####: 3751:internal void uniformDictNetDeserialLevel2(sDictt **dict, u8 **data, contextt *ctx, bool packed) {
+ #####: 3752: sUndefinedt *u = NULL;
+ #####: 3753: sBoolt *bo = NULL;
+ #####: 3754: double *D = NULL;
+ #####: 3755: sDoublet *Do = NULL;
+ #####: 3756: sDictt *d = NULL;
+ #####: 3757: sIntt *io = NULL;
+ #####: 3758: char *s = NULL;
+ #####: 3759: sStringt *so = NULL;
+ #####: 3760: sArrayt *a = NULL;
+ #####: 3761: sBytest *B = NULL;
+ -: 3762: uint32_t count;
+ -: 3763: uint32_t dictCount;
+ -: 3764: u8 type;
+ -: 3765:
+ #####: 3766: if (packed) {
branch 0 never executed
branch 1 never executed
- #####: 3697: type = (**data) & 0xF;
- #####: 3698: dictCount = netTypeVarintToUint(data);
+ #####: 3767: type = (**data) & 0xF;
+ #####: 3768: dictCount = netTypeVarintToUint(data);
call 0 never executed
- -: 3699: }
- -: 3700: else {
- #####: 3701: if (ctx->nibble == lowNbl) {
+ -: 3769: }
+ -: 3770: else {
+ #####: 3771: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3702: type = (**data) >> 4;
- #####: 3703: (*data)++;
- #####: 3704: dictCount = varintToUint(data);
+ #####: 3772: type = (**data) >> 4;
+ #####: 3773: (*data)++;
+ #####: 3774: dictCount = varintToUint(data);
call 0 never executed
- -: 3705: }
- -: 3706: else {
- #####: 3707: readTypeInHighNbl;
+ -: 3775: }
+ -: 3776: else {
+ #####: 3777: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3708: type = (**data) & 0xF;
- #####: 3709: dictCount = netTypeVarintToUint(data);
+ #####: 3778: type = (**data) & 0xF;
+ #####: 3779: dictCount = netTypeVarintToUint(data);
call 0 never executed
- -: 3710: }
- -: 3711: }
- -: 3712:
- #####: 3713: if (!dictCount) {
+ -: 3780: }
+ -: 3781: }
+ -: 3782:
+ #####: 3783: if (!dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3714: *dict = allocSDict();
+ #####: 3784: *dict = allocSDict();
call 0 never executed
- #####: 3715: ret;
- -: 3716: }
- -: 3717:
- -: 3718:
- #####: 3719: switch(type) {
+ #####: 3785: ret;
+ -: 3786: }
+ -: 3787:
+ -: 3788:
+ #####: 3789: switch(type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -5487,237 +5557,237 @@ branch 7 never executed
branch 8 never executed
branch 9 never executed
branch 10 never executed
- -: 3720: case S_UNDEFINED:
- #####: 3721: loop(dictCount) {
+ -: 3790: case S_UNDEFINED:
+ #####: 3791: loop(dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3722: char *key = (char*)*data;
- #####: 3723: *data += strlen(key)+1;
- #####: 3724: u = allocSUndefined();
+ #####: 3792: char *key = (char*)*data;
+ #####: 3793: *data += strlen(key)+1;
+ #####: 3794: u = allocSUndefined();
call 0 never executed
- #####: 3725: sDictPushTiny(dict, key, (smallt *) u);
+ #####: 3795: sDictPushTiny(dict, key, (smallt *) u);
call 0 never executed
- -: 3726: }
- #####: 3727: break;
- -: 3728: case S_BOOL:
- #####: 3729: loop(dictCount) {
+ -: 3796: }
+ #####: 3797: break;
+ -: 3798: case S_BOOL:
+ #####: 3799: loop(dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3730: char *key = (char*)*data;
- #####: 3731: *data += strlen(key)+1;
- #####: 3732: if (!ctx->boolAddr) {
+ #####: 3800: char *key = (char*)*data;
+ #####: 3801: *data += strlen(key)+1;
+ #####: 3802: if (!ctx->boolAddr) {
branch 0 never executed
branch 1 never executed
- #####: 3733: read8bPackedBool;
- #####: 3734: ctx->boolShift = 0;
- -: 3735: }
- #####: 3736: if (ctx->boolShift == 8) {
+ #####: 3803: read8bPackedBool;
+ #####: 3804: ctx->boolShift = 0;
+ -: 3805: }
+ #####: 3806: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- #####: 3737: readTypeInHighNbl;
+ #####: 3807: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3738: read8bPackedBool;
- #####: 3739: bo = allocSBool((*ctx->boolAddr) & 0x1);
+ #####: 3808: read8bPackedBool;
+ #####: 3809: bo = allocSBool((*ctx->boolAddr) & 0x1);
call 0 never executed
- -: 3740: }
- -: 3741: else {
- -: 3742: // high nibble
- #####: 3743: readTypeInHighNbl;
+ -: 3810: }
+ -: 3811: else {
+ -: 3812: // high nibble
+ #####: 3813: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3744: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+ #####: 3814: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
call 0 never executed
- -: 3745: }
- #####: 3746: sDictPushTiny(dict, key, (smallt *) bo);
+ -: 3815: }
+ #####: 3816: sDictPushTiny(dict, key, (smallt *) bo);
call 0 never executed
- -: 3747: }
- #####: 3748: break;
- -: 3749: case S_DICT:
- #####: 3750: loop(dictCount) {
+ -: 3817: }
+ #####: 3818: break;
+ -: 3819: case S_DICT:
+ #####: 3820: loop(dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3751: char *key = (char*)*data;
- #####: 3752: *data += strlen(key)+1;
- #####: 3753: d = NULL;
- #####: 3754: dictNetDeserialLevel2(&d, data, ctx, /*packed=*/true);
+ #####: 3821: char *key = (char*)*data;
+ #####: 3822: *data += strlen(key)+1;
+ #####: 3823: d = NULL;
+ #####: 3824: dictNetDeserialLevel2(&d, data, ctx, /*packed=*/true);
call 0 never executed
- #####: 3755: sDictPushTiny(dict, key, (smallt *) d);
+ #####: 3825: sDictPushTiny(dict, key, (smallt *) d);
call 0 never executed
- -: 3756: }
- #####: 3757: break;
- -: 3758: case S_DOUBLE:
- #####: 3759: loop(dictCount) {
+ -: 3826: }
+ #####: 3827: break;
+ -: 3828: case S_DOUBLE:
+ #####: 3829: loop(dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3760: char *key = (char*)*data;
- #####: 3761: *data += strlen(key)+1;
- #####: 3762: D = (double *)(*data);
- #####: 3763: *data += sizeof(double);
- #####: 3764: Do = allocSDouble(*D);
+ #####: 3830: char *key = (char*)*data;
+ #####: 3831: *data += strlen(key)+1;
+ #####: 3832: D = (double *)(*data);
+ #####: 3833: *data += sizeof(double);
+ #####: 3834: Do = allocSDouble(*D);
call 0 never executed
- #####: 3765: sDictPushTiny(dict, key, (smallt *) Do);
+ #####: 3835: sDictPushTiny(dict, key, (smallt *) Do);
call 0 never executed
- -: 3766: }
- #####: 3767: break;
- -: 3768: case S_INT:
- #####: 3769: loop(dictCount) {
+ -: 3836: }
+ #####: 3837: break;
+ -: 3838: case S_INT:
+ #####: 3839: loop(dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3770: char *key = (char*)*data;
- #####: 3771: *data += strlen(key)+1;
- #####: 3772: i64 v = varintToUint(data);
+ #####: 3840: char *key = (char*)*data;
+ #####: 3841: *data += strlen(key)+1;
+ #####: 3842: i64 v = varintToUint(data);
call 0 never executed
- #####: 3773: v = (v >> 1) ^ ((v << 63) >> 63);
- #####: 3774: io = allocSInt(v);
+ #####: 3843: v = (v >> 1) ^ ((v << 63) >> 63);
+ #####: 3844: io = allocSInt(v);
call 0 never executed
- #####: 3775: sDictPushTiny(dict, key, (smallt *) io);
+ #####: 3845: sDictPushTiny(dict, key, (smallt *) io);
call 0 never executed
- -: 3776: }
- #####: 3777: break;
- -: 3778: case S_STRING:
- #####: 3779: loop(dictCount) {
+ -: 3846: }
+ #####: 3847: break;
+ -: 3848: case S_STRING:
+ #####: 3849: loop(dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3780: char *key = (char*)*data;
- #####: 3781: *data += strlen(key)+1;
- #####: 3782: s = (char *)(*data);
- #####: 3783: *data += strlen(s)+1;
- #####: 3784: so = allocSStringTiny(s);
+ #####: 3850: char *key = (char*)*data;
+ #####: 3851: *data += strlen(key)+1;
+ #####: 3852: s = (char *)(*data);
+ #####: 3853: *data += strlen(s)+1;
+ #####: 3854: so = allocSStringTiny(s);
call 0 never executed
- #####: 3785: sDictPushTiny(dict, key, (smallt *) so);
+ #####: 3855: sDictPushTiny(dict, key, (smallt *) so);
call 0 never executed
- -: 3786: }
- #####: 3787: break;
- -: 3788: case S_ARRAY:
- #####: 3789: loop(dictCount) {
+ -: 3856: }
+ #####: 3857: break;
+ -: 3858: case S_ARRAY:
+ #####: 3859: loop(dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3790: char *key = (char*)*data;
- #####: 3791: *data += strlen(key)+1;
- #####: 3792: a = NULL;
- #####: 3793: arrayNetDeserialLevel2(&a, data, ctx, /*packed=*/true);
+ #####: 3860: char *key = (char*)*data;
+ #####: 3861: *data += strlen(key)+1;
+ #####: 3862: a = NULL;
+ #####: 3863: arrayNetDeserialLevel2(&a, data, ctx, /*packed=*/true);
call 0 never executed
- #####: 3794: sDictPushTiny(dict, key, (smallt *) a);
+ #####: 3864: sDictPushTiny(dict, key, (smallt *) a);
call 0 never executed
- -: 3795: }
- #####: 3796: break;
- -: 3797: case S_BYTES:
- #####: 3798: loop(dictCount) {
+ -: 3865: }
+ #####: 3866: break;
+ -: 3867: case S_BYTES:
+ #####: 3868: loop(dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3799: char *key = (char*)*data;
- #####: 3800: *data += strlen(key)+1;
- #####: 3801: B = allocSBytes();
+ #####: 3869: char *key = (char*)*data;
+ #####: 3870: *data += strlen(key)+1;
+ #####: 3871: B = allocSBytes();
call 0 never executed
- #####: 3802: count = varintToUint((u8**)data);
+ #####: 3872: count = varintToUint((u8**)data);
call 0 never executed
- #####: 3803: sBytesPushBuffer(&B, data, count);
+ #####: 3873: sBytesPushBuffer(&B, data, count);
call 0 never executed
- #####: 3804: *data += count;
- #####: 3805: sDictPushTiny(dict, key, (smallt *) B);
+ #####: 3874: *data += count;
+ #####: 3875: sDictPushTiny(dict, key, (smallt *) B);
call 0 never executed
- -: 3806: }
- #####: 3807: break;
- -: 3808: case UNIFORM_DICT:
- #####: 3809: loop(dictCount) {
+ -: 3876: }
+ #####: 3877: break;
+ -: 3878: case UNIFORM_DICT:
+ #####: 3879: loop(dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3810: char *key = (char*)*data;
- #####: 3811: *data += strlen(key)+1;
- #####: 3812: d = NULL;
- #####: 3813: uniformDictNetDeserialLevel2(&d, data, ctx, /*packed=*/true);
+ #####: 3880: char *key = (char*)*data;
+ #####: 3881: *data += strlen(key)+1;
+ #####: 3882: d = NULL;
+ #####: 3883: uniformDictNetDeserialLevel2(&d, data, ctx, /*packed=*/true);
call 0 never executed
- #####: 3814: sDictPushTiny(dict, key, (smallt *) d);
+ #####: 3884: sDictPushTiny(dict, key, (smallt *) d);
call 0 never executed
- -: 3815: }
- #####: 3816: break;
- -: 3817: case UNIFORM_ARRAY:
- #####: 3818: loop(dictCount) {
+ -: 3885: }
+ #####: 3886: break;
+ -: 3887: case UNIFORM_ARRAY:
+ #####: 3888: loop(dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 3819: char *key = (char*)*data;
- #####: 3820: *data += strlen(key)+1;
- #####: 3821: a = NULL;
- #####: 3822: uniformArrayNetDeserialLevel2(&a, data, ctx, /*packed=*/true);
+ #####: 3889: char *key = (char*)*data;
+ #####: 3890: *data += strlen(key)+1;
+ #####: 3891: a = NULL;
+ #####: 3892: uniformArrayNetDeserialLevel2(&a, data, ctx, /*packed=*/true);
call 0 never executed
- #####: 3823: sDictPushTiny(dict, key, (smallt *) a);
+ #####: 3893: sDictPushTiny(dict, key, (smallt *) a);
call 0 never executed
- -: 3824: }
- #####: 3825: break;
- -: 3826: }
- -: 3827:}
- -: 3828:
- -: 3829:/**
- -: 3830: * deserialize array from data
- -: 3831: *
- -: 3832: * a new array is allocated
- -: 3833: *
- -: 3834: * \param
- -: 3835: * array holding the elements
- -: 3836: * data serialized dictionary
- -: 3837: */
+ -: 3894: }
+ #####: 3895: break;
+ -: 3896: }
+ -: 3897:}
+ -: 3898:
+ -: 3899:/**
+ -: 3900: * deserialize array from data
+ -: 3901: *
+ -: 3902: * a new array is allocated
+ -: 3903: *
+ -: 3904: * \param
+ -: 3905: * array holding the elements
+ -: 3906: * data serialized dictionary
+ -: 3907: */
function arrayNetDeserialLevel2 called 0 returned 0% blocks executed 0%
- #####: 3838:internal void arrayNetDeserialLevel2(sArrayt **array, u8 **data, contextt *ctx, bool packed) {
- #####: 3839: sUndefinedt *u = NULL;
- #####: 3840: sBoolt *bo = NULL;
- #####: 3841: double *D = NULL;
- #####: 3842: sDoublet *Do = NULL;
- #####: 3843: sDictt *d = NULL;
- #####: 3844: sIntt *io = NULL;
- #####: 3845: char *s = NULL;
- #####: 3846: sStringt *so = NULL;
- #####: 3847: sArrayt *a = NULL;
- #####: 3848: sBytest *B = NULL;
- -: 3849: uint32_t count;
- -: 3850: uint32_t arrayCount;
- -: 3851:
- #####: 3852: if (packed) {
+ #####: 3908:internal void arrayNetDeserialLevel2(sArrayt **array, u8 **data, contextt *ctx, bool packed) {
+ #####: 3909: sUndefinedt *u = NULL;
+ #####: 3910: sBoolt *bo = NULL;
+ #####: 3911: double *D = NULL;
+ #####: 3912: sDoublet *Do = NULL;
+ #####: 3913: sDictt *d = NULL;
+ #####: 3914: sIntt *io = NULL;
+ #####: 3915: char *s = NULL;
+ #####: 3916: sStringt *so = NULL;
+ #####: 3917: sArrayt *a = NULL;
+ #####: 3918: sBytest *B = NULL;
+ -: 3919: uint32_t count;
+ -: 3920: uint32_t arrayCount;
+ -: 3921:
+ #####: 3922: if (packed) {
branch 0 never executed
branch 1 never executed
- #####: 3853: arrayCount = varintToUint(data);
+ #####: 3923: arrayCount = varintToUint(data);
call 0 never executed
- -: 3854: }
- -: 3855: else {
- #####: 3856: if (ctx->nibble == lowNbl) {
+ -: 3924: }
+ -: 3925: else {
+ #####: 3926: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3857: arrayCount = netTypeVarintToUint(data);
+ #####: 3927: arrayCount = netTypeVarintToUint(data);
call 0 never executed
- -: 3858: }
- -: 3859: else {
- -: 3860: // high nibble
- #####: 3861: readTypeInHighNbl;
+ -: 3928: }
+ -: 3929: else {
+ -: 3930: // high nibble
+ #####: 3931: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3862: arrayCount = varintToUint(data);
+ #####: 3932: arrayCount = varintToUint(data);
call 0 never executed
- -: 3863: }
- -: 3864: }
- -: 3865:
- #####: 3866: if (!arrayCount) {
+ -: 3933: }
+ -: 3934: }
+ -: 3935:
+ #####: 3936: if (!arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 3867: *array = allocSArray();;
+ #####: 3937: *array = allocSArray();;
call 0 never executed
- #####: 3868: ret;
- -: 3869: }
- -: 3870:
- #####: 3871: loop(arrayCount) {
+ #####: 3938: ret;
+ -: 3939: }
+ -: 3940:
+ #####: 3941: loop(arrayCount) {
branch 0 never executed
branch 1 never executed
- -: 3872: char type;
- #####: 3873: if (ctx->nibble == lowNbl) {
+ -: 3942: char type;
+ #####: 3943: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3874: type = (**data) & 0xF;
- -: 3875: }
- -: 3876: else {
- -: 3877: // high nibble
- #####: 3878: type = (*ctx->nblAddr) >> 4;
- -: 3879: }
- -: 3880:
- #####: 3881: switch(type) {
+ #####: 3944: type = (**data) & 0xF;
+ -: 3945: }
+ -: 3946: else {
+ -: 3947: // high nibble
+ #####: 3948: type = (*ctx->nblAddr) >> 4;
+ -: 3949: }
+ -: 3950:
+ #####: 3951: switch(type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -5729,251 +5799,251 @@ branch 7 never executed
branch 8 never executed
branch 9 never executed
branch 10 never executed
- -: 3882: case S_UNDEFINED:
- #####: 3883: if (ctx->nibble == lowNbl) {
+ -: 3952: case S_UNDEFINED:
+ #####: 3953: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3884: readTypeOnly;
- -: 3885: }
- -: 3886: else {
- -: 3887: // high nibble
- #####: 3888: readTypeInHighNbl;
+ #####: 3954: readTypeOnly;
+ -: 3955: }
+ -: 3956: else {
+ -: 3957: // high nibble
+ #####: 3958: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- -: 3889: }
- #####: 3890: u = allocSUndefined();
+ -: 3959: }
+ #####: 3960: u = allocSUndefined();
call 0 never executed
- #####: 3891: sArrayPushTiny(array, (smallt *) u);
+ #####: 3961: sArrayPushTiny(array, (smallt *) u);
call 0 never executed
- #####: 3892: break;
- -: 3893: case S_BOOL:
- #####: 3894: if (!ctx->boolAddr) {
+ #####: 3962: break;
+ -: 3963: case S_BOOL:
+ #####: 3964: if (!ctx->boolAddr) {
branch 0 never executed
branch 1 never executed
- -: 3895: // new packed bools
- #####: 3896: if (ctx->nibble == lowNbl) {
+ -: 3965: // new packed bools
+ #####: 3966: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3897: read4bPackedBool;
- #####: 3898: bo = allocSBool((*ctx->boolAddr) & 0x10);
+ #####: 3967: read4bPackedBool;
+ #####: 3968: bo = allocSBool((*ctx->boolAddr) & 0x10);
call 0 never executed
- -: 3899: }
- -: 3900: else {
- -: 3901: // high nibble
- #####: 3902: readTypeInHighNbl;
+ -: 3969: }
+ -: 3970: else {
+ -: 3971: // high nibble
+ #####: 3972: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3903: read8bPackedBool;
- #####: 3904: bo = allocSBool((*ctx->boolAddr) & 0x1);
+ #####: 3973: read8bPackedBool;
+ #####: 3974: bo = allocSBool((*ctx->boolAddr) & 0x1);
call 0 never executed
- -: 3905: }
- -: 3906: }
- -: 3907: else {
- -: 3908: // there was a bool before this one, read bits in nibbles
- #####: 3909: if (ctx->nibble == lowNbl) {
+ -: 3975: }
+ -: 3976: }
+ -: 3977: else {
+ -: 3978: // there was a bool before this one, read bits in nibbles
+ #####: 3979: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3910: if (ctx->boolShift == 8) {
+ #####: 3980: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- #####: 3911: read4bPackedBool;
- #####: 3912: bo = allocSBool((*ctx->boolAddr) & 0x10);
+ #####: 3981: read4bPackedBool;
+ #####: 3982: bo = allocSBool((*ctx->boolAddr) & 0x10);
call 0 never executed
- -: 3913: }
- -: 3914: else {
- #####: 3915: readTypeOnly;
- #####: 3916: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+ -: 3983: }
+ -: 3984: else {
+ #####: 3985: readTypeOnly;
+ #####: 3986: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
call 0 never executed
- -: 3917: }
- -: 3918: }
- -: 3919: else {
- -: 3920: // high nibble
- #####: 3921: readTypeInHighNbl;
+ -: 3987: }
+ -: 3988: }
+ -: 3989: else {
+ -: 3990: // high nibble
+ #####: 3991: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3922: if (ctx->boolShift == 8) {
+ #####: 3992: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- #####: 3923: read8bPackedBool;
- #####: 3924: bo = allocSBool((*ctx->boolAddr) & 0x1);
+ #####: 3993: read8bPackedBool;
+ #####: 3994: bo = allocSBool((*ctx->boolAddr) & 0x1);
call 0 never executed
- -: 3925: }
- -: 3926: else {
- #####: 3927: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+ -: 3995: }
+ -: 3996: else {
+ #####: 3997: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
call 0 never executed
- -: 3928: }
- -: 3929: }
- -: 3930: }
- #####: 3931: sArrayPushTiny(array, (smallt *) bo);
+ -: 3998: }
+ -: 3999: }
+ -: 4000: }
+ #####: 4001: sArrayPushTiny(array, (smallt *) bo);
call 0 never executed
- #####: 3932: break;
- -: 3933: case S_DICT:
- #####: 3934: d = NULL;
- #####: 3935: dictNetDeserialLevel2(&d, data, ctx, /*packed=*/false);
+ #####: 4002: break;
+ -: 4003: case S_DICT:
+ #####: 4004: d = NULL;
+ #####: 4005: dictNetDeserialLevel2(&d, data, ctx, /*packed=*/false);
call 0 never executed
- #####: 3936: sArrayPushTiny(array, (smallt *) d);
+ #####: 4006: sArrayPushTiny(array, (smallt *) d);
call 0 never executed
- #####: 3937: break;
- -: 3938: case S_DOUBLE:
- #####: 3939: if (ctx->nibble == lowNbl) {
+ #####: 4007: break;
+ -: 4008: case S_DOUBLE:
+ #####: 4009: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3940: readTypeOnly;
- -: 3941: }
- -: 3942: else {
- -: 3943: // high nibble
- #####: 3944: readTypeInHighNbl;
+ #####: 4010: readTypeOnly;
+ -: 4011: }
+ -: 4012: else {
+ -: 4013: // high nibble
+ #####: 4014: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- -: 3945: }
- #####: 3946: D = (double *)(*data);
- #####: 3947: *data += sizeof(double);
- #####: 3948: Do = allocSDouble(*D);
+ -: 4015: }
+ #####: 4016: D = (double *)(*data);
+ #####: 4017: *data += sizeof(double);
+ #####: 4018: Do = allocSDouble(*D);
call 0 never executed
- #####: 3949: sArrayPushTiny(array, (smallt *) Do);
+ #####: 4019: sArrayPushTiny(array, (smallt *) Do);
call 0 never executed
- #####: 3950: break;
- -: 3951: case S_INT: {
- -: 3952: i64 v;
- #####: 3953: if (ctx->nibble == lowNbl) {
+ #####: 4020: break;
+ -: 4021: case S_INT: {
+ -: 4022: i64 v;
+ #####: 4023: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3954: v = netTypeVarintToUint((u8**)data);
+ #####: 4024: v = netTypeVarintToUint((u8**)data);
call 0 never executed
- -: 3955: }
- -: 3956: else {
- -: 3957: // high nibble
- #####: 3958: readTypeInHighNbl;
+ -: 4025: }
+ -: 4026: else {
+ -: 4027: // high nibble
+ #####: 4028: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3959: v = varintToUint(data);
+ #####: 4029: v = varintToUint(data);
call 0 never executed
- -: 3960: }
- #####: 3961: v = (v >> 1) ^ ((v << 63) >> 63);
- #####: 3962: io = allocSInt(v);
+ -: 4030: }
+ #####: 4031: v = (v >> 1) ^ ((v << 63) >> 63);
+ #####: 4032: io = allocSInt(v);
call 0 never executed
- #####: 3963: sArrayPushTiny(array, (smallt *) io);
+ #####: 4033: sArrayPushTiny(array, (smallt *) io);
call 0 never executed
- -: 3964: }
- #####: 3965: break;
- -: 3966: case S_STRING:
- #####: 3967: if (ctx->nibble == lowNbl) {
+ -: 4034: }
+ #####: 4035: break;
+ -: 4036: case S_STRING:
+ #####: 4037: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3968: readTypeOnly;
- -: 3969: }
- -: 3970: else {
- -: 3971: // high nibble
- #####: 3972: readTypeInHighNbl;
+ #####: 4038: readTypeOnly;
+ -: 4039: }
+ -: 4040: else {
+ -: 4041: // high nibble
+ #####: 4042: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- -: 3973: }
- #####: 3974: s = (char *)(*data);
- #####: 3975: *data += strlen(s)+1;
- #####: 3976: so = allocSStringTiny(s);
+ -: 4043: }
+ #####: 4044: s = (char *)(*data);
+ #####: 4045: *data += strlen(s)+1;
+ #####: 4046: so = allocSStringTiny(s);
call 0 never executed
- #####: 3977: sArrayPushTiny(array, (smallt *) so);
+ #####: 4047: sArrayPushTiny(array, (smallt *) so);
call 0 never executed
- #####: 3978: break;
- -: 3979: case S_ARRAY:
- #####: 3980: a = NULL;
- #####: 3981: arrayNetDeserialLevel2(&a, data, ctx, /*packed=*/false);
+ #####: 4048: break;
+ -: 4049: case S_ARRAY:
+ #####: 4050: a = NULL;
+ #####: 4051: arrayNetDeserialLevel2(&a, data, ctx, /*packed=*/false);
call 0 never executed
- #####: 3982: sArrayPushTiny(array, (smallt *) a);
+ #####: 4052: sArrayPushTiny(array, (smallt *) a);
call 0 never executed
- #####: 3983: break;
- -: 3984: case S_BYTES:
- #####: 3985: B = allocSBytes();
+ #####: 4053: break;
+ -: 4054: case S_BYTES:
+ #####: 4055: B = allocSBytes();
call 0 never executed
- #####: 3986: if (ctx->nibble == lowNbl) {
+ #####: 4056: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 3987: count = netTypeVarintToUint((u8**)data);
+ #####: 4057: count = netTypeVarintToUint((u8**)data);
call 0 never executed
- -: 3988: }
- -: 3989: else {
- -: 3990: // high nibble
- #####: 3991: readTypeInHighNbl;
+ -: 4058: }
+ -: 4059: else {
+ -: 4060: // high nibble
+ #####: 4061: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 3992: count = varintToUint((u8**)data);
+ #####: 4062: count = varintToUint((u8**)data);
call 0 never executed
- -: 3993: }
- #####: 3994: sBytesPushBuffer(&B, data, count);
+ -: 4063: }
+ #####: 4064: sBytesPushBuffer(&B, data, count);
call 0 never executed
- #####: 3995: *data += count;
- #####: 3996: sArrayPushTiny(array, (smallt *) B);
+ #####: 4065: *data += count;
+ #####: 4066: sArrayPushTiny(array, (smallt *) B);
call 0 never executed
- #####: 3997: break;
- -: 3998: case UNIFORM_DICT:
- #####: 3999: d = NULL;
- #####: 4000: uniformDictNetDeserialLevel2(&d, data, ctx, /*packed=*/false);
+ #####: 4067: break;
+ -: 4068: case UNIFORM_DICT:
+ #####: 4069: d = NULL;
+ #####: 4070: uniformDictNetDeserialLevel2(&d, data, ctx, /*packed=*/false);
call 0 never executed
- #####: 4001: sArrayPushTiny(array, (smallt *) d);
+ #####: 4071: sArrayPushTiny(array, (smallt *) d);
call 0 never executed
- #####: 4002: break;
- -: 4003: case UNIFORM_ARRAY:
- #####: 4004: a = NULL;
- #####: 4005: uniformArrayNetDeserialLevel2(&a, data, ctx, /*packed=*/false);
+ #####: 4072: break;
+ -: 4073: case UNIFORM_ARRAY:
+ #####: 4074: a = NULL;
+ #####: 4075: uniformArrayNetDeserialLevel2(&a, data, ctx, /*packed=*/false);
call 0 never executed
- #####: 4006: sArrayPushTiny(array, (smallt *) a);
+ #####: 4076: sArrayPushTiny(array, (smallt *) a);
call 0 never executed
- #####: 4007: break;
- -: 4008: }
- -: 4009: }
- -: 4010:}
- -: 4011:
+ #####: 4077: break;
+ -: 4078: }
+ -: 4079: }
+ -: 4080:}
+ -: 4081:
function uniformArrayNetDeserialLevel2 called 0 returned 0% blocks executed 0%
- #####: 4012:internal void uniformArrayNetDeserialLevel2(sArrayt **array, u8 **data, contextt *ctx, bool packed) {
- #####: 4013: sUndefinedt *u = NULL;
- #####: 4014: sBoolt *bo = NULL;
- #####: 4015: double *D = NULL;
- #####: 4016: sDoublet *Do = NULL;
- #####: 4017: sDictt *d = NULL;
- #####: 4018: sIntt *io = NULL;
- #####: 4019: char *s = NULL;
- #####: 4020: sStringt *so = NULL;
- #####: 4021: sArrayt *a = NULL;
- #####: 4022: sBytest *B = NULL;
- -: 4023: uint32_t count;
- -: 4024: uint32_t arrayCount;
- -: 4025: u8 type;
- -: 4026:
- #####: 4027: if (packed) {
+ #####: 4082:internal void uniformArrayNetDeserialLevel2(sArrayt **array, u8 **data, contextt *ctx, bool packed) {
+ #####: 4083: sUndefinedt *u = NULL;
+ #####: 4084: sBoolt *bo = NULL;
+ #####: 4085: double *D = NULL;
+ #####: 4086: sDoublet *Do = NULL;
+ #####: 4087: sDictt *d = NULL;
+ #####: 4088: sIntt *io = NULL;
+ #####: 4089: char *s = NULL;
+ #####: 4090: sStringt *so = NULL;
+ #####: 4091: sArrayt *a = NULL;
+ #####: 4092: sBytest *B = NULL;
+ -: 4093: uint32_t count;
+ -: 4094: uint32_t arrayCount;
+ -: 4095: u8 type;
+ -: 4096:
+ #####: 4097: if (packed) {
branch 0 never executed
branch 1 never executed
- #####: 4028: type = (**data) & 0xF;
- #####: 4029: arrayCount = netTypeVarintToUint(data);
+ #####: 4098: type = (**data) & 0xF;
+ #####: 4099: arrayCount = netTypeVarintToUint(data);
call 0 never executed
- -: 4030: }
- -: 4031: else {
- #####: 4032: if (ctx->nibble == lowNbl) {
+ -: 4100: }
+ -: 4101: else {
+ #####: 4102: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 4033: type = (**data) >> 4;
- #####: 4034: (*data)++;
- #####: 4035: arrayCount = varintToUint(data);
+ #####: 4103: type = (**data) >> 4;
+ #####: 4104: (*data)++;
+ #####: 4105: arrayCount = varintToUint(data);
call 0 never executed
- -: 4036: }
- -: 4037: else {
- #####: 4038: readTypeInHighNbl;
+ -: 4106: }
+ -: 4107: else {
+ #####: 4108: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 4039: type = (**data) & 0xF;
- #####: 4040: arrayCount = netTypeVarintToUint(data);
+ #####: 4109: type = (**data) & 0xF;
+ #####: 4110: arrayCount = netTypeVarintToUint(data);
call 0 never executed
- -: 4041: }
- -: 4042: }
- -: 4043:
- #####: 4044: if (!arrayCount) {
+ -: 4111: }
+ -: 4112: }
+ -: 4113:
+ #####: 4114: if (!arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 4045: *array = allocSArray();;
+ #####: 4115: *array = allocSArray();;
call 0 never executed
- #####: 4046: ret;
- -: 4047: }
- -: 4048:
- #####: 4049: switch(type) {
+ #####: 4116: ret;
+ -: 4117: }
+ -: 4118:
+ #####: 4119: switch(type) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
@@ -5985,345 +6055,349 @@ branch 7 never executed
branch 8 never executed
branch 9 never executed
branch 10 never executed
- -: 4050: case S_UNDEFINED:
- #####: 4051: loop(arrayCount) {
+ -: 4120: case S_UNDEFINED:
+ #####: 4121: loop(arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 4052: u = allocSUndefined();
+ #####: 4122: u = allocSUndefined();
call 0 never executed
- #####: 4053: sArrayPushTiny(array, (smallt *) u);
+ #####: 4123: sArrayPushTiny(array, (smallt *) u);
call 0 never executed
- -: 4054: }
- #####: 4055: break;
- -: 4056: case S_BOOL:
- #####: 4057: loop(arrayCount) {
+ -: 4124: }
+ #####: 4125: break;
+ -: 4126: case S_BOOL:
+ #####: 4127: loop(arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 4058: if (!ctx->boolAddr) {
+ #####: 4128: if (!ctx->boolAddr) {
branch 0 never executed
branch 1 never executed
- #####: 4059: read8bPackedBool;
- #####: 4060: ctx->boolShift = 0;
- -: 4061: }
- #####: 4062: if (ctx->boolShift == 8) {
+ #####: 4129: read8bPackedBool;
+ #####: 4130: ctx->boolShift = 0;
+ -: 4131: }
+ #####: 4132: if (ctx->boolShift == 8) {
branch 0 never executed
branch 1 never executed
- #####: 4063: read8bPackedBool;
- #####: 4064: bo = allocSBool((*ctx->boolAddr) & 0x1);
+ #####: 4133: read8bPackedBool;
+ #####: 4134: bo = allocSBool((*ctx->boolAddr) & 0x1);
call 0 never executed
- -: 4065: }
- -: 4066: else {
- #####: 4067: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+ -: 4135: }
+ -: 4136: else {
+ #####: 4137: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
call 0 never executed
- -: 4068: }
- #####: 4069: sArrayPushTiny(array, (smallt *) bo);
+ -: 4138: }
+ #####: 4139: sArrayPushTiny(array, (smallt *) bo);
call 0 never executed
- -: 4070: }
- #####: 4071: break;
- -: 4072: case S_DICT:
- #####: 4073: loop(arrayCount) {
+ -: 4140: }
+ #####: 4141: break;
+ -: 4142: case S_DICT:
+ #####: 4143: loop(arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 4074: d = NULL;
- #####: 4075: dictNetDeserialLevel2(&d, data, ctx, /*packed=*/true);
+ #####: 4144: d = NULL;
+ #####: 4145: dictNetDeserialLevel2(&d, data, ctx, /*packed=*/true);
call 0 never executed
- #####: 4076: sArrayPushTiny(array, (smallt *) d);
+ #####: 4146: sArrayPushTiny(array, (smallt *) d);
call 0 never executed
- -: 4077: }
- #####: 4078: break;
- -: 4079: case S_DOUBLE:
- #####: 4080: loop(arrayCount) {
+ -: 4147: }
+ #####: 4148: break;
+ -: 4149: case S_DOUBLE:
+ #####: 4150: loop(arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 4081: D = (double *)(*data);
- #####: 4082: *data += sizeof(double);
- #####: 4083: Do = allocSDouble(*D);
+ #####: 4151: D = (double *)(*data);
+ #####: 4152: *data += sizeof(double);
+ #####: 4153: Do = allocSDouble(*D);
call 0 never executed
- #####: 4084: sArrayPushTiny(array, (smallt *) Do);
+ #####: 4154: sArrayPushTiny(array, (smallt *) Do);
call 0 never executed
- -: 4085: }
- #####: 4086: break;
- -: 4087: case S_INT:
- #####: 4088: loop(arrayCount) {
+ -: 4155: }
+ #####: 4156: break;
+ -: 4157: case S_INT:
+ #####: 4158: loop(arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 4089: i64 v = varintToUint(data);
+ #####: 4159: i64 v = varintToUint(data);
call 0 never executed
- #####: 4090: v = (v >> 1) ^ ((v << 63) >> 63);
- #####: 4091: io = allocSInt(v);
+ #####: 4160: v = (v >> 1) ^ ((v << 63) >> 63);
+ #####: 4161: io = allocSInt(v);
call 0 never executed
- #####: 4092: sArrayPushTiny(array, (smallt *) io);
+ #####: 4162: sArrayPushTiny(array, (smallt *) io);
call 0 never executed
- -: 4093: }
- #####: 4094: break;
- -: 4095: case S_STRING:
- #####: 4096: loop(arrayCount) {
+ -: 4163: }
+ #####: 4164: break;
+ -: 4165: case S_STRING:
+ #####: 4166: loop(arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 4097: s = (char *)(*data);
- #####: 4098: *data += strlen(s)+1;
- #####: 4099: so = allocSStringTiny(s);
+ #####: 4167: s = (char *)(*data);
+ #####: 4168: *data += strlen(s)+1;
+ #####: 4169: so = allocSStringTiny(s);
call 0 never executed
- #####: 4100: sArrayPushTiny(array, (smallt *) so);
+ #####: 4170: sArrayPushTiny(array, (smallt *) so);
call 0 never executed
- -: 4101: }
- #####: 4102: break;
- -: 4103: case S_ARRAY:
- #####: 4104: loop(arrayCount) {
+ -: 4171: }
+ #####: 4172: break;
+ -: 4173: case S_ARRAY:
+ #####: 4174: loop(arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 4105: a = NULL;
- #####: 4106: arrayNetDeserialLevel2(&a, data, ctx, /*packed=*/true);
+ #####: 4175: a = NULL;
+ #####: 4176: arrayNetDeserialLevel2(&a, data, ctx, /*packed=*/true);
call 0 never executed
- #####: 4107: sArrayPushTiny(array, (smallt *) a);
+ #####: 4177: sArrayPushTiny(array, (smallt *) a);
call 0 never executed
- -: 4108: }
- #####: 4109: break;
- -: 4110: case S_BYTES:
- #####: 4111: loop(arrayCount) {
+ -: 4178: }
+ #####: 4179: break;
+ -: 4180: case S_BYTES:
+ #####: 4181: loop(arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 4112: B = allocSBytes();
+ #####: 4182: B = allocSBytes();
call 0 never executed
- #####: 4113: count = varintToUint((u8**)data);
+ #####: 4183: count = varintToUint((u8**)data);
call 0 never executed
- #####: 4114: sBytesPushBuffer(&B, data, count);
+ #####: 4184: sBytesPushBuffer(&B, data, count);
call 0 never executed
- #####: 4115: *data += count;
- #####: 4116: sArrayPushTiny(array, (smallt *) B);
+ #####: 4185: *data += count;
+ #####: 4186: sArrayPushTiny(array, (smallt *) B);
call 0 never executed
- -: 4117: }
- #####: 4118: break;
- -: 4119: case UNIFORM_DICT:
- #####: 4120: loop(arrayCount) {
+ -: 4187: }
+ #####: 4188: break;
+ -: 4189: case UNIFORM_DICT:
+ #####: 4190: loop(arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 4121: d = NULL;
- #####: 4122: uniformDictNetDeserialLevel2(&d, data, ctx, /*packed=*/true);
+ #####: 4191: d = NULL;
+ #####: 4192: uniformDictNetDeserialLevel2(&d, data, ctx, /*packed=*/true);
call 0 never executed
- #####: 4123: sArrayPushTiny(array, (smallt *) d);
+ #####: 4193: sArrayPushTiny(array, (smallt *) d);
call 0 never executed
- -: 4124: }
- #####: 4125: break;
- -: 4126: case UNIFORM_ARRAY:
- #####: 4127: loop(arrayCount) {
+ -: 4194: }
+ #####: 4195: break;
+ -: 4196: case UNIFORM_ARRAY:
+ #####: 4197: loop(arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 4128: a = NULL;
- #####: 4129: uniformArrayNetDeserialLevel2(&a, data, ctx, /*packed=*/true);
+ #####: 4198: a = NULL;
+ #####: 4199: uniformArrayNetDeserialLevel2(&a, data, ctx, /*packed=*/true);
call 0 never executed
- #####: 4130: sArrayPushTiny(array, (smallt *) a);
+ #####: 4200: sArrayPushTiny(array, (smallt *) a);
call 0 never executed
- -: 4131: }
- #####: 4132: break;
- -: 4133: }
- -: 4134:}
- -: 4135:
+ -: 4201: }
+ #####: 4202: break;
+ -: 4203: }
+ -: 4204:}
+ -: 4205:
function deserialNetSerialLevel2 called 0 returned 0% blocks executed 0%
- #####: 4136:internal smallJsont* deserialNetSerialLevel2(smallJsont *self, smallBytest *data) {
- -: 4137:
- #####: 4138: if (!data) {
-branch 0 never executed
-branch 1 never executed
- #####: 4139: ret self;
- -: 4140: }
- -: 4141:
- #####: 4142: smallt *o = netDeserialLevel2(data->B);
-call 0 never executed
- -: 4143:
- #####: 4144: if (!o) {
-branch 0 never executed
-branch 1 never executed
- #####: 4145: ret self;
- -: 4146: }
- -: 4147:
- #####: 4148: freeG(self);
-call 0 never executed
- -: 4149:
- #####: 4150: setsoG(self, o);
-call 0 never executed
- -: 4151:
- #####: 4152: ret self;
- -: 4153:}
- -: 4154:
- -: 4155:// level 3
- -: 4156:
-function netDeserial called 76 returned 100% blocks executed 85%
- 76: 4157:internal smallt* netDeserial(sBytest *obj) {
- 76: 4158: smallt *r = NULL;
- 76: 4159: double *D = NULL;
- 76: 4160: char *s = NULL;
- 76: 4161: sBytest *B = NULL;
- -: 4162: uint32_t count;
- 76: 4163: char *data = NULL;
- 76: 4164: contextt ctx = {.nibble=lowNbl, .nblAddr=NULL, .boolShift = 0, .boolAddr=NULL};
- -: 4165:
- 76: 4166: switch(obj->data & 0xF) {
+ #####: 4206:internal smallJsont* deserialNetSerialLevel2(smallJsont *self, smallBytest *data) {
+ -: 4207:
+ #####: 4208: if (!data) {
+branch 0 never executed
+branch 1 never executed
+ #####: 4209: ret self;
+ -: 4210: }
+ -: 4211:
+ #####: 4212: smallt *o = netDeserialLevel2(data->B);
+call 0 never executed
+ -: 4213:
+ #####: 4214: if (!o) {
+branch 0 never executed
+branch 1 never executed
+ #####: 4215: ret self;
+ -: 4216: }
+ -: 4217:
+ #####: 4218: freeG(self);
+call 0 never executed
+ -: 4219:
+ #####: 4220: setsoG(self, o);
+call 0 never executed
+ -: 4221:
+ #####: 4222: ret self;
+ -: 4223:}
+ -: 4224:
+ -: 4225:// level 3
+ -: 4226:// like level 2, elements of identical type in a row are packed
+ -: 4227:
+ -: 4228:/**
+ -: 4229: * deserializer top function
+ -: 4230: */
+function netDeserial called 77 returned 100% blocks executed 85%
+ 77: 4231:internal smallt* netDeserial(sBytest *obj) {
+ 77: 4232: smallt *r = NULL;
+ 77: 4233: double *D = NULL;
+ 77: 4234: char *s = NULL;
+ 77: 4235: sBytest *B = NULL;
+ -: 4236: uint32_t count;
+ 77: 4237: char *data = NULL;
+ 77: 4238: contextt ctx = {.nibble=lowNbl, .nblAddr=NULL, .boolShift = 0, .boolAddr=NULL};
+ -: 4239:
+ 77: 4240: switch(obj->data & 0xF) {
branch 0 taken 1%
branch 1 taken 1%
-branch 2 taken 32%
+branch 2 taken 31%
branch 3 taken 1%
branch 4 taken 1%
branch 5 taken 1%
-branch 6 taken 32%
+branch 6 taken 31%
branch 7 taken 0%
branch 8 taken 16%
-branch 9 taken 14%
+branch 9 taken 16%
branch 10 taken 0%
- -: 4167: case S_UNDEFINED:
- 1: 4168: r = (smallt *) allocSUndefined();
-call 0 returned 100%
- 1: 4169: break;
- -: 4170: case S_BOOL:
- 1: 4171: r = (smallt *) allocSBool(obj->data & 0x10);
-call 0 returned 100%
- 1: 4172: break;
- -: 4173: case S_DICT:
- 24: 4174: data = (char *)&(obj->data);
- -: 4175: //debug - ctx.dbuf = (u8*) data;
- 24: 4176: dictNetDeserial((sDictt **)&r, (u8**)&data, &ctx, /*packed=*/false);
-call 0 returned 100%
- 24: 4177: break;
- -: 4178: case S_DOUBLE:
- 1: 4179: data = &(obj->data)+1;
- 1: 4180: D = (double *)data;
- 1: 4181: r = (smallt *) allocSDouble(*D);
-call 0 returned 100%
- 1: 4182: break;
- -: 4183: case S_INT:
- 1: 4184: data = &(obj->data);
- 1: 4185: i64 v = netTypeVarintToUint((u8**)&data);
-call 0 returned 100%
- 1: 4186: v = (v >> 1) ^ ((v << 63) >> 63);
- 1: 4187: r = (smallt *) allocSInt(v);
-call 0 returned 100%
- 1: 4188: break;
- -: 4189: case S_STRING:
- 1: 4190: s = (char *)&(obj->data)+1;
- 1: 4191: r = (smallt *) allocSStringTiny(s);
-call 0 returned 100%
- 1: 4192: break;
- -: 4193: case S_ARRAY:
- 24: 4194: data = (char *)&(obj->data);
- -: 4195: //debug - ctx.dbuf = (u8*) data;
- 24: 4196: arrayNetDeserial((sArrayt **)&r, (u8**)&data, &ctx, /*packed=*/false);
-call 0 returned 100%
- 24: 4197: break;
- -: 4198: case S_BYTES:
- #####: 4199: B = allocSBytes();
-call 0 never executed
- #####: 4200: data = &(obj->data);
- #####: 4201: count = netTypeVarintToUint((u8**)&data);
-call 0 never executed
- #####: 4202: sBytesPushBuffer(&B, data, count);
-call 0 never executed
- #####: 4203: r = (smallt *)B;
- #####: 4204: break;
- -: 4205: case UNIFORM_DICT:
- 12: 4206: data = (char *)&(obj->data);
- -: 4207: //debug - ctx.dbuf = (u8*) data;
- 12: 4208: uniformDictNetDeserial((sDictt **)&r, (u8**)&data, &ctx, /*packed=*/false);
-call 0 returned 100%
- 12: 4209: break;
- -: 4210: case UNIFORM_ARRAY:
- 11: 4211: data = (char *)&(obj->data);
- -: 4212: //debug - ctx.dbuf = (u8*) data;
- 11: 4213: uniformArrayNetDeserial((sArrayt **)&r, (u8**)&data, &ctx, /*packed=*/false);
-call 0 returned 100%
- 11: 4214: break;
- -: 4215: }
- -: 4216:
- 76: 4217: ret r;
- -: 4218:}
- -: 4219:
- -: 4220:/**
- -: 4221: * deserialize dictionary from data
- -: 4222: *
- -: 4223: * a new dictionary is allocated
- -: 4224: *
- -: 4225: * \param
- -: 4226: * dict dictionary holding the elements
- -: 4227: * data serialized dictionary
- -: 4228: */
+ -: 4241: case S_UNDEFINED:
+ 1: 4242: r = (smallt *) allocSUndefined();
+call 0 returned 100%
+ 1: 4243: break;
+ -: 4244: case S_BOOL:
+ 1: 4245: r = (smallt *) allocSBool(obj->data & 0x10);
+call 0 returned 100%
+ 1: 4246: break;
+ -: 4247: case S_DICT:
+ 24: 4248: data = (char *)&(obj->data);
+ -: 4249: //debug - ctx.dbuf = (u8*) data;
+ 24: 4250: dictNetDeserial((sDictt **)&r, (u8**)&data, &ctx, /*packed=*/false);
+call 0 returned 100%
+ 24: 4251: break;
+ -: 4252: case S_DOUBLE:
+ 1: 4253: data = &(obj->data)+1;
+ 1: 4254: D = (double *)data;
+ 1: 4255: r = (smallt *) allocSDouble(*D);
+call 0 returned 100%
+ 1: 4256: break;
+ -: 4257: case S_INT:
+ 1: 4258: data = &(obj->data);
+ 1: 4259: i64 v = netTypeVarintToUint((u8**)&data);
+call 0 returned 100%
+ 1: 4260: v = (v >> 1) ^ ((v << 63) >> 63);
+ 1: 4261: r = (smallt *) allocSInt(v);
+call 0 returned 100%
+ 1: 4262: break;
+ -: 4263: case S_STRING:
+ 1: 4264: s = (char *)&(obj->data)+1;
+ 1: 4265: r = (smallt *) allocSStringTiny(s);
+call 0 returned 100%
+ 1: 4266: break;
+ -: 4267: case S_ARRAY:
+ 24: 4268: data = (char *)&(obj->data);
+ -: 4269: //debug - ctx.dbuf = (u8*) data;
+ 24: 4270: arrayNetDeserial((sArrayt **)&r, (u8**)&data, &ctx, /*packed=*/false);
+call 0 returned 100%
+ 24: 4271: break;
+ -: 4272: case S_BYTES:
+ #####: 4273: B = allocSBytes();
+call 0 never executed
+ #####: 4274: data = &(obj->data);
+ #####: 4275: count = netTypeVarintToUint((u8**)&data);
+call 0 never executed
+ #####: 4276: sBytesPushBuffer(&B, data, count);
+call 0 never executed
+ #####: 4277: r = (smallt *)B;
+ #####: 4278: break;
+ -: 4279: case UNIFORM_DICT:
+ 12: 4280: data = (char *)&(obj->data);
+ -: 4281: //debug - ctx.dbuf = (u8*) data;
+ 12: 4282: uniformDictNetDeserial((sDictt **)&r, (u8**)&data, &ctx, /*packed=*/false);
+call 0 returned 100%
+ 12: 4283: break;
+ -: 4284: case UNIFORM_ARRAY:
+ 12: 4285: data = (char *)&(obj->data);
+ -: 4286: //debug - ctx.dbuf = (u8*) data;
+ 12: 4287: uniformArrayNetDeserial((sArrayt **)&r, (u8**)&data, &ctx, /*packed=*/false);
+call 0 returned 100%
+ 12: 4288: break;
+ -: 4289: }
+ -: 4290:
+ 77: 4291: ret r;
+ -: 4292:}
+ -: 4293:
+ -: 4294:/**
+ -: 4295: * deserialize dictionary from data
+ -: 4296: *
+ -: 4297: * a new dictionary is allocated
+ -: 4298: *
+ -: 4299: * \param
+ -: 4300: * dict dictionary holding the elements
+ -: 4301: * data serialized dictionary
+ -: 4302: */
function dictNetDeserial called 54 returned 100% blocks executed 78%
- 54: 4229:internal void dictNetDeserial(sDictt **dict, u8 **data, contextt *ctx, bool packed) {
- 54: 4230: sUndefinedt *u = NULL;
- 54: 4231: sBoolt *bo = NULL;
- 54: 4232: double *D = NULL;
- 54: 4233: sDoublet *Do = NULL;
- 54: 4234: sDictt *d = NULL;
- 54: 4235: sIntt *io = NULL;
- 54: 4236: char *s = NULL;
- 54: 4237: sStringt *so = NULL;
- 54: 4238: sArrayt *a = NULL;
- 54: 4239: sBytest *B = NULL;
- -: 4240: uint32_t count;
- -: 4241: uint32_t dictCount;
- -: 4242:
- 54: 4243: if (packed) {
+ 54: 4303:internal void dictNetDeserial(sDictt **dict, u8 **data, contextt *ctx, bool packed) {
+ 54: 4304: sUndefinedt *u = NULL;
+ 54: 4305: sBoolt *bo = NULL;
+ 54: 4306: double *D = NULL;
+ 54: 4307: sDoublet *Do = NULL;
+ 54: 4308: sDictt *d = NULL;
+ 54: 4309: sIntt *io = NULL;
+ 54: 4310: char *s = NULL;
+ 54: 4311: sStringt *so = NULL;
+ 54: 4312: sArrayt *a = NULL;
+ 54: 4313: sBytest *B = NULL;
+ -: 4314: uint32_t count;
+ -: 4315: uint32_t dictCount;
+ -: 4316:
+ 54: 4317: if (packed) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 27: 4244: dictCount = varintToUint(data);
+ 27: 4318: dictCount = varintToUint(data);
call 0 returned 100%
- -: 4245: }
- -: 4246: else {
- 27: 4247: if (ctx->nibble == lowNbl) {
+ -: 4319: }
+ -: 4320: else {
+ 27: 4321: if (ctx->nibble == lowNbl) {
branch 0 taken 93% (fallthrough)
branch 1 taken 7%
- 25: 4248: dictCount = netTypeVarintToUint(data);
-call 0 returned 100%
- -: 4249: }
- -: 4250: else {
- -: 4251: // high nibble
- -: 4252: // type = *(ctx->dbuf + ctx->nblOffset) >> 4;
- -: 4253: #define readTypeInHighNbl\
- -: 4254: ctx->nibble = lowNbl;\
- -: 4255: if (ctx->nblAddr == *data)\
- -: 4256: /* data points to the type, next byte is count */\
- -: 4257: (*data)++
- 2: 4258: readTypeInHighNbl;
+ 25: 4322: dictCount = netTypeVarintToUint(data);
+call 0 returned 100%
+ -: 4323: }
+ -: 4324: else {
+ -: 4325: // high nibble
+ -: 4326: // type = *(ctx->dbuf + ctx->nblOffset) >> 4;
+ -: 4327: #define readTypeInHighNbl\
+ -: 4328: ctx->nibble = lowNbl;\
+ -: 4329: if (ctx->nblAddr == *data)\
+ -: 4330: /* data points to the type, next byte is count */\
+ -: 4331: (*data)++
+ 2: 4332: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 2: 4259: dictCount = varintToUint(data);
+ 2: 4333: dictCount = varintToUint(data);
call 0 returned 100%
- -: 4260: }
- -: 4261: }
- -: 4262:
- 54: 4263: if (!dictCount) {
+ -: 4334: }
+ -: 4335: }
+ -: 4336:
+ 54: 4337: if (!dictCount) {
branch 0 taken 19% (fallthrough)
branch 1 taken 81%
- 10: 4264: *dict = allocSDict();
-call 0 returned 100%
- 10: 4265: ret;
- -: 4266: }
- -: 4267:
- 44: 4268: bool inPack = false;
- -: 4269: u8 packedType;
- -: 4270: size_t packCount;
- 200: 4271: loop(dictCount) {
+ 10: 4338: *dict = allocSDict();
+call 0 returned 100%
+ 10: 4339: ret;
+ -: 4340: }
+ -: 4341:
+ 44: 4342: bool inPack = false;
+ -: 4343: u8 packedType;
+ -: 4344: size_t packCount;
+ 200: 4345: loop(dictCount) {
branch 0 taken 78%
branch 1 taken 22% (fallthrough)
- 156: 4272: char *key = (char*)*data;
- 156: 4273: *data += strlen(key)+1;
- -: 4274: char type;
- 156: 4275: if (inPack) {
+ 156: 4346: char *key = (char*)*data;
+ 156: 4347: *data += strlen(key)+1;
+ -: 4348: char type;
+ 156: 4349: if (inPack) {
branch 0 taken 24% (fallthrough)
branch 1 taken 76%
- 38: 4276: type = packedType;
- -: 4277: }
- -: 4278: else {
- 118: 4279: if (ctx->nibble == lowNbl) {
+ 38: 4350: type = packedType;
+ -: 4351: }
+ -: 4352: else {
+ 118: 4353: if (ctx->nibble == lowNbl) {
branch 0 taken 67% (fallthrough)
branch 1 taken 33%
- 79: 4280: type = (**data) & 0xF;
- -: 4281: }
- -: 4282: else {
- -: 4283: // high nibble
- 39: 4284: type = (*ctx->nblAddr) >> 4;
- -: 4285: }
- -: 4286: }
- -: 4287:
- 156: 4288: switch(type) {
+ 79: 4354: type = (**data) & 0xF;
+ -: 4355: }
+ -: 4356: else {
+ -: 4357: // high nibble
+ 39: 4358: type = (*ctx->nblAddr) >> 4;
+ -: 4359: }
+ -: 4360: }
+ -: 4361:
+ 156: 4362: switch(type) {
branch 0 taken 17%
branch 1 taken 20%
branch 2 taken 1%
@@ -6341,741 +6415,741 @@ branch 13 taken 0%
branch 14 taken 3%
branch 15 taken 3%
branch 16 taken 0%
- -: 4289: case S_UNDEFINED:
- 26: 4290: if (ctx->nibble == lowNbl) {
+ -: 4363: case S_UNDEFINED:
+ 26: 4364: if (ctx->nibble == lowNbl) {
branch 0 taken 92% (fallthrough)
branch 1 taken 8%
- -: 4291: #define readTypeOnly\
- -: 4292: ctx->nibble = highNbl;\
- -: 4293: ctx->nblAddr = *data;\
- -: 4294: (*data)++
- 24: 4295: readTypeOnly;
- -: 4296: }
- -: 4297: else {
- -: 4298: // high nibble
- 2: 4299: readTypeInHighNbl;
+ -: 4365: #define readTypeOnly\
+ -: 4366: ctx->nibble = highNbl;\
+ -: 4367: ctx->nblAddr = *data;\
+ -: 4368: (*data)++
+ 24: 4369: readTypeOnly;
+ -: 4370: }
+ -: 4371: else {
+ -: 4372: // high nibble
+ 2: 4373: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- -: 4300: }
- 26: 4301: u = allocSUndefined();
+ -: 4374: }
+ 26: 4375: u = allocSUndefined();
call 0 returned 100%
- 26: 4302: sDictPushTiny(dict, key, (smallt *) u);
+ 26: 4376: sDictPushTiny(dict, key, (smallt *) u);
call 0 returned 100%
- 26: 4303: break;
- -: 4304: case S_BOOL:
- 31: 4305: if (!ctx->boolAddr) {
+ 26: 4377: break;
+ -: 4378: case S_BOOL:
+ 31: 4379: if (!ctx->boolAddr) {
branch 0 taken 16% (fallthrough)
branch 1 taken 84%
- -: 4306: // new packed bools
- 5: 4307: if (ctx->nibble == lowNbl) {
+ -: 4380: // new packed bools
+ 5: 4381: if (ctx->nibble == lowNbl) {
branch 0 taken 60% (fallthrough)
branch 1 taken 40%
- -: 4308: #define read4bPackedBool\
- -: 4309: ctx->boolShift = 5;\
- -: 4310: ctx->boolAddr = *data;\
- -: 4311: (*data)++
- 3: 4312: read4bPackedBool;
- 3: 4313: bo = allocSBool((*ctx->boolAddr) & 0x10);
-call 0 returned 100%
- -: 4314: }
- -: 4315: else {
- -: 4316: // high nibble
- 2: 4317: readTypeInHighNbl;
+ -: 4382: #define read4bPackedBool\
+ -: 4383: ctx->boolShift = 5;\
+ -: 4384: ctx->boolAddr = *data;\
+ -: 4385: (*data)++
+ 3: 4386: read4bPackedBool;
+ 3: 4387: bo = allocSBool((*ctx->boolAddr) & 0x10);
+call 0 returned 100%
+ -: 4388: }
+ -: 4389: else {
+ -: 4390: // high nibble
+ 2: 4391: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- -: 4318: #define read8bPackedBool\
- -: 4319: ctx->boolShift = 1;\
- -: 4320: ctx->boolAddr = *data;\
- -: 4321: (*data)++
- 2: 4322: read8bPackedBool;
- 2: 4323: bo = allocSBool((*ctx->boolAddr) & 0x1);
-call 0 returned 100%
- -: 4324: }
- -: 4325: }
- -: 4326: else {
- -: 4327: // there was a bool before this one, read bits in nibbles
- 26: 4328: if (ctx->nibble == lowNbl) {
+ -: 4392: #define read8bPackedBool\
+ -: 4393: ctx->boolShift = 1;\
+ -: 4394: ctx->boolAddr = *data;\
+ -: 4395: (*data)++
+ 2: 4396: read8bPackedBool;
+ 2: 4397: bo = allocSBool((*ctx->boolAddr) & 0x1);
+call 0 returned 100%
+ -: 4398: }
+ -: 4399: }
+ -: 4400: else {
+ -: 4401: // there was a bool before this one, read bits in nibbles
+ 26: 4402: if (ctx->nibble == lowNbl) {
branch 0 taken 58% (fallthrough)
branch 1 taken 42%
- 15: 4329: if (ctx->boolShift == 8) {
+ 15: 4403: if (ctx->boolShift == 8) {
branch 0 taken 7% (fallthrough)
branch 1 taken 93%
- 1: 4330: read4bPackedBool;
- 1: 4331: bo = allocSBool((*ctx->boolAddr) & 0x10);
-call 0 returned 100%
- -: 4332: }
- -: 4333: else {
- 14: 4334: readTypeOnly;
- 14: 4335: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
-call 0 returned 100%
- -: 4336: }
- -: 4337: }
- -: 4338: else {
- -: 4339: // high nibble
- 11: 4340: readTypeInHighNbl;
+ 1: 4404: read4bPackedBool;
+ 1: 4405: bo = allocSBool((*ctx->boolAddr) & 0x10);
+call 0 returned 100%
+ -: 4406: }
+ -: 4407: else {
+ 14: 4408: readTypeOnly;
+ 14: 4409: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+call 0 returned 100%
+ -: 4410: }
+ -: 4411: }
+ -: 4412: else {
+ -: 4413: // high nibble
+ 11: 4414: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 11: 4341: if (ctx->boolShift == 8) {
+ 11: 4415: if (ctx->boolShift == 8) {
branch 0 taken 18% (fallthrough)
branch 1 taken 82%
- 2: 4342: read8bPackedBool;
- 2: 4343: bo = allocSBool((*ctx->boolAddr) & 0x1);
+ 2: 4416: read8bPackedBool;
+ 2: 4417: bo = allocSBool((*ctx->boolAddr) & 0x1);
call 0 returned 100%
- -: 4344: }
- -: 4345: else {
- -: 4346: // high nibble
- 9: 4347: readTypeInHighNbl;
+ -: 4418: }
+ -: 4419: else {
+ -: 4420: // high nibble
+ 9: 4421: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 9: 4348: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+ 9: 4422: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
call 0 returned 100%
- -: 4349: }
- -: 4350: }
- -: 4351: }
- 31: 4352: sDictPushTiny(dict, key, (smallt *) bo);
+ -: 4423: }
+ -: 4424: }
+ -: 4425: }
+ 31: 4426: sDictPushTiny(dict, key, (smallt *) bo);
call 0 returned 100%
- 31: 4353: break;
- -: 4354: case S_DICT:
- 1: 4355: d = NULL;
- 1: 4356: dictNetDeserial(&d, data, ctx, /*packed=*/false);
+ 31: 4427: break;
+ -: 4428: case S_DICT:
+ 1: 4429: d = NULL;
+ 1: 4430: dictNetDeserial(&d, data, ctx, /*packed=*/false);
call 0 returned 100%
- 1: 4357: sDictPushTiny(dict, key, (smallt *) d);
+ 1: 4431: sDictPushTiny(dict, key, (smallt *) d);
call 0 returned 100%
- 1: 4358: break;
- -: 4359: case S_DOUBLE:
- 2: 4360: if (ctx->nibble == lowNbl) {
+ 1: 4432: break;
+ -: 4433: case S_DOUBLE:
+ 2: 4434: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 4361: readTypeOnly;
- -: 4362: }
- -: 4363: else {
- -: 4364: // high nibble
- 1: 4365: readTypeInHighNbl;
+ 1: 4435: readTypeOnly;
+ -: 4436: }
+ -: 4437: else {
+ -: 4438: // high nibble
+ 1: 4439: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- -: 4366: }
- 2: 4367: D = (double *)(*data);
- 2: 4368: *data += sizeof(double);
- 2: 4369: Do = allocSDouble(*D);
+ -: 4440: }
+ 2: 4441: D = (double *)(*data);
+ 2: 4442: *data += sizeof(double);
+ 2: 4443: Do = allocSDouble(*D);
call 0 returned 100%
- 2: 4370: sDictPushTiny(dict, key, (smallt *) Do);
+ 2: 4444: sDictPushTiny(dict, key, (smallt *) Do);
call 0 returned 100%
- 2: 4371: break;
- -: 4372: case S_INT: {
- -: 4373: i64 v;
- 24: 4374: if (ctx->nibble == lowNbl) {
+ 2: 4445: break;
+ -: 4446: case S_INT: {
+ -: 4447: i64 v;
+ 24: 4448: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 12: 4375: v = netTypeVarintToUint((u8**)data);
+ 12: 4449: v = netTypeVarintToUint((u8**)data);
call 0 returned 100%
- -: 4376: }
- -: 4377: else {
- -: 4378: // high nibble
- 12: 4379: readTypeInHighNbl;
+ -: 4450: }
+ -: 4451: else {
+ -: 4452: // high nibble
+ 12: 4453: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 12: 4380: v = varintToUint(data);
+ 12: 4454: v = varintToUint(data);
call 0 returned 100%
- -: 4381: }
- 24: 4382: v = (v >> 1) ^ ((v << 63) >> 63);
- 24: 4383: io = allocSInt(v);
+ -: 4455: }
+ 24: 4456: v = (v >> 1) ^ ((v << 63) >> 63);
+ 24: 4457: io = allocSInt(v);
call 0 returned 100%
- 24: 4384: sDictPushTiny(dict, key, (smallt *) io);
+ 24: 4458: sDictPushTiny(dict, key, (smallt *) io);
call 0 returned 100%
- -: 4385: }
- 24: 4386: break;
- -: 4387: case S_STRING:
- 14: 4388: if (ctx->nibble == lowNbl) {
+ -: 4459: }
+ 24: 4460: break;
+ -: 4461: case S_STRING:
+ 14: 4462: if (ctx->nibble == lowNbl) {
branch 0 taken 93% (fallthrough)
branch 1 taken 7%
- 13: 4389: readTypeOnly;
- -: 4390: }
- -: 4391: else {
- -: 4392: // high nibble
- 1: 4393: readTypeInHighNbl;
+ 13: 4463: readTypeOnly;
+ -: 4464: }
+ -: 4465: else {
+ -: 4466: // high nibble
+ 1: 4467: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- -: 4394: }
- 14: 4395: s = (char *)(*data);
- 14: 4396: *data += strlen(s)+1;
- 14: 4397: so = allocSStringTiny(s);
+ -: 4468: }
+ 14: 4469: s = (char *)(*data);
+ 14: 4470: *data += strlen(s)+1;
+ 14: 4471: so = allocSStringTiny(s);
call 0 returned 100%
- 14: 4398: sDictPushTiny(dict, key, (smallt *) so);
+ 14: 4472: sDictPushTiny(dict, key, (smallt *) so);
call 0 returned 100%
- 14: 4399: break;
- -: 4400: case S_ARRAY:
- 1: 4401: a = NULL;
- 1: 4402: arrayNetDeserial(&a, data, ctx, /*packed=*/false);
+ 14: 4473: break;
+ -: 4474: case S_ARRAY:
+ 1: 4475: a = NULL;
+ 1: 4476: arrayNetDeserial(&a, data, ctx, /*packed=*/false);
call 0 returned 100%
- 1: 4403: sDictPushTiny(dict, key, (smallt *) a);
+ 1: 4477: sDictPushTiny(dict, key, (smallt *) a);
call 0 returned 100%
- 1: 4404: break;
- -: 4405: case S_BYTES:
- #####: 4406: B = allocSBytes();
+ 1: 4478: break;
+ -: 4479: case S_BYTES:
+ #####: 4480: B = allocSBytes();
call 0 never executed
- #####: 4407: if (ctx->nibble == lowNbl) {
+ #####: 4481: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 4408: count = netTypeVarintToUint((u8**)data);
+ #####: 4482: count = netTypeVarintToUint((u8**)data);
call 0 never executed
- -: 4409: }
- -: 4410: else {
- -: 4411: // high nibble
- #####: 4412: readTypeInHighNbl;
+ -: 4483: }
+ -: 4484: else {
+ -: 4485: // high nibble
+ #####: 4486: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 4413: count = varintToUint((u8**)data);
+ #####: 4487: count = varintToUint((u8**)data);
call 0 never executed
- -: 4414: }
- #####: 4415: sBytesPushBuffer(&B, data, count);
+ -: 4488: }
+ #####: 4489: sBytesPushBuffer(&B, data, count);
call 0 never executed
- #####: 4416: *data += count;
- #####: 4417: sDictPushTiny(dict, key, (smallt *) B);
+ #####: 4490: *data += count;
+ #####: 4491: sDictPushTiny(dict, key, (smallt *) B);
call 0 never executed
- #####: 4418: break;
- -: 4419: case PK_DICT:
- 15: 4420: if (!inPack) {
+ #####: 4492: break;
+ -: 4493: case PK_DICT:
+ 15: 4494: if (!inPack) {
branch 0 taken 20% (fallthrough)
branch 1 taken 80%
- 3: 4421: inPack = true;
- 3: 4422: if (ctx->nibble == lowNbl) {
+ 3: 4495: inPack = true;
+ 3: 4496: if (ctx->nibble == lowNbl) {
branch 0 taken 67% (fallthrough)
branch 1 taken 33%
- 2: 4423: packCount = netTypeVarintToUint((u8**)data);
+ 2: 4497: packCount = netTypeVarintToUint((u8**)data);
call 0 returned 100%
- -: 4424: }
- -: 4425: else {
- -: 4426: // high nibble
- 1: 4427: readTypeInHighNbl;
+ -: 4498: }
+ -: 4499: else {
+ -: 4500: // high nibble
+ 1: 4501: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 1: 4428: packCount = varintToUint((u8**)data);
+ 1: 4502: packCount = varintToUint((u8**)data);
call 0 returned 100%
- -: 4429: }
- 3: 4430: packedType = PK_DICT;
- -: 4431: }
- -: 4432:
- 15: 4433: d = NULL;
- 15: 4434: dictNetDeserial(&d, data, ctx, /*packed=*/true);
+ -: 4503: }
+ 3: 4504: packedType = PK_DICT;
+ -: 4505: }
+ -: 4506:
+ 15: 4507: d = NULL;
+ 15: 4508: dictNetDeserial(&d, data, ctx, /*packed=*/true);
call 0 returned 100%
- 15: 4435: sDictPushTiny(dict, key, (smallt *) d);
+ 15: 4509: sDictPushTiny(dict, key, (smallt *) d);
call 0 returned 100%
- -: 4436: // stop unpacking when packCount == 0
- 15: 4437: packCount--;
- 15: 4438: if (!packCount) inPack = false;
+ -: 4510: // stop unpacking when packCount == 0
+ 15: 4511: packCount--;
+ 15: 4512: if (!packCount) inPack = false;
branch 0 taken 20% (fallthrough)
branch 1 taken 80%
- 15: 4439: break;
- -: 4440: case PK_DOUBLE:
- 10: 4441: if (!inPack) {
+ 15: 4513: break;
+ -: 4514: case PK_DOUBLE:
+ 10: 4515: if (!inPack) {
branch 0 taken 20% (fallthrough)
branch 1 taken 80%
- 2: 4442: inPack = true;
- 2: 4443: if (ctx->nibble == lowNbl) {
+ 2: 4516: inPack = true;
+ 2: 4517: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 4444: packCount = netTypeVarintToUint((u8**)data);
+ 1: 4518: packCount = netTypeVarintToUint((u8**)data);
call 0 returned 100%
- -: 4445: }
- -: 4446: else {
- -: 4447: // high nibble
- 1: 4448: readTypeInHighNbl;
+ -: 4519: }
+ -: 4520: else {
+ -: 4521: // high nibble
+ 1: 4522: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 1: 4449: packCount = varintToUint((u8**)data);
+ 1: 4523: packCount = varintToUint((u8**)data);
call 0 returned 100%
- -: 4450: }
- 2: 4451: packedType = PK_DOUBLE;
- -: 4452: }
- -: 4453:
- 10: 4454: D = (double *)(*data);
- 10: 4455: *data += sizeof(double);
- 10: 4456: Do = allocSDouble(*D);
-call 0 returned 100%
- 10: 4457: sDictPushTiny(dict, key, (smallt *) Do);
-call 0 returned 100%
- -: 4458: // stop unpacking when packCount == 0
- 10: 4459: packCount--;
- 10: 4460: if (!packCount) inPack = false;
+ -: 4524: }
+ 2: 4525: packedType = PK_DOUBLE;
+ -: 4526: }
+ -: 4527:
+ 10: 4528: D = (double *)(*data);
+ 10: 4529: *data += sizeof(double);
+ 10: 4530: Do = allocSDouble(*D);
+call 0 returned 100%
+ 10: 4531: sDictPushTiny(dict, key, (smallt *) Do);
+call 0 returned 100%
+ -: 4532: // stop unpacking when packCount == 0
+ 10: 4533: packCount--;
+ 10: 4534: if (!packCount) inPack = false;
branch 0 taken 20% (fallthrough)
branch 1 taken 80%
- 10: 4461: break;
- -: 4462: case PK_INT:
- 8: 4463: if (!inPack) {
+ 10: 4535: break;
+ -: 4536: case PK_INT:
+ 8: 4537: if (!inPack) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 2: 4464: inPack = true;
- 2: 4465: if (ctx->nibble == lowNbl) {
+ 2: 4538: inPack = true;
+ 2: 4539: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 4466: packCount = netTypeVarintToUint((u8**)data);
+ 1: 4540: packCount = netTypeVarintToUint((u8**)data);
call 0 returned 100%
- -: 4467: }
- -: 4468: else {
- -: 4469: // high nibble
- 1: 4470: readTypeInHighNbl;
+ -: 4541: }
+ -: 4542: else {
+ -: 4543: // high nibble
+ 1: 4544: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 1: 4471: packCount = varintToUint((u8**)data);
+ 1: 4545: packCount = varintToUint((u8**)data);
call 0 returned 100%
- -: 4472: }
- 2: 4473: packedType = PK_INT;
- -: 4474: }
- -: 4475:
- 8: 4476: i64 v = varintToUint(data);
+ -: 4546: }
+ 2: 4547: packedType = PK_INT;
+ -: 4548: }
+ -: 4549:
+ 8: 4550: i64 v = varintToUint(data);
call 0 returned 100%
- 8: 4477: v = (v >> 1) ^ ((v << 63) >> 63);
- 8: 4478: io = allocSInt(v);
+ 8: 4551: v = (v >> 1) ^ ((v << 63) >> 63);
+ 8: 4552: io = allocSInt(v);
call 0 returned 100%
- 8: 4479: sDictPushTiny(dict, key, (smallt *) io);
+ 8: 4553: sDictPushTiny(dict, key, (smallt *) io);
call 0 returned 100%
- -: 4480: // stop unpacking when packCount == 0
- 8: 4481: packCount--;
- 8: 4482: if (!packCount) inPack = false;
+ -: 4554: // stop unpacking when packCount == 0
+ 8: 4555: packCount--;
+ 8: 4556: if (!packCount) inPack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 8: 4483: break;
- -: 4484: case PK_STRING:
- 8: 4485: if (!inPack) {
+ 8: 4557: break;
+ -: 4558: case PK_STRING:
+ 8: 4559: if (!inPack) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 2: 4486: inPack = true;
- 2: 4487: if (ctx->nibble == lowNbl) {
+ 2: 4560: inPack = true;
+ 2: 4561: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 4488: packCount = netTypeVarintToUint((u8**)data);
+ 1: 4562: packCount = netTypeVarintToUint((u8**)data);
call 0 returned 100%
- -: 4489: }
- -: 4490: else {
- -: 4491: // high nibble
- 1: 4492: readTypeInHighNbl;
+ -: 4563: }
+ -: 4564: else {
+ -: 4565: // high nibble
+ 1: 4566: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 1: 4493: packCount = varintToUint((u8**)data);
+ 1: 4567: packCount = varintToUint((u8**)data);
call 0 returned 100%
- -: 4494: }
- 2: 4495: packedType = PK_STRING;
- -: 4496: }
- -: 4497:
- 8: 4498: s = (char *)(*data);
- 8: 4499: *data += strlen(s)+1;
- 8: 4500: so = allocSStringTiny(s);
+ -: 4568: }
+ 2: 4569: packedType = PK_STRING;
+ -: 4570: }
+ -: 4571:
+ 8: 4572: s = (char *)(*data);
+ 8: 4573: *data += strlen(s)+1;
+ 8: 4574: so = allocSStringTiny(s);
call 0 returned 100%
- 8: 4501: sDictPushTiny(dict, key, (smallt *) so);
+ 8: 4575: sDictPushTiny(dict, key, (smallt *) so);
call 0 returned 100%
- -: 4502: // stop unpacking when packCount == 0
- 8: 4503: packCount--;
- 8: 4504: if (!packCount) inPack = false;
+ -: 4576: // stop unpacking when packCount == 0
+ 8: 4577: packCount--;
+ 8: 4578: if (!packCount) inPack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 8: 4505: break;
- -: 4506: case PK_ARRAY:
- 8: 4507: if (!inPack) {
+ 8: 4579: break;
+ -: 4580: case PK_ARRAY:
+ 8: 4581: if (!inPack) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 2: 4508: inPack = true;
- 2: 4509: if (ctx->nibble == lowNbl) {
+ 2: 4582: inPack = true;
+ 2: 4583: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 4510: packCount = netTypeVarintToUint((u8**)data);
+ 1: 4584: packCount = netTypeVarintToUint((u8**)data);
call 0 returned 100%
- -: 4511: }
- -: 4512: else {
- -: 4513: // high nibble
- 1: 4514: readTypeInHighNbl;
+ -: 4585: }
+ -: 4586: else {
+ -: 4587: // high nibble
+ 1: 4588: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 1: 4515: packCount = varintToUint((u8**)data);
+ 1: 4589: packCount = varintToUint((u8**)data);
call 0 returned 100%
- -: 4516: }
- 2: 4517: packedType = PK_ARRAY;
- -: 4518: }
- -: 4519:
- 8: 4520: a = NULL;
- 8: 4521: arrayNetDeserial(&a, data, ctx, /*packed=*/true);
+ -: 4590: }
+ 2: 4591: packedType = PK_ARRAY;
+ -: 4592: }
+ -: 4593:
+ 8: 4594: a = NULL;
+ 8: 4595: arrayNetDeserial(&a, data, ctx, /*packed=*/true);
call 0 returned 100%
- 8: 4522: sDictPushTiny(dict, key, (smallt *) a);
+ 8: 4596: sDictPushTiny(dict, key, (smallt *) a);
call 0 returned 100%
- -: 4523: // stop unpacking when packCount == 0
- 8: 4524: packCount--;
- 8: 4525: if (!packCount) inPack = false;
+ -: 4597: // stop unpacking when packCount == 0
+ 8: 4598: packCount--;
+ 8: 4599: if (!packCount) inPack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 8: 4526: break;
- -: 4527: case PK_BYTES:
- #####: 4528: if (!inPack) {
-branch 0 never executed
-branch 1 never executed
- #####: 4529: inPack = true;
- #####: 4530: if (ctx->nibble == lowNbl) {
-branch 0 never executed
-branch 1 never executed
- #####: 4531: packCount = netTypeVarintToUint((u8**)data);
-call 0 never executed
- -: 4532: }
- -: 4533: else {
- -: 4534: // high nibble
- #####: 4535: readTypeInHighNbl;
-branch 0 never executed
-branch 1 never executed
- #####: 4536: packCount = varintToUint((u8**)data);
-call 0 never executed
- -: 4537: }
- #####: 4538: packedType = PK_BYTES;
- -: 4539: }
- -: 4540:
- #####: 4541: B = allocSBytes();
-call 0 never executed
- #####: 4542: count = varintToUint((u8**)data);
-call 0 never executed
- #####: 4543: sBytesPushBuffer(&B, data, count);
-call 0 never executed
- #####: 4544: *data += count;
- #####: 4545: sDictPushTiny(dict, key, (smallt *) B);
-call 0 never executed
- -: 4546: // stop unpacking when packCount == 0
- #####: 4547: packCount--;
- #####: 4548: if (!packCount) inPack = false;
-branch 0 never executed
-branch 1 never executed
- #####: 4549: break;
- -: 4550: case UNIFORM_DICT:
- 4: 4551: d = NULL;
- 4: 4552: uniformDictNetDeserial(&d, data, ctx, /*packed=*/false);
-call 0 returned 100%
- 4: 4553: sDictPushTiny(dict, key, (smallt *) d);
-call 0 returned 100%
- 4: 4554: break;
- -: 4555: case UNIFORM_ARRAY:
- 4: 4556: a = NULL;
- 4: 4557: uniformArrayNetDeserial(&a, data, ctx, /*packed=*/false);
-call 0 returned 100%
- 4: 4558: sDictPushTiny(dict, key, (smallt *) a);
-call 0 returned 100%
- 4: 4559: break;
- -: 4560: }
- -: 4561: }
- -: 4562:}
- -: 4563:
- -: 4564:/**
- -: 4565: * deserialize dictionary from data
- -: 4566: *
- -: 4567: * a new dictionary is allocated
- -: 4568: *
- -: 4569: * \param
- -: 4570: * dict dictionary holding the elements
- -: 4571: * data serialized dictionary
- -: 4572: */
-function uniformDictNetDeserial called 22 returned 100% blocks executed 87%
- 22: 4573:internal void uniformDictNetDeserial(sDictt **dict, u8 **data, contextt *ctx, bool packed) {
- 22: 4574: sUndefinedt *u = NULL;
- 22: 4575: sBoolt *bo = NULL;
- 22: 4576: double *D = NULL;
- 22: 4577: sDoublet *Do = NULL;
- 22: 4578: sDictt *d = NULL;
- 22: 4579: sIntt *io = NULL;
- 22: 4580: char *s = NULL;
- 22: 4581: sStringt *so = NULL;
- 22: 4582: sArrayt *a = NULL;
- 22: 4583: sBytest *B = NULL;
- -: 4584: uint32_t count;
- -: 4585: uint32_t dictCount;
- -: 4586: u8 type;
- -: 4587:
- 22: 4588: if (packed) {
-branch 0 taken 18% (fallthrough)
-branch 1 taken 82%
- 4: 4589: type = (**data) & 0xF;
- 4: 4590: dictCount = netTypeVarintToUint(data);
+ 8: 4600: break;
+ -: 4601: case PK_BYTES:
+ #####: 4602: if (!inPack) {
+branch 0 never executed
+branch 1 never executed
+ #####: 4603: inPack = true;
+ #####: 4604: if (ctx->nibble == lowNbl) {
+branch 0 never executed
+branch 1 never executed
+ #####: 4605: packCount = netTypeVarintToUint((u8**)data);
+call 0 never executed
+ -: 4606: }
+ -: 4607: else {
+ -: 4608: // high nibble
+ #####: 4609: readTypeInHighNbl;
+branch 0 never executed
+branch 1 never executed
+ #####: 4610: packCount = varintToUint((u8**)data);
+call 0 never executed
+ -: 4611: }
+ #####: 4612: packedType = PK_BYTES;
+ -: 4613: }
+ -: 4614:
+ #####: 4615: B = allocSBytes();
+call 0 never executed
+ #####: 4616: count = varintToUint((u8**)data);
+call 0 never executed
+ #####: 4617: sBytesPushBuffer(&B, data, count);
+call 0 never executed
+ #####: 4618: *data += count;
+ #####: 4619: sDictPushTiny(dict, key, (smallt *) B);
+call 0 never executed
+ -: 4620: // stop unpacking when packCount == 0
+ #####: 4621: packCount--;
+ #####: 4622: if (!packCount) inPack = false;
+branch 0 never executed
+branch 1 never executed
+ #####: 4623: break;
+ -: 4624: case UNIFORM_DICT:
+ 4: 4625: d = NULL;
+ 4: 4626: uniformDictNetDeserial(&d, data, ctx, /*packed=*/false);
+call 0 returned 100%
+ 4: 4627: sDictPushTiny(dict, key, (smallt *) d);
+call 0 returned 100%
+ 4: 4628: break;
+ -: 4629: case UNIFORM_ARRAY:
+ 4: 4630: a = NULL;
+ 4: 4631: uniformArrayNetDeserial(&a, data, ctx, /*packed=*/false);
+call 0 returned 100%
+ 4: 4632: sDictPushTiny(dict, key, (smallt *) a);
+call 0 returned 100%
+ 4: 4633: break;
+ -: 4634: }
+ -: 4635: }
+ -: 4636:}
+ -: 4637:
+ -: 4638:/**
+ -: 4639: * deserialize dictionary from data
+ -: 4640: *
+ -: 4641: * a new dictionary is allocated
+ -: 4642: *
+ -: 4643: * \param
+ -: 4644: * dict dictionary holding the elements
+ -: 4645: * data serialized dictionary
+ -: 4646: */
+function uniformDictNetDeserial called 25 returned 100% blocks executed 87%
+ 25: 4647:internal void uniformDictNetDeserial(sDictt **dict, u8 **data, contextt *ctx, bool packed) {
+ 25: 4648: sUndefinedt *u = NULL;
+ 25: 4649: sBoolt *bo = NULL;
+ 25: 4650: double *D = NULL;
+ 25: 4651: sDoublet *Do = NULL;
+ 25: 4652: sDictt *d = NULL;
+ 25: 4653: sIntt *io = NULL;
+ 25: 4654: char *s = NULL;
+ 25: 4655: sStringt *so = NULL;
+ 25: 4656: sArrayt *a = NULL;
+ 25: 4657: sBytest *B = NULL;
+ -: 4658: uint32_t count;
+ -: 4659: uint32_t dictCount;
+ -: 4660: u8 type;
+ -: 4661:
+ 25: 4662: if (packed) {
+branch 0 taken 16% (fallthrough)
+branch 1 taken 84%
+ 4: 4663: type = (**data) & 0xF;
+ 4: 4664: dictCount = netTypeVarintToUint(data);
call 0 returned 100%
- -: 4591: }
- -: 4592: else {
- 18: 4593: if (ctx->nibble == lowNbl) {
-branch 0 taken 94% (fallthrough)
-branch 1 taken 6%
- 17: 4594: type = (**data) >> 4;
- 17: 4595: (*data)++;
- 17: 4596: dictCount = varintToUint(data);
+ -: 4665: }
+ -: 4666: else {
+ 21: 4667: if (ctx->nibble == lowNbl) {
+branch 0 taken 90% (fallthrough)
+branch 1 taken 10%
+ 19: 4668: type = (**data) >> 4;
+ 19: 4669: (*data)++;
+ 19: 4670: dictCount = varintToUint(data);
call 0 returned 100%
- -: 4597: }
- -: 4598: else {
- 1: 4599: readTypeInHighNbl;
+ -: 4671: }
+ -: 4672: else {
+ 2: 4673: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 1: 4600: type = (**data) & 0xF;
- 1: 4601: dictCount = netTypeVarintToUint(data);
-call 0 returned 100%
- -: 4602: }
- -: 4603: }
- -: 4604:
- 22: 4605: if (!dictCount) {
-branch 0 taken 5% (fallthrough)
-branch 1 taken 95%
- 1: 4606: *dict = allocSDict();
-call 0 returned 100%
- 1: 4607: ret;
- -: 4608: }
- -: 4609:
- -: 4610:
- 21: 4611: switch(type) {
-branch 0 taken 5%
-branch 1 taken 19%
-branch 2 taken 5%
-branch 3 taken 5%
-branch 4 taken 29%
-branch 5 taken 24%
-branch 6 taken 5%
+ 2: 4674: type = (**data) & 0xF;
+ 2: 4675: dictCount = netTypeVarintToUint(data);
+call 0 returned 100%
+ -: 4676: }
+ -: 4677: }
+ -: 4678:
+ 25: 4679: if (!dictCount) {
+branch 0 taken 4% (fallthrough)
+branch 1 taken 96%
+ 1: 4680: *dict = allocSDict();
+call 0 returned 100%
+ 1: 4681: ret;
+ -: 4682: }
+ -: 4683:
+ -: 4684:
+ 24: 4685: switch(type) {
+branch 0 taken 4%
+branch 1 taken 17%
+branch 2 taken 4%
+branch 3 taken 4%
+branch 4 taken 38%
+branch 5 taken 21%
+branch 6 taken 4%
branch 7 taken 0%
-branch 8 taken 5%
-branch 9 taken 5%
+branch 8 taken 4%
+branch 9 taken 4%
branch 10 taken 0%
- -: 4612: case S_UNDEFINED:
- 7: 4613: loop(dictCount) {
+ -: 4686: case S_UNDEFINED:
+ 7: 4687: loop(dictCount) {
branch 0 taken 86%
branch 1 taken 14% (fallthrough)
- 6: 4614: char *key = (char*)*data;
- 6: 4615: *data += strlen(key)+1;
- 6: 4616: u = allocSUndefined();
+ 6: 4688: char *key = (char*)*data;
+ 6: 4689: *data += strlen(key)+1;
+ 6: 4690: u = allocSUndefined();
call 0 returned 100%
- 6: 4617: sDictPushTiny(dict, key, (smallt *) u);
+ 6: 4691: sDictPushTiny(dict, key, (smallt *) u);
call 0 returned 100%
- -: 4618: }
- 1: 4619: break;
- -: 4620: case S_BOOL:
- 19: 4621: loop(dictCount) {
+ -: 4692: }
+ 1: 4693: break;
+ -: 4694: case S_BOOL:
+ 19: 4695: loop(dictCount) {
branch 0 taken 79%
branch 1 taken 21% (fallthrough)
- 15: 4622: char *key = (char*)*data;
- 15: 4623: *data += strlen(key)+1;
- 15: 4624: if (!ctx->boolAddr) {
+ 15: 4696: char *key = (char*)*data;
+ 15: 4697: *data += strlen(key)+1;
+ 15: 4698: if (!ctx->boolAddr) {
branch 0 taken 20% (fallthrough)
branch 1 taken 80%
- 3: 4625: read8bPackedBool;
- 3: 4626: ctx->boolShift = 0;
- -: 4627: }
- 15: 4628: if (ctx->boolShift == 8) {
+ 3: 4699: read8bPackedBool;
+ 3: 4700: ctx->boolShift = 0;
+ -: 4701: }
+ 15: 4702: if (ctx->boolShift == 8) {
branch 0 taken 7% (fallthrough)
branch 1 taken 93%
- 1: 4629: readTypeInHighNbl;
+ 1: 4703: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 1: 4630: read8bPackedBool;
- 1: 4631: bo = allocSBool((*ctx->boolAddr) & 0x1);
+ 1: 4704: read8bPackedBool;
+ 1: 4705: bo = allocSBool((*ctx->boolAddr) & 0x1);
call 0 returned 100%
- -: 4632: }
- -: 4633: else {
- -: 4634: // high nibble
- 14: 4635: readTypeInHighNbl;
+ -: 4706: }
+ -: 4707: else {
+ -: 4708: // high nibble
+ 14: 4709: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 14: 4636: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+ 14: 4710: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
call 0 returned 100%
- -: 4637: }
- 15: 4638: sDictPushTiny(dict, key, (smallt *) bo);
+ -: 4711: }
+ 15: 4712: sDictPushTiny(dict, key, (smallt *) bo);
call 0 returned 100%
- -: 4639: }
- 4: 4640: break;
- -: 4641: case S_DICT:
- 3: 4642: loop(dictCount) {
+ -: 4713: }
+ 4: 4714: break;
+ -: 4715: case S_DICT:
+ 3: 4716: loop(dictCount) {
branch 0 taken 67%
branch 1 taken 33% (fallthrough)
- 2: 4643: char *key = (char*)*data;
- 2: 4644: *data += strlen(key)+1;
- 2: 4645: d = NULL;
- 2: 4646: dictNetDeserial(&d, data, ctx, /*packed=*/true);
+ 2: 4717: char *key = (char*)*data;
+ 2: 4718: *data += strlen(key)+1;
+ 2: 4719: d = NULL;
+ 2: 4720: dictNetDeserial(&d, data, ctx, /*packed=*/true);
call 0 returned 100%
- 2: 4647: sDictPushTiny(dict, key, (smallt *) d);
+ 2: 4721: sDictPushTiny(dict, key, (smallt *) d);
call 0 returned 100%
- -: 4648: }
- 1: 4649: break;
- -: 4650: case S_DOUBLE:
- 4: 4651: loop(dictCount) {
+ -: 4722: }
+ 1: 4723: break;
+ -: 4724: case S_DOUBLE:
+ 4: 4725: loop(dictCount) {
branch 0 taken 75%
branch 1 taken 25% (fallthrough)
- 3: 4652: char *key = (char*)*data;
- 3: 4653: *data += strlen(key)+1;
- 3: 4654: D = (double *)(*data);
- 3: 4655: *data += sizeof(double);
- 3: 4656: Do = allocSDouble(*D);
-call 0 returned 100%
- 3: 4657: sDictPushTiny(dict, key, (smallt *) Do);
-call 0 returned 100%
- -: 4658: }
- 1: 4659: break;
- -: 4660: case S_INT:
- 15: 4661: loop(dictCount) {
-branch 0 taken 60%
-branch 1 taken 40% (fallthrough)
- 9: 4662: char *key = (char*)*data;
- 9: 4663: *data += strlen(key)+1;
- 9: 4664: i64 v = varintToUint(data);
-call 0 returned 100%
- 9: 4665: v = (v >> 1) ^ ((v << 63) >> 63);
- 9: 4666: io = allocSInt(v);
-call 0 returned 100%
- 9: 4667: sDictPushTiny(dict, key, (smallt *) io);
-call 0 returned 100%
- -: 4668: }
- 6: 4669: break;
- -: 4670: case S_STRING:
- 16: 4671: loop(dictCount) {
+ 3: 4726: char *key = (char*)*data;
+ 3: 4727: *data += strlen(key)+1;
+ 3: 4728: D = (double *)(*data);
+ 3: 4729: *data += sizeof(double);
+ 3: 4730: Do = allocSDouble(*D);
+call 0 returned 100%
+ 3: 4731: sDictPushTiny(dict, key, (smallt *) Do);
+call 0 returned 100%
+ -: 4732: }
+ 1: 4733: break;
+ -: 4734: case S_INT:
+ 21: 4735: loop(dictCount) {
+branch 0 taken 57%
+branch 1 taken 43% (fallthrough)
+ 12: 4736: char *key = (char*)*data;
+ 12: 4737: *data += strlen(key)+1;
+ 12: 4738: i64 v = varintToUint(data);
+call 0 returned 100%
+ 12: 4739: v = (v >> 1) ^ ((v << 63) >> 63);
+ 12: 4740: io = allocSInt(v);
+call 0 returned 100%
+ 12: 4741: sDictPushTiny(dict, key, (smallt *) io);
+call 0 returned 100%
+ -: 4742: }
+ 9: 4743: break;
+ -: 4744: case S_STRING:
+ 16: 4745: loop(dictCount) {
branch 0 taken 69%
branch 1 taken 31% (fallthrough)
- 11: 4672: char *key = (char*)*data;
- 11: 4673: *data += strlen(key)+1;
- 11: 4674: s = (char *)(*data);
- 11: 4675: *data += strlen(s)+1;
- 11: 4676: so = allocSStringTiny(s);
-call 0 returned 100%
- 11: 4677: sDictPushTiny(dict, key, (smallt *) so);
-call 0 returned 100%
- -: 4678: }
- 5: 4679: break;
- -: 4680: case S_ARRAY:
- 2: 4681: loop(dictCount) {
+ 11: 4746: char *key = (char*)*data;
+ 11: 4747: *data += strlen(key)+1;
+ 11: 4748: s = (char *)(*data);
+ 11: 4749: *data += strlen(s)+1;
+ 11: 4750: so = allocSStringTiny(s);
+call 0 returned 100%
+ 11: 4751: sDictPushTiny(dict, key, (smallt *) so);
+call 0 returned 100%
+ -: 4752: }
+ 5: 4753: break;
+ -: 4754: case S_ARRAY:
+ 2: 4755: loop(dictCount) {
branch 0 taken 50%
branch 1 taken 50% (fallthrough)
- 1: 4682: char *key = (char*)*data;
- 1: 4683: *data += strlen(key)+1;
- 1: 4684: a = NULL;
- 1: 4685: arrayNetDeserial(&a, data, ctx, /*packed=*/true);
+ 1: 4756: char *key = (char*)*data;
+ 1: 4757: *data += strlen(key)+1;
+ 1: 4758: a = NULL;
+ 1: 4759: arrayNetDeserial(&a, data, ctx, /*packed=*/true);
call 0 returned 100%
- 1: 4686: sDictPushTiny(dict, key, (smallt *) a);
+ 1: 4760: sDictPushTiny(dict, key, (smallt *) a);
call 0 returned 100%
- -: 4687: }
- 1: 4688: break;
- -: 4689: case S_BYTES:
- #####: 4690: loop(dictCount) {
+ -: 4761: }
+ 1: 4762: break;
+ -: 4763: case S_BYTES:
+ #####: 4764: loop(dictCount) {
branch 0 never executed
branch 1 never executed
- #####: 4691: char *key = (char*)*data;
- #####: 4692: *data += strlen(key)+1;
- #####: 4693: B = allocSBytes();
+ #####: 4765: char *key = (char*)*data;
+ #####: 4766: *data += strlen(key)+1;
+ #####: 4767: B = allocSBytes();
call 0 never executed
- #####: 4694: count = varintToUint((u8**)data);
+ #####: 4768: count = varintToUint((u8**)data);
call 0 never executed
- #####: 4695: sBytesPushBuffer(&B, data, count);
+ #####: 4769: sBytesPushBuffer(&B, data, count);
call 0 never executed
- #####: 4696: *data += count;
- #####: 4697: sDictPushTiny(dict, key, (smallt *) B);
+ #####: 4770: *data += count;
+ #####: 4771: sDictPushTiny(dict, key, (smallt *) B);
call 0 never executed
- -: 4698: }
- #####: 4699: break;
- -: 4700: case UNIFORM_DICT:
- 3: 4701: loop(dictCount) {
+ -: 4772: }
+ #####: 4773: break;
+ -: 4774: case UNIFORM_DICT:
+ 3: 4775: loop(dictCount) {
branch 0 taken 67%
branch 1 taken 33% (fallthrough)
- 2: 4702: char *key = (char*)*data;
- 2: 4703: *data += strlen(key)+1;
- 2: 4704: d = NULL;
- 2: 4705: uniformDictNetDeserial(&d, data, ctx, /*packed=*/true);
+ 2: 4776: char *key = (char*)*data;
+ 2: 4777: *data += strlen(key)+1;
+ 2: 4778: d = NULL;
+ 2: 4779: uniformDictNetDeserial(&d, data, ctx, /*packed=*/true);
call 0 returned 100%
- 2: 4706: sDictPushTiny(dict, key, (smallt *) d);
+ 2: 4780: sDictPushTiny(dict, key, (smallt *) d);
call 0 returned 100%
- -: 4707: }
- 1: 4708: break;
- -: 4709: case UNIFORM_ARRAY:
- 2: 4710: loop(dictCount) {
+ -: 4781: }
+ 1: 4782: break;
+ -: 4783: case UNIFORM_ARRAY:
+ 2: 4784: loop(dictCount) {
branch 0 taken 50%
branch 1 taken 50% (fallthrough)
- 1: 4711: char *key = (char*)*data;
- 1: 4712: *data += strlen(key)+1;
- 1: 4713: a = NULL;
- 1: 4714: uniformArrayNetDeserial(&a, data, ctx, /*packed=*/true);
-call 0 returned 100%
- 1: 4715: sDictPushTiny(dict, key, (smallt *) a);
-call 0 returned 100%
- -: 4716: }
- 1: 4717: break;
- -: 4718: }
- -: 4719:}
- -: 4720:
- -: 4721:/**
- -: 4722: * deserialize array from data
- -: 4723: *
- -: 4724: * a new array is allocated
- -: 4725: *
- -: 4726: * \param
- -: 4727: * array holding the elements
- -: 4728: * data serialized dictionary
- -: 4729: */
-function arrayNetDeserial called 48 returned 100% blocks executed 78%
- 48: 4730:internal void arrayNetDeserial(sArrayt **array, u8 **data, contextt *ctx, bool packed) {
- 48: 4731: sUndefinedt *u = NULL;
- 48: 4732: sBoolt *bo = NULL;
- 48: 4733: double *D = NULL;
- 48: 4734: sDoublet *Do = NULL;
- 48: 4735: sDictt *d = NULL;
- 48: 4736: sIntt *io = NULL;
- 48: 4737: char *s = NULL;
- 48: 4738: sStringt *so = NULL;
- 48: 4739: sArrayt *a = NULL;
- 48: 4740: sBytest *B = NULL;
- -: 4741: uint32_t count;
- -: 4742: uint32_t arrayCount;
- -: 4743:
- 48: 4744: if (packed) {
-branch 0 taken 44% (fallthrough)
-branch 1 taken 56%
- 21: 4745: arrayCount = varintToUint(data);
-call 0 returned 100%
- -: 4746: }
- -: 4747: else {
- 27: 4748: if (ctx->nibble == lowNbl) {
+ 1: 4785: char *key = (char*)*data;
+ 1: 4786: *data += strlen(key)+1;
+ 1: 4787: a = NULL;
+ 1: 4788: uniformArrayNetDeserial(&a, data, ctx, /*packed=*/true);
+call 0 returned 100%
+ 1: 4789: sDictPushTiny(dict, key, (smallt *) a);
+call 0 returned 100%
+ -: 4790: }
+ 1: 4791: break;
+ -: 4792: }
+ -: 4793:}
+ -: 4794:
+ -: 4795:/**
+ -: 4796: * deserialize array from data
+ -: 4797: *
+ -: 4798: * a new array is allocated
+ -: 4799: *
+ -: 4800: * \param
+ -: 4801: * array holding the elements
+ -: 4802: * data serialized dictionary
+ -: 4803: */
+function arrayNetDeserial called 49 returned 100% blocks executed 78%
+ 49: 4804:internal void arrayNetDeserial(sArrayt **array, u8 **data, contextt *ctx, bool packed) {
+ 49: 4805: sUndefinedt *u = NULL;
+ 49: 4806: sBoolt *bo = NULL;
+ 49: 4807: double *D = NULL;
+ 49: 4808: sDoublet *Do = NULL;
+ 49: 4809: sDictt *d = NULL;
+ 49: 4810: sIntt *io = NULL;
+ 49: 4811: char *s = NULL;
+ 49: 4812: sStringt *so = NULL;
+ 49: 4813: sArrayt *a = NULL;
+ 49: 4814: sBytest *B = NULL;
+ -: 4815: uint32_t count;
+ -: 4816: uint32_t arrayCount;
+ -: 4817:
+ 49: 4818: if (packed) {
+branch 0 taken 45% (fallthrough)
+branch 1 taken 55%
+ 22: 4819: arrayCount = varintToUint(data);
+call 0 returned 100%
+ -: 4820: }
+ -: 4821: else {
+ 27: 4822: if (ctx->nibble == lowNbl) {
branch 0 taken 96% (fallthrough)
branch 1 taken 4%
- 26: 4749: arrayCount = netTypeVarintToUint(data);
+ 26: 4823: arrayCount = netTypeVarintToUint(data);
call 0 returned 100%
- -: 4750: }
- -: 4751: else {
- -: 4752: // high nibble
- 1: 4753: readTypeInHighNbl;
+ -: 4824: }
+ -: 4825: else {
+ -: 4826: // high nibble
+ 1: 4827: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 1: 4754: arrayCount = varintToUint(data);
+ 1: 4828: arrayCount = varintToUint(data);
call 0 returned 100%
- -: 4755: }
- -: 4756: }
- -: 4757:
- 48: 4758: if (!arrayCount) {
+ -: 4829: }
+ -: 4830: }
+ -: 4831:
+ 49: 4832: if (!arrayCount) {
branch 0 taken 4% (fallthrough)
branch 1 taken 96%
- 2: 4759: *array = allocSArray();;
-call 0 returned 100%
- 2: 4760: ret;
- -: 4761: }
- -: 4762:
- 46: 4763: bool inPack = false;
- -: 4764: u8 packedType;
- -: 4765: size_t packCount;
- 196: 4766: loop(arrayCount) {
+ 2: 4833: *array = allocSArray();;
+call 0 returned 100%
+ 2: 4834: ret;
+ -: 4835: }
+ -: 4836:
+ 47: 4837: bool inPack = false;
+ -: 4838: u8 packedType;
+ -: 4839: size_t packCount;
+ 201: 4840: loop(arrayCount) {
branch 0 taken 77%
branch 1 taken 23% (fallthrough)
- -: 4767: char type;
- 150: 4768: if (inPack) {
-branch 0 taken 20% (fallthrough)
-branch 1 taken 80%
- 30: 4769: type = packedType;
- -: 4770: }
- -: 4771: else {
- 120: 4772: if (ctx->nibble == lowNbl) {
+ -: 4841: char type;
+ 154: 4842: if (inPack) {
+branch 0 taken 19% (fallthrough)
+branch 1 taken 81%
+ 30: 4843: type = packedType;
+ -: 4844: }
+ -: 4845: else {
+ 124: 4846: if (ctx->nibble == lowNbl) {
branch 0 taken 72% (fallthrough)
branch 1 taken 28%
- 86: 4773: type = (**data) & 0xF;
- -: 4774: }
- -: 4775: else {
- -: 4776: // high nibble
- 34: 4777: type = (*ctx->nblAddr) >> 4;
- -: 4778: }
- -: 4779: }
- -: 4780:
- 150: 4781: switch(type) {
+ 89: 4847: type = (**data) & 0xF;
+ -: 4848: }
+ -: 4849: else {
+ -: 4850: // high nibble
+ 35: 4851: type = (*ctx->nblAddr) >> 4;
+ -: 4852: }
+ -: 4853: }
+ -: 4854:
+ 154: 4855: switch(type) {
branch 0 taken 18%
-branch 1 taken 23%
+branch 1 taken 22%
branch 2 taken 1%
branch 3 taken 1%
-branch 4 taken 15%
-branch 5 taken 9%
+branch 4 taken 14%
+branch 5 taken 8%
branch 6 taken 1%
branch 7 taken 0%
branch 8 taken 5%
@@ -7084,630 +7158,630 @@ branch 10 taken 5%
branch 11 taken 5%
branch 12 taken 5%
branch 13 taken 0%
-branch 14 taken 1%
+branch 14 taken 3%
branch 15 taken 4%
branch 16 taken 0%
- -: 4782: case S_UNDEFINED:
- 27: 4783: if (ctx->nibble == lowNbl) {
+ -: 4856: case S_UNDEFINED:
+ 28: 4857: if (ctx->nibble == lowNbl) {
branch 0 taken 93% (fallthrough)
branch 1 taken 7%
- 25: 4784: readTypeOnly;
- -: 4785: }
- -: 4786: else {
- -: 4787: // high nibble
- 2: 4788: readTypeInHighNbl;
+ 26: 4858: readTypeOnly;
+ -: 4859: }
+ -: 4860: else {
+ -: 4861: // high nibble
+ 2: 4862: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- -: 4789: }
- 27: 4790: u = allocSUndefined();
+ -: 4863: }
+ 28: 4864: u = allocSUndefined();
call 0 returned 100%
- 27: 4791: sArrayPushTiny(array, (smallt *) u);
+ 28: 4865: sArrayPushTiny(array, (smallt *) u);
call 0 returned 100%
- 27: 4792: break;
- -: 4793: case S_BOOL:
- 34: 4794: if (!ctx->boolAddr) {
+ 28: 4866: break;
+ -: 4867: case S_BOOL:
+ 34: 4868: if (!ctx->boolAddr) {
branch 0 taken 18% (fallthrough)
branch 1 taken 82%
- -: 4795: // new packed bools
- 6: 4796: if (ctx->nibble == lowNbl) {
+ -: 4869: // new packed bools
+ 6: 4870: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 3: 4797: read4bPackedBool;
- 3: 4798: bo = allocSBool((*ctx->boolAddr) & 0x10);
+ 3: 4871: read4bPackedBool;
+ 3: 4872: bo = allocSBool((*ctx->boolAddr) & 0x10);
call 0 returned 100%
- -: 4799: }
- -: 4800: else {
- -: 4801: // high nibble
- 3: 4802: readTypeInHighNbl;
+ -: 4873: }
+ -: 4874: else {
+ -: 4875: // high nibble
+ 3: 4876: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 3: 4803: read8bPackedBool;
- 3: 4804: bo = allocSBool((*ctx->boolAddr) & 0x1);
-call 0 returned 100%
- -: 4805: }
- -: 4806: }
- -: 4807: else {
- -: 4808: // there was a bool before this one, read bits in nibbles
- 28: 4809: if (ctx->nibble == lowNbl) {
+ 3: 4877: read8bPackedBool;
+ 3: 4878: bo = allocSBool((*ctx->boolAddr) & 0x1);
+call 0 returned 100%
+ -: 4879: }
+ -: 4880: }
+ -: 4881: else {
+ -: 4882: // there was a bool before this one, read bits in nibbles
+ 28: 4883: if (ctx->nibble == lowNbl) {
branch 0 taken 61% (fallthrough)
branch 1 taken 39%
- 17: 4810: if (ctx->boolShift == 8) {
+ 17: 4884: if (ctx->boolShift == 8) {
branch 0 taken 12% (fallthrough)
branch 1 taken 88%
- 2: 4811: read4bPackedBool;
- 2: 4812: bo = allocSBool((*ctx->boolAddr) & 0x10);
-call 0 returned 100%
- -: 4813: }
- -: 4814: else {
- 15: 4815: readTypeOnly;
- 15: 4816: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
-call 0 returned 100%
- -: 4817: }
- -: 4818: }
- -: 4819: else {
- -: 4820: // high nibble
- 11: 4821: readTypeInHighNbl;
+ 2: 4885: read4bPackedBool;
+ 2: 4886: bo = allocSBool((*ctx->boolAddr) & 0x10);
+call 0 returned 100%
+ -: 4887: }
+ -: 4888: else {
+ 15: 4889: readTypeOnly;
+ 15: 4890: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+call 0 returned 100%
+ -: 4891: }
+ -: 4892: }
+ -: 4893: else {
+ -: 4894: // high nibble
+ 11: 4895: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 11: 4822: if (ctx->boolShift == 8) {
+ 11: 4896: if (ctx->boolShift == 8) {
branch 0 taken 18% (fallthrough)
branch 1 taken 82%
- 2: 4823: read8bPackedBool;
- 2: 4824: bo = allocSBool((*ctx->boolAddr) & 0x1);
+ 2: 4897: read8bPackedBool;
+ 2: 4898: bo = allocSBool((*ctx->boolAddr) & 0x1);
call 0 returned 100%
- -: 4825: }
- -: 4826: else {
- 9: 4827: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+ -: 4899: }
+ -: 4900: else {
+ 9: 4901: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
call 0 returned 100%
- -: 4828: }
- -: 4829: }
- -: 4830: }
- 34: 4831: sArrayPushTiny(array, (smallt *) bo);
+ -: 4902: }
+ -: 4903: }
+ -: 4904: }
+ 34: 4905: sArrayPushTiny(array, (smallt *) bo);
call 0 returned 100%
- 34: 4832: break;
- -: 4833: case S_DICT:
- 2: 4834: d = NULL;
- 2: 4835: dictNetDeserial(&d, data, ctx, /*packed=*/false);
+ 34: 4906: break;
+ -: 4907: case S_DICT:
+ 2: 4908: d = NULL;
+ 2: 4909: dictNetDeserial(&d, data, ctx, /*packed=*/false);
call 0 returned 100%
- 2: 4836: sArrayPushTiny(array, (smallt *) d);
+ 2: 4910: sArrayPushTiny(array, (smallt *) d);
call 0 returned 100%
- 2: 4837: break;
- -: 4838: case S_DOUBLE:
- 2: 4839: if (ctx->nibble == lowNbl) {
+ 2: 4911: break;
+ -: 4912: case S_DOUBLE:
+ 2: 4913: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 4840: readTypeOnly;
- -: 4841: }
- -: 4842: else {
- -: 4843: // high nibble
- 1: 4844: readTypeInHighNbl;
+ 1: 4914: readTypeOnly;
+ -: 4915: }
+ -: 4916: else {
+ -: 4917: // high nibble
+ 1: 4918: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- -: 4845: }
- 2: 4846: D = (double *)(*data);
- 2: 4847: *data += sizeof(double);
- 2: 4848: Do = allocSDouble(*D);
+ -: 4919: }
+ 2: 4920: D = (double *)(*data);
+ 2: 4921: *data += sizeof(double);
+ 2: 4922: Do = allocSDouble(*D);
call 0 returned 100%
- 2: 4849: sArrayPushTiny(array, (smallt *) Do);
+ 2: 4923: sArrayPushTiny(array, (smallt *) Do);
call 0 returned 100%
- 2: 4850: break;
- -: 4851: case S_INT: {
- -: 4852: i64 v;
- 22: 4853: if (ctx->nibble == lowNbl) {
+ 2: 4924: break;
+ -: 4925: case S_INT: {
+ -: 4926: i64 v;
+ 22: 4927: if (ctx->nibble == lowNbl) {
branch 0 taken 82% (fallthrough)
branch 1 taken 18%
- 18: 4854: v = netTypeVarintToUint((u8**)data);
+ 18: 4928: v = netTypeVarintToUint((u8**)data);
call 0 returned 100%
- -: 4855: }
- -: 4856: else {
- -: 4857: // high nibble
- 4: 4858: readTypeInHighNbl;
+ -: 4929: }
+ -: 4930: else {
+ -: 4931: // high nibble
+ 4: 4932: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 4: 4859: v = varintToUint(data);
+ 4: 4933: v = varintToUint(data);
call 0 returned 100%
- -: 4860: }
- 22: 4861: v = (v >> 1) ^ ((v << 63) >> 63);
- 22: 4862: io = allocSInt(v);
+ -: 4934: }
+ 22: 4935: v = (v >> 1) ^ ((v << 63) >> 63);
+ 22: 4936: io = allocSInt(v);
call 0 returned 100%
- 22: 4863: sArrayPushTiny(array, (smallt *) io);
+ 22: 4937: sArrayPushTiny(array, (smallt *) io);
call 0 returned 100%
- -: 4864: }
- 22: 4865: break;
- -: 4866: case S_STRING:
- 13: 4867: if (ctx->nibble == lowNbl) {
+ -: 4938: }
+ 22: 4939: break;
+ -: 4940: case S_STRING:
+ 13: 4941: if (ctx->nibble == lowNbl) {
branch 0 taken 69% (fallthrough)
branch 1 taken 31%
- 9: 4868: readTypeOnly;
- -: 4869: }
- -: 4870: else {
- -: 4871: // high nibble
- 4: 4872: readTypeInHighNbl;
+ 9: 4942: readTypeOnly;
+ -: 4943: }
+ -: 4944: else {
+ -: 4945: // high nibble
+ 4: 4946: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- -: 4873: }
- 13: 4874: s = (char *)(*data);
- 13: 4875: *data += strlen(s)+1;
- 13: 4876: so = allocSStringTiny(s);
+ -: 4947: }
+ 13: 4948: s = (char *)(*data);
+ 13: 4949: *data += strlen(s)+1;
+ 13: 4950: so = allocSStringTiny(s);
call 0 returned 100%
- 13: 4877: sArrayPushTiny(array, (smallt *) so);
+ 13: 4951: sArrayPushTiny(array, (smallt *) so);
call 0 returned 100%
- 13: 4878: break;
- -: 4879: case S_ARRAY:
- 2: 4880: a = NULL;
- 2: 4881: arrayNetDeserial(&a, data, ctx, /*packed=*/false);
+ 13: 4952: break;
+ -: 4953: case S_ARRAY:
+ 2: 4954: a = NULL;
+ 2: 4955: arrayNetDeserial(&a, data, ctx, /*packed=*/false);
call 0 returned 100%
- 2: 4882: sArrayPushTiny(array, (smallt *) a);
+ 2: 4956: sArrayPushTiny(array, (smallt *) a);
call 0 returned 100%
- 2: 4883: break;
- -: 4884: case S_BYTES:
- #####: 4885: B = allocSBytes();
+ 2: 4957: break;
+ -: 4958: case S_BYTES:
+ #####: 4959: B = allocSBytes();
call 0 never executed
- #####: 4886: if (ctx->nibble == lowNbl) {
+ #####: 4960: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 4887: count = netTypeVarintToUint((u8**)data);
+ #####: 4961: count = netTypeVarintToUint((u8**)data);
call 0 never executed
- -: 4888: }
- -: 4889: else {
- -: 4890: // high nibble
- #####: 4891: readTypeInHighNbl;
+ -: 4962: }
+ -: 4963: else {
+ -: 4964: // high nibble
+ #####: 4965: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 4892: count = varintToUint((u8**)data);
+ #####: 4966: count = varintToUint((u8**)data);
call 0 never executed
- -: 4893: }
- #####: 4894: sBytesPushBuffer(&B, data, count);
+ -: 4967: }
+ #####: 4968: sBytesPushBuffer(&B, data, count);
call 0 never executed
- #####: 4895: *data += count;
- #####: 4896: sArrayPushTiny(array, (smallt *) B);
+ #####: 4969: *data += count;
+ #####: 4970: sArrayPushTiny(array, (smallt *) B);
call 0 never executed
- #####: 4897: break;
- -: 4898: case PK_DICT:
- 8: 4899: if (!inPack) {
+ #####: 4971: break;
+ -: 4972: case PK_DICT:
+ 8: 4973: if (!inPack) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 2: 4900: inPack = true;
- 2: 4901: if (ctx->nibble == lowNbl) {
+ 2: 4974: inPack = true;
+ 2: 4975: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 4902: packCount = netTypeVarintToUint((u8**)data);
+ 1: 4976: packCount = netTypeVarintToUint((u8**)data);
call 0 returned 100%
- -: 4903: }
- -: 4904: else {
- -: 4905: // high nibble
- 1: 4906: readTypeInHighNbl;
+ -: 4977: }
+ -: 4978: else {
+ -: 4979: // high nibble
+ 1: 4980: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 1: 4907: packCount = varintToUint((u8**)data);
+ 1: 4981: packCount = varintToUint((u8**)data);
call 0 returned 100%
- -: 4908: }
- 2: 4909: packedType = PK_DICT;
- -: 4910: }
- -: 4911:
- 8: 4912: d = NULL;
- 8: 4913: dictNetDeserial(&d, data, ctx, /*packed=*/true);
+ -: 4982: }
+ 2: 4983: packedType = PK_DICT;
+ -: 4984: }
+ -: 4985:
+ 8: 4986: d = NULL;
+ 8: 4987: dictNetDeserial(&d, data, ctx, /*packed=*/true);
call 0 returned 100%
- 8: 4914: sArrayPushTiny(array, (smallt *) d);
+ 8: 4988: sArrayPushTiny(array, (smallt *) d);
call 0 returned 100%
- -: 4915: // stop unpacking when packCount == 0
- 8: 4916: packCount--;
- 8: 4917: if (!packCount) inPack = false;
+ -: 4989: // stop unpacking when packCount == 0
+ 8: 4990: packCount--;
+ 8: 4991: if (!packCount) inPack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 8: 4918: break;
- -: 4919: case PK_DOUBLE:
- 8: 4920: if (!inPack) {
+ 8: 4992: break;
+ -: 4993: case PK_DOUBLE:
+ 8: 4994: if (!inPack) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 2: 4921: inPack = true;
- 2: 4922: if (ctx->nibble == lowNbl) {
+ 2: 4995: inPack = true;
+ 2: 4996: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 4923: packCount = netTypeVarintToUint((u8**)data);
+ 1: 4997: packCount = netTypeVarintToUint((u8**)data);
call 0 returned 100%
- -: 4924: }
- -: 4925: else {
- -: 4926: // high nibble
- 1: 4927: readTypeInHighNbl;
+ -: 4998: }
+ -: 4999: else {
+ -: 5000: // high nibble
+ 1: 5001: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 1: 4928: packCount = varintToUint((u8**)data);
+ 1: 5002: packCount = varintToUint((u8**)data);
call 0 returned 100%
- -: 4929: }
- 2: 4930: packedType = PK_DOUBLE;
- -: 4931: }
- -: 4932:
- 8: 4933: D = (double *)(*data);
- 8: 4934: *data += sizeof(double);
- 8: 4935: Do = allocSDouble(*D);
-call 0 returned 100%
- 8: 4936: sArrayPushTiny(array, (smallt *) Do);
-call 0 returned 100%
- -: 4937: // stop unpacking when packCount == 0
- 8: 4938: packCount--;
- 8: 4939: if (!packCount) inPack = false;
+ -: 5003: }
+ 2: 5004: packedType = PK_DOUBLE;
+ -: 5005: }
+ -: 5006:
+ 8: 5007: D = (double *)(*data);
+ 8: 5008: *data += sizeof(double);
+ 8: 5009: Do = allocSDouble(*D);
+call 0 returned 100%
+ 8: 5010: sArrayPushTiny(array, (smallt *) Do);
+call 0 returned 100%
+ -: 5011: // stop unpacking when packCount == 0
+ 8: 5012: packCount--;
+ 8: 5013: if (!packCount) inPack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 8: 4940: break;
- -: 4941: case PK_INT:
- 8: 4942: if (!inPack) {
+ 8: 5014: break;
+ -: 5015: case PK_INT:
+ 8: 5016: if (!inPack) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 2: 4943: inPack = true;
- 2: 4944: if (ctx->nibble == lowNbl) {
+ 2: 5017: inPack = true;
+ 2: 5018: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 4945: packCount = netTypeVarintToUint((u8**)data);
+ 1: 5019: packCount = netTypeVarintToUint((u8**)data);
call 0 returned 100%
- -: 4946: }
- -: 4947: else {
- -: 4948: // high nibble
- 1: 4949: readTypeInHighNbl;
+ -: 5020: }
+ -: 5021: else {
+ -: 5022: // high nibble
+ 1: 5023: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 1: 4950: packCount = varintToUint((u8**)data);
+ 1: 5024: packCount = varintToUint((u8**)data);
call 0 returned 100%
- -: 4951: }
- 2: 4952: packedType = PK_INT;
- -: 4953: }
- -: 4954:
- 8: 4955: i64 v = varintToUint(data);
+ -: 5025: }
+ 2: 5026: packedType = PK_INT;
+ -: 5027: }
+ -: 5028:
+ 8: 5029: i64 v = varintToUint(data);
call 0 returned 100%
- 8: 4956: v = (v >> 1) ^ ((v << 63) >> 63);
- 8: 4957: io = allocSInt(v);
+ 8: 5030: v = (v >> 1) ^ ((v << 63) >> 63);
+ 8: 5031: io = allocSInt(v);
call 0 returned 100%
- 8: 4958: sArrayPushTiny(array, (smallt *) io);
+ 8: 5032: sArrayPushTiny(array, (smallt *) io);
call 0 returned 100%
- -: 4959: // stop unpacking when packCount == 0
- 8: 4960: packCount--;
- 8: 4961: if (!packCount) inPack = false;
+ -: 5033: // stop unpacking when packCount == 0
+ 8: 5034: packCount--;
+ 8: 5035: if (!packCount) inPack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 8: 4962: break;
- -: 4963: case PK_STRING:
- 8: 4964: if (!inPack) {
+ 8: 5036: break;
+ -: 5037: case PK_STRING:
+ 8: 5038: if (!inPack) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 2: 4965: inPack = true;
- 2: 4966: if (ctx->nibble == lowNbl) {
+ 2: 5039: inPack = true;
+ 2: 5040: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 4967: packCount = netTypeVarintToUint((u8**)data);
+ 1: 5041: packCount = netTypeVarintToUint((u8**)data);
call 0 returned 100%
- -: 4968: }
- -: 4969: else {
- -: 4970: // high nibble
- 1: 4971: readTypeInHighNbl;
+ -: 5042: }
+ -: 5043: else {
+ -: 5044: // high nibble
+ 1: 5045: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 1: 4972: packCount = varintToUint((u8**)data);
+ 1: 5046: packCount = varintToUint((u8**)data);
call 0 returned 100%
- -: 4973: }
- 2: 4974: packedType = PK_STRING;
- -: 4975: }
- -: 4976:
- 8: 4977: s = (char *)(*data);
- 8: 4978: *data += strlen(s)+1;
- 8: 4979: so = allocSStringTiny(s);
+ -: 5047: }
+ 2: 5048: packedType = PK_STRING;
+ -: 5049: }
+ -: 5050:
+ 8: 5051: s = (char *)(*data);
+ 8: 5052: *data += strlen(s)+1;
+ 8: 5053: so = allocSStringTiny(s);
call 0 returned 100%
- 8: 4980: sArrayPushTiny(array, (smallt *) so);
+ 8: 5054: sArrayPushTiny(array, (smallt *) so);
call 0 returned 100%
- -: 4981: // stop unpacking when packCount == 0
- 8: 4982: packCount--;
- 8: 4983: if (!packCount) inPack = false;
+ -: 5055: // stop unpacking when packCount == 0
+ 8: 5056: packCount--;
+ 8: 5057: if (!packCount) inPack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 8: 4984: break;
- -: 4985: case PK_ARRAY:
- 8: 4986: if (!inPack) {
+ 8: 5058: break;
+ -: 5059: case PK_ARRAY:
+ 8: 5060: if (!inPack) {
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 2: 4987: inPack = true;
- 2: 4988: if (ctx->nibble == lowNbl) {
+ 2: 5061: inPack = true;
+ 2: 5062: if (ctx->nibble == lowNbl) {
branch 0 taken 50% (fallthrough)
branch 1 taken 50%
- 1: 4989: packCount = netTypeVarintToUint((u8**)data);
+ 1: 5063: packCount = netTypeVarintToUint((u8**)data);
call 0 returned 100%
- -: 4990: }
- -: 4991: else {
- -: 4992: // high nibble
- 1: 4993: readTypeInHighNbl;
+ -: 5064: }
+ -: 5065: else {
+ -: 5066: // high nibble
+ 1: 5067: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 1: 4994: packCount = varintToUint((u8**)data);
+ 1: 5068: packCount = varintToUint((u8**)data);
call 0 returned 100%
- -: 4995: }
- 2: 4996: packedType = PK_ARRAY;
- -: 4997: }
- -: 4998:
- 8: 4999: a = NULL;
- 8: 5000: arrayNetDeserial(&a, data, ctx, /*packed=*/true);
+ -: 5069: }
+ 2: 5070: packedType = PK_ARRAY;
+ -: 5071: }
+ -: 5072:
+ 8: 5073: a = NULL;
+ 8: 5074: arrayNetDeserial(&a, data, ctx, /*packed=*/true);
call 0 returned 100%
- 8: 5001: sArrayPushTiny(array, (smallt *) a);
+ 8: 5075: sArrayPushTiny(array, (smallt *) a);
call 0 returned 100%
- -: 5002: // stop unpacking when packCount == 0
- 8: 5003: packCount--;
- 8: 5004: if (!packCount) inPack = false;
+ -: 5076: // stop unpacking when packCount == 0
+ 8: 5077: packCount--;
+ 8: 5078: if (!packCount) inPack = false;
branch 0 taken 25% (fallthrough)
branch 1 taken 75%
- 8: 5005: break;
- -: 5006: case PK_BYTES:
- #####: 5007: if (!inPack) {
+ 8: 5079: break;
+ -: 5080: case PK_BYTES:
+ #####: 5081: if (!inPack) {
branch 0 never executed
branch 1 never executed
- #####: 5008: inPack = true;
- #####: 5009: if (ctx->nibble == lowNbl) {
+ #####: 5082: inPack = true;
+ #####: 5083: if (ctx->nibble == lowNbl) {
branch 0 never executed
branch 1 never executed
- #####: 5010: packCount = netTypeVarintToUint((u8**)data);
+ #####: 5084: packCount = netTypeVarintToUint((u8**)data);
call 0 never executed
- -: 5011: }
- -: 5012: else {
- -: 5013: // high nibble
- #####: 5014: readTypeInHighNbl;
+ -: 5085: }
+ -: 5086: else {
+ -: 5087: // high nibble
+ #####: 5088: readTypeInHighNbl;
branch 0 never executed
branch 1 never executed
- #####: 5015: packCount = varintToUint((u8**)data);
-call 0 never executed
- -: 5016: }
- #####: 5017: packedType = PK_BYTES;
- -: 5018: }
- -: 5019:
- #####: 5020: B = allocSBytes();
+ #####: 5089: packCount = varintToUint((u8**)data);
call 0 never executed
- #####: 5021: count = varintToUint((u8**)data);
-call 0 never executed
- #####: 5022: sBytesPushBuffer(&B, data, count);
-call 0 never executed
- #####: 5023: *data += count;
- #####: 5024: sArrayPushTiny(array, (smallt *) B);
-call 0 never executed
- -: 5025: // stop unpacking when packCount == 0
- #####: 5026: packCount--;
- #####: 5027: if (!packCount) inPack = false;
-branch 0 never executed
-branch 1 never executed
- #####: 5028: break;
- -: 5029: case UNIFORM_DICT:
- 2: 5030: d = NULL;
- 2: 5031: uniformDictNetDeserial(&d, data, ctx, /*packed=*/false);
-call 0 returned 100%
- 2: 5032: sArrayPushTiny(array, (smallt *) d);
-call 0 returned 100%
- 2: 5033: break;
- -: 5034: case UNIFORM_ARRAY:
- 6: 5035: a = NULL;
- 6: 5036: uniformArrayNetDeserial(&a, data, ctx, /*packed=*/false);
-call 0 returned 100%
- 6: 5037: sArrayPushTiny(array, (smallt *) a);
-call 0 returned 100%
- 6: 5038: break;
- -: 5039: }
- -: 5040: }
- -: 5041:}
- -: 5042:
-function uniformArrayNetDeserial called 23 returned 100% blocks executed 89%
- 23: 5043:internal void uniformArrayNetDeserial(sArrayt **array, u8 **data, contextt *ctx, bool packed) {
- 23: 5044: sUndefinedt *u = NULL;
- 23: 5045: sBoolt *bo = NULL;
- 23: 5046: double *D = NULL;
- 23: 5047: sDoublet *Do = NULL;
- 23: 5048: sDictt *d = NULL;
- 23: 5049: sIntt *io = NULL;
- 23: 5050: char *s = NULL;
- 23: 5051: sStringt *so = NULL;
- 23: 5052: sArrayt *a = NULL;
- 23: 5053: sBytest *B = NULL;
- -: 5054: uint32_t count;
- -: 5055: uint32_t arrayCount;
- -: 5056: u8 type;
- -: 5057:
- 23: 5058: if (packed) {
-branch 0 taken 9% (fallthrough)
-branch 1 taken 91%
- 2: 5059: type = (**data) & 0xF;
- 2: 5060: arrayCount = netTypeVarintToUint(data);
+ -: 5090: }
+ #####: 5091: packedType = PK_BYTES;
+ -: 5092: }
+ -: 5093:
+ #####: 5094: B = allocSBytes();
+call 0 never executed
+ #####: 5095: count = varintToUint((u8**)data);
+call 0 never executed
+ #####: 5096: sBytesPushBuffer(&B, data, count);
+call 0 never executed
+ #####: 5097: *data += count;
+ #####: 5098: sArrayPushTiny(array, (smallt *) B);
+call 0 never executed
+ -: 5099: // stop unpacking when packCount == 0
+ #####: 5100: packCount--;
+ #####: 5101: if (!packCount) inPack = false;
+branch 0 never executed
+branch 1 never executed
+ #####: 5102: break;
+ -: 5103: case UNIFORM_DICT:
+ 5: 5104: d = NULL;
+ 5: 5105: uniformDictNetDeserial(&d, data, ctx, /*packed=*/false);
+call 0 returned 100%
+ 5: 5106: sArrayPushTiny(array, (smallt *) d);
+call 0 returned 100%
+ 5: 5107: break;
+ -: 5108: case UNIFORM_ARRAY:
+ 6: 5109: a = NULL;
+ 6: 5110: uniformArrayNetDeserial(&a, data, ctx, /*packed=*/false);
+call 0 returned 100%
+ 6: 5111: sArrayPushTiny(array, (smallt *) a);
+call 0 returned 100%
+ 6: 5112: break;
+ -: 5113: }
+ -: 5114: }
+ -: 5115:}
+ -: 5116:
+function uniformArrayNetDeserial called 24 returned 100% blocks executed 89%
+ 24: 5117:internal void uniformArrayNetDeserial(sArrayt **array, u8 **data, contextt *ctx, bool packed) {
+ 24: 5118: sUndefinedt *u = NULL;
+ 24: 5119: sBoolt *bo = NULL;
+ 24: 5120: double *D = NULL;
+ 24: 5121: sDoublet *Do = NULL;
+ 24: 5122: sDictt *d = NULL;
+ 24: 5123: sIntt *io = NULL;
+ 24: 5124: char *s = NULL;
+ 24: 5125: sStringt *so = NULL;
+ 24: 5126: sArrayt *a = NULL;
+ 24: 5127: sBytest *B = NULL;
+ -: 5128: uint32_t count;
+ -: 5129: uint32_t arrayCount;
+ -: 5130: u8 type;
+ -: 5131:
+ 24: 5132: if (packed) {
+branch 0 taken 8% (fallthrough)
+branch 1 taken 92%
+ 2: 5133: type = (**data) & 0xF;
+ 2: 5134: arrayCount = netTypeVarintToUint(data);
call 0 returned 100%
- -: 5061: }
- -: 5062: else {
- 21: 5063: if (ctx->nibble == lowNbl) {
-branch 0 taken 76% (fallthrough)
-branch 1 taken 24%
- 16: 5064: type = (**data) >> 4;
- 16: 5065: (*data)++;
- 16: 5066: arrayCount = varintToUint(data);
+ -: 5135: }
+ -: 5136: else {
+ 22: 5137: if (ctx->nibble == lowNbl) {
+branch 0 taken 77% (fallthrough)
+branch 1 taken 23%
+ 17: 5138: type = (**data) >> 4;
+ 17: 5139: (*data)++;
+ 17: 5140: arrayCount = varintToUint(data);
call 0 returned 100%
- -: 5067: }
- -: 5068: else {
- 5: 5069: readTypeInHighNbl;
+ -: 5141: }
+ -: 5142: else {
+ 5: 5143: readTypeInHighNbl;
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- 5: 5070: type = (**data) & 0xF;
- 5: 5071: arrayCount = netTypeVarintToUint(data);
+ 5: 5144: type = (**data) & 0xF;
+ 5: 5145: arrayCount = netTypeVarintToUint(data);
call 0 returned 100%
- -: 5072: }
- -: 5073: }
- -: 5074:
- 23: 5075: if (!arrayCount) {
-branch 0 taken 9% (fallthrough)
-branch 1 taken 91%
- 2: 5076: *array = allocSArray();;
+ -: 5146: }
+ -: 5147: }
+ -: 5148:
+ 24: 5149: if (!arrayCount) {
+branch 0 taken 8% (fallthrough)
+branch 1 taken 92%
+ 2: 5150: *array = allocSArray();;
call 0 returned 100%
- 2: 5077: ret;
- -: 5078: }
- -: 5079:
- 21: 5080: switch(type) {
+ 2: 5151: ret;
+ -: 5152: }
+ -: 5153:
+ 22: 5154: switch(type) {
branch 0 taken 5%
-branch 1 taken 10%
+branch 1 taken 9%
branch 2 taken 5%
branch 3 taken 5%
-branch 4 taken 52%
+branch 4 taken 50%
branch 5 taken 5%
-branch 6 taken 10%
+branch 6 taken 14%
branch 7 taken 0%
branch 8 taken 5%
branch 9 taken 5%
branch 10 taken 0%
- -: 5081: case S_UNDEFINED:
- 7: 5082: loop(arrayCount) {
+ -: 5155: case S_UNDEFINED:
+ 7: 5156: loop(arrayCount) {
branch 0 taken 86%
branch 1 taken 14% (fallthrough)
- 6: 5083: u = allocSUndefined();
+ 6: 5157: u = allocSUndefined();
call 0 returned 100%
- 6: 5084: sArrayPushTiny(array, (smallt *) u);
+ 6: 5158: sArrayPushTiny(array, (smallt *) u);
call 0 returned 100%
- -: 5085: }
- 1: 5086: break;
- -: 5087: case S_BOOL:
- 16: 5088: loop(arrayCount) {
+ -: 5159: }
+ 1: 5160: break;
+ -: 5161: case S_BOOL:
+ 16: 5162: loop(arrayCount) {
branch 0 taken 88%
branch 1 taken 13% (fallthrough)
- 14: 5089: if (!ctx->boolAddr) {
+ 14: 5163: if (!ctx->boolAddr) {
branch 0 taken 14% (fallthrough)
branch 1 taken 86%
- 2: 5090: read8bPackedBool;
- 2: 5091: ctx->boolShift = 0;
- -: 5092: }
- 14: 5093: if (ctx->boolShift == 8) {
+ 2: 5164: read8bPackedBool;
+ 2: 5165: ctx->boolShift = 0;
+ -: 5166: }
+ 14: 5167: if (ctx->boolShift == 8) {
branch 0 taken 7% (fallthrough)
branch 1 taken 93%
- 1: 5094: read8bPackedBool;
- 1: 5095: bo = allocSBool((*ctx->boolAddr) & 0x1);
+ 1: 5168: read8bPackedBool;
+ 1: 5169: bo = allocSBool((*ctx->boolAddr) & 0x1);
call 0 returned 100%
- -: 5096: }
- -: 5097: else {
- 13: 5098: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
+ -: 5170: }
+ -: 5171: else {
+ 13: 5172: bo = allocSBool((*ctx->boolAddr) & (0x1 << (ctx->boolShift++)));
call 0 returned 100%
- -: 5099: }
- 14: 5100: sArrayPushTiny(array, (smallt *) bo);
+ -: 5173: }
+ 14: 5174: sArrayPushTiny(array, (smallt *) bo);
call 0 returned 100%
- -: 5101: }
- 2: 5102: break;
- -: 5103: case S_DICT:
- 3: 5104: loop(arrayCount) {
+ -: 5175: }
+ 2: 5176: break;
+ -: 5177: case S_DICT:
+ 3: 5178: loop(arrayCount) {
branch 0 taken 67%
branch 1 taken 33% (fallthrough)
- 2: 5105: d = NULL;
- 2: 5106: dictNetDeserial(&d, data, ctx, /*packed=*/true);
+ 2: 5179: d = NULL;
+ 2: 5180: dictNetDeserial(&d, data, ctx, /*packed=*/true);
call 0 returned 100%
- 2: 5107: sArrayPushTiny(array, (smallt *) d);
+ 2: 5181: sArrayPushTiny(array, (smallt *) d);
call 0 returned 100%
- -: 5108: }
- 1: 5109: break;
- -: 5110: case S_DOUBLE:
- 4: 5111: loop(arrayCount) {
+ -: 5182: }
+ 1: 5183: break;
+ -: 5184: case S_DOUBLE:
+ 4: 5185: loop(arrayCount) {
branch 0 taken 75%
branch 1 taken 25% (fallthrough)
- 3: 5112: D = (double *)(*data);
- 3: 5113: *data += sizeof(double);
- 3: 5114: Do = allocSDouble(*D);
+ 3: 5186: D = (double *)(*data);
+ 3: 5187: *data += sizeof(double);
+ 3: 5188: Do = allocSDouble(*D);
call 0 returned 100%
- 3: 5115: sArrayPushTiny(array, (smallt *) Do);
+ 3: 5189: sArrayPushTiny(array, (smallt *) Do);
call 0 returned 100%
- -: 5116: }
- 1: 5117: break;
- -: 5118: case S_INT:
- 49: 5119: loop(arrayCount) {
+ -: 5190: }
+ 1: 5191: break;
+ -: 5192: case S_INT:
+ 49: 5193: loop(arrayCount) {
branch 0 taken 78%
branch 1 taken 22% (fallthrough)
- 38: 5120: i64 v = varintToUint(data);
+ 38: 5194: i64 v = varintToUint(data);
call 0 returned 100%
- 38: 5121: v = (v >> 1) ^ ((v << 63) >> 63);
- 38: 5122: io = allocSInt(v);
+ 38: 5195: v = (v >> 1) ^ ((v << 63) >> 63);
+ 38: 5196: io = allocSInt(v);
call 0 returned 100%
- 38: 5123: sArrayPushTiny(array, (smallt *) io);
+ 38: 5197: sArrayPushTiny(array, (smallt *) io);
call 0 returned 100%
- -: 5124: }
- 11: 5125: break;
- -: 5126: case S_STRING:
- 4: 5127: loop(arrayCount) {
+ -: 5198: }
+ 11: 5199: break;
+ -: 5200: case S_STRING:
+ 4: 5201: loop(arrayCount) {
branch 0 taken 75%
branch 1 taken 25% (fallthrough)
- 3: 5128: s = (char *)(*data);
- 3: 5129: *data += strlen(s)+1;
- 3: 5130: so = allocSStringTiny(s);
+ 3: 5202: s = (char *)(*data);
+ 3: 5203: *data += strlen(s)+1;
+ 3: 5204: so = allocSStringTiny(s);
call 0 returned 100%
- 3: 5131: sArrayPushTiny(array, (smallt *) so);
+ 3: 5205: sArrayPushTiny(array, (smallt *) so);
call 0 returned 100%
- -: 5132: }
- 1: 5133: break;
- -: 5134: case S_ARRAY:
- 6: 5135: loop(arrayCount) {
-branch 0 taken 67%
-branch 1 taken 33% (fallthrough)
- 4: 5136: a = NULL;
- 4: 5137: arrayNetDeserial(&a, data, ctx, /*packed=*/true);
+ -: 5206: }
+ 1: 5207: break;
+ -: 5208: case S_ARRAY:
+ 8: 5209: loop(arrayCount) {
+branch 0 taken 63%
+branch 1 taken 38% (fallthrough)
+ 5: 5210: a = NULL;
+ 5: 5211: arrayNetDeserial(&a, data, ctx, /*packed=*/true);
call 0 returned 100%
- 4: 5138: sArrayPushTiny(array, (smallt *) a);
+ 5: 5212: sArrayPushTiny(array, (smallt *) a);
call 0 returned 100%
- -: 5139: }
- 2: 5140: break;
- -: 5141: case S_BYTES:
- #####: 5142: loop(arrayCount) {
+ -: 5213: }
+ 3: 5214: break;
+ -: 5215: case S_BYTES:
+ #####: 5216: loop(arrayCount) {
branch 0 never executed
branch 1 never executed
- #####: 5143: B = allocSBytes();
+ #####: 5217: B = allocSBytes();
call 0 never executed
- #####: 5144: count = varintToUint((u8**)data);
+ #####: 5218: count = varintToUint((u8**)data);
call 0 never executed
- #####: 5145: sBytesPushBuffer(&B, data, count);
+ #####: 5219: sBytesPushBuffer(&B, data, count);
call 0 never executed
- #####: 5146: *data += count;
- #####: 5147: sArrayPushTiny(array, (smallt *) B);
+ #####: 5220: *data += count;
+ #####: 5221: sArrayPushTiny(array, (smallt *) B);
call 0 never executed
- -: 5148: }
- #####: 5149: break;
- -: 5150: case UNIFORM_DICT:
- 3: 5151: loop(arrayCount) {
+ -: 5222: }
+ #####: 5223: break;
+ -: 5224: case UNIFORM_DICT:
+ 3: 5225: loop(arrayCount) {
branch 0 taken 67%
branch 1 taken 33% (fallthrough)
- 2: 5152: d = NULL;
- 2: 5153: uniformDictNetDeserial(&d, data, ctx, /*packed=*/true);
+ 2: 5226: d = NULL;
+ 2: 5227: uniformDictNetDeserial(&d, data, ctx, /*packed=*/true);
call 0 returned 100%
- 2: 5154: sArrayPushTiny(array, (smallt *) d);
+ 2: 5228: sArrayPushTiny(array, (smallt *) d);
call 0 returned 100%
- -: 5155: }
- 1: 5156: break;
- -: 5157: case UNIFORM_ARRAY:
- 2: 5158: loop(arrayCount) {
+ -: 5229: }
+ 1: 5230: break;
+ -: 5231: case UNIFORM_ARRAY:
+ 2: 5232: loop(arrayCount) {
branch 0 taken 50%
branch 1 taken 50% (fallthrough)
- 1: 5159: a = NULL;
- 1: 5160: uniformArrayNetDeserial(&a, data, ctx, /*packed=*/true);
-call 0 returned 100%
- 1: 5161: sArrayPushTiny(array, (smallt *) a);
-call 0 returned 100%
- -: 5162: }
- 1: 5163: break;
- -: 5164: }
- -: 5165:}
- -: 5166:
-function deserialNetSerial called 76 returned 100% blocks executed 78%
- 76: 5167:internal smallJsont* deserialNetSerial(smallJsont *self, smallBytest *data) {
- -: 5168:
- 76: 5169: if (!data) {
+ 1: 5233: a = NULL;
+ 1: 5234: uniformArrayNetDeserial(&a, data, ctx, /*packed=*/true);
+call 0 returned 100%
+ 1: 5235: sArrayPushTiny(array, (smallt *) a);
+call 0 returned 100%
+ -: 5236: }
+ 1: 5237: break;
+ -: 5238: }
+ -: 5239:}
+ -: 5240:
+function deserialNetSerial called 77 returned 100% blocks executed 78%
+ 77: 5241:internal smallJsont* deserialNetSerial(smallJsont *self, smallBytest *data) {
+ -: 5242:
+ 77: 5243: if (!data) {
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- #####: 5170: ret self;
- -: 5171: }
- -: 5172:
- 76: 5173: smallt *o = netDeserial(data->B);
+ #####: 5244: ret self;
+ -: 5245: }
+ -: 5246:
+ 77: 5247: smallt *o = netDeserial(data->B);
call 0 returned 100%
- -: 5174:
- 76: 5175: if (!o) {
+ -: 5248:
+ 77: 5249: if (!o) {
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
- #####: 5176: ret self;
- -: 5177: }
- -: 5178:
- 76: 5179: freeG(self);
-call 0 returned 100%
- -: 5180:
- 76: 5181: setsoG(self, o);
-call 0 returned 100%
- -: 5182:
- 76: 5183: ret self;
- -: 5184:}
- -: 5185:
- -: 5186:// vim: set expandtab ts=2 sw=2:
+ #####: 5250: ret self;
+ -: 5251: }
+ -: 5252:
+ 77: 5253: freeG(self);
+call 0 returned 100%
+ -: 5254:
+ 77: 5255: setsoG(self, o);
+call 0 returned 100%
+ -: 5256:
+ 77: 5257: ret self;
+ -: 5258:}
+ -: 5259:
+ -: 5260:// vim: set expandtab ts=2 sw=2:
diff --git a/package.yml b/package.yml
@@ -1,6 +1,6 @@
---
name: netSerial
- version: 0.0.2
+ version: 0.0.3
description: "network serializer with binary format more compact than the default serializer in smallJson"
bin: ./netSerial.c
#cflags: -DA -ggdb -std=gnu11 -fPIC -pipe
diff --git a/testNetSerial.c b/testNetSerial.c
@@ -1515,6 +1515,20 @@ START_TEST(variousT)
terminateG(B);
freeManyG(&n, &ds);
+ parseG(&n, "[[{a:1}, null, {a:1}, {a:1}]]");
+ logVarG(&n);
+ B = serialG(&n);
+ logI("len %u", lenG(B));
+ logSI("%s",toHexSepS(getValG(B), lenG(B), " "));
+ s = sToString((smallt *) B->B);
+ ck_assert_str_eq(s, "[111,1,4,78,1,97,0,2,-32,20,97,0,2,78,1,97,0,2]");
+ free(s);
+ deserialG(&ds, B);
+ s = toStringG(&ds);
+ ck_assert_str_eq(s, "[[{\"a\":1},null,{\"a\":1},{\"a\":1}]]");
+ free(s);
+ terminateG(B);
+ freeManyG(&n, &ds);
END_TEST
diff --git a/testNetSerial.sh b/testNetSerial.sh
@@ -1,5 +1,5 @@
spm test
-cd ~/.sheepy/build/home/remy/git/sw/sheepyPackagesGitHub/netSerial/
+cd ~/.sheepy/build/home/$USER/git/sw/sheepyPackagesGitHub/netSerial/
gcov -b netSerial.c
cd -
-cp ~/.sheepy/build/home/remy/git/sw/sheepyPackagesGitHub/netSerial/netSerial.c.gcov .
+cp ~/.sheepy/build/home/$USER/git/sw/sheepyPackagesGitHub/netSerial/netSerial.c.gcov .