MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / activeDefragList

Function activeDefragList

src/defrag.cpp:315–346  ·  view source on GitHub ↗

Defrag a list of ptr, sds or robj string values */

Source from the content-addressed store, hash-verified

313
314/* Defrag a list of ptr, sds or robj string values */
315long activeDefragList(list *l, int val_type) {
316 long defragged = 0;
317 listNode *ln, *newln;
318 for (ln = l->head; ln; ln = ln->next) {
319 if ((newln = (listNode*)activeDefragAlloc(ln))) {
320 if (newln->prev)
321 newln->prev->next = newln;
322 else
323 l->head = newln;
324 if (newln->next)
325 newln->next->prev = newln;
326 else
327 l->tail = newln;
328 ln = newln;
329 defragged++;
330 }
331 if (val_type == DEFRAG_SDS_DICT_VAL_IS_SDS) {
332 sds newsds, sdsele = (sds)ln->value;
333 if ((newsds = activeDefragSds(sdsele)))
334 ln->value = newsds, defragged++;
335 } else if (val_type == DEFRAG_SDS_DICT_VAL_IS_STROB) {
336 robj *newele, *ele = (robj*)ln->value;
337 if ((newele = activeDefragStringOb(ele, &defragged)))
338 ln->value = newele;
339 } else if (val_type == DEFRAG_SDS_DICT_VAL_VOID_PTR) {
340 void *newptr, *ptr = ln->value;
341 if ((newptr = activeDefragAlloc(ptr)))
342 ln->value = newptr, defragged++;
343 }
344 }
345 return defragged;
346}
347
348/* Defrag a list of sds values and a dict with the same sds keys */
349long activeDefragSdsListAndDict(list *l, dict *d, int dict_val_type) {

Callers

nothing calls this directly

Calls 3

activeDefragAllocFunction · 0.85
activeDefragSdsFunction · 0.85
activeDefragStringObFunction · 0.85

Tested by

no test coverage detected