mirror of
https://github.com/fluencelabs/redis
synced 2025-03-23 11:00:50 +00:00
add function to retrieve length of ziplist
This commit is contained in:
parent
aa549962a4
commit
6205b46387
18
ziplist.c
18
ziplist.c
@ -388,6 +388,24 @@ unsigned int ziplistCompare(unsigned char *p, unsigned char *entry, unsigned int
|
||||
}
|
||||
}
|
||||
|
||||
/* Return length of ziplist. */
|
||||
unsigned int ziplistLen(unsigned char *zl) {
|
||||
unsigned int len = 0;
|
||||
if (ZIPLIST_LENGTH(zl) < ZIP_BIGLEN) {
|
||||
len = ZIPLIST_LENGTH(zl);
|
||||
} else {
|
||||
unsigned char *p = zl+ZIPLIST_HEADER_SIZE;
|
||||
while (*p != ZIP_END) {
|
||||
p += zipRawEntryLength(p);
|
||||
len++;
|
||||
}
|
||||
|
||||
/* Re-store length if small enough */
|
||||
if (len < ZIP_BIGLEN) ZIPLIST_LENGTH(zl) = len;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
void ziplistRepr(unsigned char *zl) {
|
||||
unsigned char *p, encoding;
|
||||
unsigned int l, lsize;
|
||||
|
@ -9,4 +9,5 @@ unsigned char *ziplistNext(unsigned char *p);
|
||||
unsigned int ziplistGet(unsigned char *p, unsigned char **e, unsigned int *elen, long long *v);
|
||||
unsigned char *ziplistDelete(unsigned char *zl, unsigned char **p);
|
||||
unsigned char *ziplistDeleteRange(unsigned char *zl, unsigned int index, unsigned int num);
|
||||
unsigned int ziplistCompare(unsigned char *p, unsigned char *entry, unsigned int elen);
|
||||
unsigned int ziplistCompare(unsigned char *p, unsigned char *entry, unsigned int elen);
|
||||
unsigned int ziplistLen(unsigned char *zl);
|
Loading…
x
Reference in New Issue
Block a user