Add new entry to tail node of quicklist. * * Returns 0 if used existing tail. * Returns 1 if new tail created. */
| 514 | * Returns 0 if used existing tail. |
| 515 | * Returns 1 if new tail created. */ |
| 516 | int quicklistPushTail(quicklist *quicklist, void *value, size_t sz) { |
| 517 | quicklistNode *orig_tail = quicklist->tail; |
| 518 | assert(sz < UINT32_MAX); /* TODO: add support for quicklist nodes that are sds encoded (not zipped) */ |
| 519 | if (likely( |
| 520 | _quicklistNodeAllowInsert(quicklist->tail, quicklist->fill, sz))) { |
| 521 | quicklist->tail->zl = |
| 522 | ziplistPush(quicklist->tail->zl, value, sz, ZIPLIST_TAIL); |
| 523 | quicklistNodeUpdateSz(quicklist->tail); |
| 524 | } else { |
| 525 | quicklistNode *node = quicklistCreateNode(); |
| 526 | node->zl = ziplistPush(ziplistNew(), value, sz, ZIPLIST_TAIL); |
| 527 | |
| 528 | quicklistNodeUpdateSz(node); |
| 529 | _quicklistInsertNodeAfter(quicklist, quicklist->tail, node); |
| 530 | } |
| 531 | quicklist->count++; |
| 532 | quicklist->tail->count++; |
| 533 | return (orig_tail != quicklist->tail); |
| 534 | } |
| 535 | |
| 536 | /* Create new node consisting of a pre-formed ziplist. |
| 537 | * Used for loading RDBs where entire ziplists have been stored |
no test coverage detected