You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
REDIS_STATICvoid__quicklistCompress(constquicklist*quicklist,
quicklistNode*node) {
/* If length is less than our compress depth (from both sides), * we can't compress anything. */if (!quicklistAllowsCompression(quicklist) ||quicklist->len< (unsigned int)(quicklist->compress*2))
return;
#if0/* Optimized cases for small depth counts */if (quicklist->compress==1) {
quicklistNode*h=quicklist->head, *t=quicklist->tail;
quicklistDecompressNode(h);
quicklistDecompressNode(t);
if (h!=node&&t!=node)
quicklistCompressNode(node);
return;
} elseif (quicklist->compress==2) {
quicklistNode*h=quicklist->head, *hn=h->next, *hnn=hn->next;
quicklistNode*t=quicklist->tail, *tp=t->prev, *tpp=tp->prev;
quicklistDecompressNode(h);
quicklistDecompressNode(hn);
quicklistDecompressNode(t);
quicklistDecompressNode(tp);
if (h!=node&&hn!=node&&t!=node&&tp!=node) {
quicklistCompressNode(node);
}
if (hnn!=t) {
quicklistCompressNode(hnn);
}
if (tpp!=h) {
quicklistCompressNode(tpp);
}
return;
}
#endif/* Iterate until we reach compress depth for both sides of the list.a * Note: because we do length checks at the *top* of this function, * we can skip explicit null checks below. Everything exists. */quicklistNode*forward=quicklist->head;
quicklistNode*reverse=quicklist->tail;
intdepth=0;
intin_depth=0;
while (depth++<quicklist->compress) {
quicklistDecompressNode(forward);
quicklistDecompressNode(reverse);
if (forward==node||reverse==node)
in_depth=1;
if (forward==reverse)
return;
forward=forward->next;
reverse=reverse->prev;
}
if (!in_depth)
quicklistCompressNode(node);
if (depth>2) {
/* At this point, forward and reverse are one node beyond depth */quicklistCompressNode(forward);
quicklistCompressNode(reverse);
}
}
The compress field of quicklist stands for depth of end nodes not to compress. Here is a sample:
When there are 4 quicklistNodes in quicklist, and the compress field of the quicklist is 2, when calls
__quicklistCompress(), after the while statement, the depth is 3, forward points to 3rd quicklistNode,
and reverse points to 2nd quicklistNode, then quicklistCompressNode(forward); quicklistCompressNode(reverse); As a result, the quicklist only has 1st quicklistNode and 4th quicklistNode uncompressed. Is this right? The quicklist must have top 2 quicklistNode and tail 2 quicklistNode uncompressed?
The text was updated successfully, but these errors were encountered:
The compress field of quicklist stands for depth of end nodes not to compress. Here is a sample:
When there are 4 quicklistNodes in quicklist, and the compress field of the quicklist is 2, when calls
__quicklistCompress(), after the while statement, the depth is 3, forward points to 3rd quicklistNode,
and reverse points to 2nd quicklistNode, then quicklistCompressNode(forward); quicklistCompressNode(reverse); As a result, the quicklist only has 1st quicklistNode and 4th quicklistNode uncompressed. Is this right? The quicklist must have top 2 quicklistNode and tail 2 quicklistNode uncompressed?
The text was updated successfully, but these errors were encountered: