提交 033fb554 编写于 作者: P Pieter Noordhuis

expose extra functionality from ziplist.c

上级 177a0a0b
...@@ -432,6 +432,12 @@ unsigned char *ziplistNext(unsigned char *p) { ...@@ -432,6 +432,12 @@ unsigned char *ziplistNext(unsigned char *p) {
return (p[0] == ZIP_END) ? NULL : p+zipRawEntryLength(p); return (p[0] == ZIP_END) ? NULL : p+zipRawEntryLength(p);
} }
/* Return pointer to previous entry in ziplist. */
unsigned char *ziplistPrev(unsigned char *p) {
zlentry entry = zipEntry(p);
return (entry.prevrawlen == 0) ? NULL : p-entry.prevrawlen;
}
/* Get entry pointer to by 'p' and store in either 'e' or 'v' depending /* Get entry pointer to by 'p' and store in either 'e' or 'v' depending
* on the encoding of the entry. 'e' is always set to NULL to be able * on the encoding of the entry. 'e' is always set to NULL to be able
* to find out whether the string pointer or the integer value was set. * to find out whether the string pointer or the integer value was set.
...@@ -455,10 +461,9 @@ unsigned int ziplistGet(unsigned char *p, char **sstr, unsigned int *slen, long ...@@ -455,10 +461,9 @@ unsigned int ziplistGet(unsigned char *p, char **sstr, unsigned int *slen, long
return 1; return 1;
} }
/* Delete a range of entries from the ziplist. */ /* Insert an entry at "p". */
unsigned char *ziplistDeleteRange(unsigned char *zl, unsigned int index, unsigned int num) { unsigned char *ziplistInsert(unsigned char *zl, unsigned char *p, char *s, unsigned int slen) {
unsigned char *p = ziplistIndex(zl,index); return __ziplistInsert(zl,p,s,slen);
return p == NULL ? zl : __ziplistDelete(zl,p,num);
} }
/* Delete a single entry from the ziplist, pointed to by *p. /* Delete a single entry from the ziplist, pointed to by *p.
...@@ -474,6 +479,12 @@ unsigned char *ziplistDelete(unsigned char *zl, unsigned char **p) { ...@@ -474,6 +479,12 @@ unsigned char *ziplistDelete(unsigned char *zl, unsigned char **p) {
return zl; return zl;
} }
/* Delete a range of entries from the ziplist. */
unsigned char *ziplistDeleteRange(unsigned char *zl, unsigned int index, unsigned int num) {
unsigned char *p = ziplistIndex(zl,index);
return (p == NULL) ? zl : __ziplistDelete(zl,p,num);
}
/* Compare entry pointer to by 'p' with 'entry'. Return 1 if equal. */ /* Compare entry pointer to by 'p' with 'entry'. Return 1 if equal. */
unsigned int ziplistCompare(unsigned char *p, char *sstr, unsigned int slen) { unsigned int ziplistCompare(unsigned char *p, char *sstr, unsigned int slen) {
zlentry entry; zlentry entry;
......
...@@ -6,8 +6,10 @@ unsigned char *ziplistPush(unsigned char *zl, char *s, unsigned int slen, int wh ...@@ -6,8 +6,10 @@ unsigned char *ziplistPush(unsigned char *zl, char *s, unsigned int slen, int wh
unsigned char *ziplistPop(unsigned char *zl, sds *target, int where); unsigned char *ziplistPop(unsigned char *zl, sds *target, int where);
unsigned char *ziplistIndex(unsigned char *zl, int index); unsigned char *ziplistIndex(unsigned char *zl, int index);
unsigned char *ziplistNext(unsigned char *p); unsigned char *ziplistNext(unsigned char *p);
unsigned char *ziplistPrev(unsigned char *p);
unsigned int ziplistGet(unsigned char *p, char **sstr, unsigned int *slen, long long *sval); unsigned int ziplistGet(unsigned char *p, char **sstr, unsigned int *slen, long long *sval);
unsigned char *ziplistDelete(unsigned char *zl, unsigned char **p); unsigned char *ziplistDelete(unsigned char *zl, unsigned char **p);
unsigned char *ziplistInsert(unsigned char *zl, unsigned char *p, char *s, unsigned int slen);
unsigned char *ziplistDeleteRange(unsigned char *zl, unsigned int index, unsigned int num); unsigned char *ziplistDeleteRange(unsigned char *zl, unsigned int index, unsigned int num);
unsigned int ziplistCompare(unsigned char *p, char *entry, unsigned int elen); unsigned int ziplistCompare(unsigned char *p, char *entry, unsigned int elen);
unsigned int ziplistLen(unsigned char *zl); unsigned int ziplistLen(unsigned char *zl);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册