Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
60c74862
"doc/GetsetCommand.html" did not exist on "73287b2b576fa6a1ff1b61467286cbd5458881d2"
Commit
60c74862
authored
Jan 22, 2014
by
Xiaojie Zhang
Committed by
antirez
Aug 27, 2014
Browse files
Avoid unnecessary decoding in ziplist.c
Closes #1519
parent
96614f58
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/ziplist.c
View file @
60c74862
...
...
@@ -576,19 +576,19 @@ static unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsig
/* Insert item at "p". */
static
unsigned
char
*
__ziplistInsert
(
unsigned
char
*
zl
,
unsigned
char
*
p
,
unsigned
char
*
s
,
unsigned
int
slen
)
{
size_t
curlen
=
intrev32ifbe
(
ZIPLIST_BYTES
(
zl
)),
reqlen
,
prevlen
=
0
;
size_t
curlen
=
intrev32ifbe
(
ZIPLIST_BYTES
(
zl
)),
reqlen
;
unsigned
int
prevlensize
,
prevlen
=
0
;
size_t
offset
;
int
nextdiff
=
0
;
unsigned
char
encoding
=
0
;
long
long
value
=
123456789
;
/* initialized to avoid warning. Using a value
that is easy to see if for some reason
we use it uninitialized. */
zlentry
entry
,
tail
;
zlentry
tail
;
/* Find out prevlen for the entry that is inserted. */
if
(
p
[
0
]
!=
ZIP_END
)
{
entry
=
zipEntry
(
p
);
prevlen
=
entry
.
prevrawlen
;
ZIP_DECODE_PREVLEN
(
p
,
prevlensize
,
prevlen
);
}
else
{
unsigned
char
*
ptail
=
ZIPLIST_ENTRY_TAIL
(
zl
);
if
(
ptail
[
0
]
!=
ZIP_END
)
{
...
...
@@ -676,15 +676,15 @@ unsigned char *ziplistPush(unsigned char *zl, unsigned char *s, unsigned int sle
* doesn't contain an element at the provided index, NULL is returned. */
unsigned
char
*
ziplistIndex
(
unsigned
char
*
zl
,
int
index
)
{
unsigned
char
*
p
;
zlentry
entry
;
unsigned
int
prevlensize
,
prevlen
=
0
;
if
(
index
<
0
)
{
index
=
(
-
index
)
-
1
;
p
=
ZIPLIST_ENTRY_TAIL
(
zl
);
if
(
p
[
0
]
!=
ZIP_END
)
{
entry
=
zipEntry
(
p
);
while
(
entry
.
prev
raw
len
>
0
&&
index
--
)
{
p
-=
entry
.
prev
raw
len
;
entry
=
zipEntry
(
p
);
ZIP_DECODE_PREVLEN
(
p
,
prevlensize
,
prevlen
);
while
(
prevlen
>
0
&&
index
--
)
{
p
-=
prevlen
;
ZIP_DECODE_PREVLEN
(
p
,
prevlensize
,
prevlen
);
}
}
}
else
{
...
...
@@ -722,7 +722,7 @@ unsigned char *ziplistNext(unsigned char *zl, unsigned char *p) {
/* Return pointer to previous entry in ziplist. */
unsigned
char
*
ziplistPrev
(
unsigned
char
*
zl
,
unsigned
char
*
p
)
{
zlentry
entry
;
unsigned
int
prevlensize
,
prevlen
=
0
;
/* Iterating backwards from ZIP_END should return the tail. When "p" is
* equal to the first element of the list, we're already at the head,
...
...
@@ -733,9 +733,9 @@ unsigned char *ziplistPrev(unsigned char *zl, unsigned char *p) {
}
else
if
(
p
==
ZIPLIST_ENTRY_HEAD
(
zl
))
{
return
NULL
;
}
else
{
entry
=
zipEntry
(
p
);
assert
(
entry
.
prev
raw
len
>
0
);
return
p
-
entry
.
prev
raw
len
;
ZIP_DECODE_PREVLEN
(
p
,
prevlensize
,
prevlen
);
assert
(
prevlen
>
0
);
return
p
-
prevlen
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment