add function to retrieve length of ziplist

This commit is contained in:
Pieter Noordhuis 2010-05-22 19:35:40 +02:00
parent aa549962a4
commit 6205b46387
2 changed files with 20 additions and 1 deletions

View File

@ -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;

View File

@ -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);