mirror of
https://github.com/fluencelabs/redis
synced 2025-03-19 09:00:51 +00:00
minor fixes for zipmap.c
This commit is contained in:
parent
8ec0832157
commit
be0af2f0ec
11
zipmap.c
11
zipmap.c
@ -67,14 +67,14 @@
|
||||
*
|
||||
* The most compact representation of the above two elements hash is actually:
|
||||
*
|
||||
* "\x00\x03\x00foo\x03\x00bar\x05\x00hello\x05\x00world\xff"
|
||||
* "\x00\x03foo\x03\x00bar\x05hello\x05\x00world\xff"
|
||||
*
|
||||
* Empty space is marked using a 254 bytes + a <len> (coded as already
|
||||
* specified). The length includes the 254 bytes in the count and the
|
||||
* space taken by the <len> field. So for instance removing the "foo" key
|
||||
* from the zipmap above will lead to the following representation:
|
||||
*
|
||||
* "\xfd\x10........\x05\x00hello\x05\x00world\xff"
|
||||
* "\x00\xfd\x10........\x05hello\x05\x00world\xff"
|
||||
*
|
||||
* Note that because empty space, keys, values, are all prefixed length
|
||||
* "objects", the lookup will take O(N) where N is the numeber of elements
|
||||
@ -240,9 +240,10 @@ unsigned char *zipmapSet(unsigned char *zm, unsigned char *key, unsigned int kle
|
||||
b += freelen;
|
||||
freelen += zipmapRawValueLength(b);
|
||||
if (freelen < reqlen) {
|
||||
/* Mark this blog as free and recurse */
|
||||
/* Mark this entry as free and recurse */
|
||||
p[0] = ZIPMAP_EMPTY;
|
||||
zipmapEncodeLength(p+1,freelen);
|
||||
zm[0] |= ZIPMAP_STATUS_FRAGMENTED;
|
||||
return zipmapSet(zm,key,klen,val,vlen);
|
||||
}
|
||||
}
|
||||
@ -322,5 +323,9 @@ int main(void) {
|
||||
zm = zipmapSet(zm,(unsigned char*) "foo",3, (unsigned char*) "bar",3);
|
||||
zm = zipmapSet(zm,(unsigned char*) "foo",3, (unsigned char*) "!",1);
|
||||
zipmapRepr(zm);
|
||||
zm = zipmapSet(zm,(unsigned char*) "foo",3, (unsigned char*) "12345",5);
|
||||
zipmapRepr(zm);
|
||||
zm = zipmapSet(zm,(unsigned char*) "new",3, (unsigned char*) "xx",2);
|
||||
zipmapRepr(zm);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user