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:
|
* 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
|
* 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
|
* 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
|
* space taken by the <len> field. So for instance removing the "foo" key
|
||||||
* from the zipmap above will lead to the following representation:
|
* 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
|
* 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
|
* "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;
|
b += freelen;
|
||||||
freelen += zipmapRawValueLength(b);
|
freelen += zipmapRawValueLength(b);
|
||||||
if (freelen < reqlen) {
|
if (freelen < reqlen) {
|
||||||
/* Mark this blog as free and recurse */
|
/* Mark this entry as free and recurse */
|
||||||
p[0] = ZIPMAP_EMPTY;
|
p[0] = ZIPMAP_EMPTY;
|
||||||
zipmapEncodeLength(p+1,freelen);
|
zipmapEncodeLength(p+1,freelen);
|
||||||
|
zm[0] |= ZIPMAP_STATUS_FRAGMENTED;
|
||||||
return zipmapSet(zm,key,klen,val,vlen);
|
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*) "bar",3);
|
||||||
zm = zipmapSet(zm,(unsigned char*) "foo",3, (unsigned char*) "!",1);
|
zm = zipmapSet(zm,(unsigned char*) "foo",3, (unsigned char*) "!",1);
|
||||||
zipmapRepr(zm);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user