mirror of
https://github.com/fluencelabs/redis
synced 2025-03-19 17:10:50 +00:00
code to compare strings with entries in ziplist, regardless of their encoding
This commit is contained in:
parent
75d8978e7a
commit
c09c2c3b04
48
ziplist.c
48
ziplist.c
@ -365,6 +365,28 @@ unsigned char *ziplistDelete(unsigned char *zl, unsigned char **p) {
|
|||||||
return zl;
|
return zl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Compare entry pointer to by 'p' with 'entry'. Return 1 if equal. */
|
||||||
|
unsigned int ziplistCompare(unsigned char *p, unsigned char *entry, unsigned int elen) {
|
||||||
|
unsigned int zlen, lensize;
|
||||||
|
char encoding;
|
||||||
|
long long zval, eval;
|
||||||
|
if (*p == ZIP_END) return 0;
|
||||||
|
|
||||||
|
zlen = zipDecodeLength(p,&lensize);
|
||||||
|
if (zipTryEncoding(entry,&eval,&encoding)) {
|
||||||
|
/* Do integer compare */
|
||||||
|
zval = zipLoadInteger(p+lensize,ZIP_ENCODING(p));
|
||||||
|
return zval == eval;
|
||||||
|
} else {
|
||||||
|
/* Raw compare */
|
||||||
|
if (zlen == elen) {
|
||||||
|
return memcmp(p+lensize,entry,elen) == 0;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ziplistRepr(unsigned char *zl) {
|
void ziplistRepr(unsigned char *zl) {
|
||||||
unsigned char *p, encoding;
|
unsigned char *p, encoding;
|
||||||
unsigned int l, lsize;
|
unsigned int l, lsize;
|
||||||
@ -557,7 +579,31 @@ int main(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
ziplistRepr(zl);
|
ziplistRepr(zl);
|
||||||
printf("\n");
|
}
|
||||||
|
|
||||||
|
printf("Compare strings with ziplist entries:\n");
|
||||||
|
{
|
||||||
|
zl = createList();
|
||||||
|
p = ziplistIndex(zl, 0);
|
||||||
|
if (!ziplistCompare(p,"hello",5)) {
|
||||||
|
printf("ERROR\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ziplistCompare(p,"hella",5)) {
|
||||||
|
printf("ERROR\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = ziplistIndex(zl, 3);
|
||||||
|
if (!ziplistCompare(p,"1024",4)) {
|
||||||
|
printf("ERROR\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ziplistCompare(p,"1025",4)) {
|
||||||
|
printf("ERROR\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
printf("SUCCESS\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user