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
b83a52c6
Commit
b83a52c6
authored
Apr 27, 2011
by
Pieter Noordhuis
Browse files
Use string2ll in ziplist code (faster)
parent
20dad91b
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/ziplist.c
View file @
b83a52c6
...
@@ -67,10 +67,9 @@
...
@@ -67,10 +67,9 @@
#include <assert.h>
#include <assert.h>
#include <limits.h>
#include <limits.h>
#include "zmalloc.h"
#include "zmalloc.h"
#include "util.h"
#include "ziplist.h"
#include "ziplist.h"
int ll2string(char *s, size_t len, long long value);
#define ZIP_END 255
#define ZIP_END 255
#define ZIP_BIGLEN 254
#define ZIP_BIGLEN 254
...
@@ -248,22 +247,9 @@ static int zipPrevLenByteDiff(unsigned char *p, unsigned int len) {
...
@@ -248,22 +247,9 @@ static int zipPrevLenByteDiff(unsigned char *p, unsigned int len) {
* Stores the integer value in 'v' and its encoding in 'encoding'. */
* Stores the integer value in 'v' and its encoding in 'encoding'. */
static
int
zipTryEncoding
(
unsigned
char
*
entry
,
unsigned
int
entrylen
,
long
long
*
v
,
unsigned
char
*
encoding
)
{
static
int
zipTryEncoding
(
unsigned
char
*
entry
,
unsigned
int
entrylen
,
long
long
*
v
,
unsigned
char
*
encoding
)
{
long
long
value
;
long
long
value
;
char *eptr;
char buf[32];
if
(
entrylen
>=
32
||
entrylen
==
0
)
return
0
;
if
(
entrylen
>=
32
||
entrylen
==
0
)
return
0
;
if (entry[0] == '-' || (entry[0] >= '0' && entry[0] <= '9')) {
if
(
string2ll
((
char
*
)
entry
,
entrylen
,
&
value
))
{
int slen;
/* Perform a back-and-forth conversion to make sure that
* the string turned into an integer is not losing any info. */
memcpy(buf,entry,entrylen);
buf[entrylen] = '\0';
value = strtoll(buf,&eptr,10);
if (eptr[0] != '\0') return 0;
slen = ll2string(buf,32,value);
if (entrylen != (unsigned)slen || memcmp(buf,entry,slen)) return 0;
/* Great, the string can be encoded. Check what's the smallest
/* Great, the string can be encoded. Check what's the smallest
* of our encoding types that can hold this value. */
* of our encoding types that can hold this value. */
if
(
value
>=
INT16_MIN
&&
value
<=
INT16_MAX
)
{
if
(
value
>=
INT16_MIN
&&
value
<=
INT16_MAX
)
{
...
...
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