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
28dce36f
Commit
28dce36f
authored
Mar 29, 2014
by
antirez
Browse files
Use processor base types in HLL_(GET|SET)_REGISTER.
This speedups the macros by a noticeable factor.
parent
ac8fbe88
Changes
1
Show whitespace changes
Inline
Side-by-side
src/hyperloglog.c
View file @
28dce36f
...
@@ -160,9 +160,9 @@
...
@@ -160,9 +160,9 @@
* 'p' is an array of unsigned bytes. */
* 'p' is an array of unsigned bytes. */
#define HLL_GET_REGISTER(target,p,regnum) do { \
#define HLL_GET_REGISTER(target,p,regnum) do { \
uint8_t *_p = (uint8_t*) p; \
uint8_t *_p = (uint8_t*) p; \
int
_byte = regnum*REDIS_HLL_BITS/8; \
unsigned long
_byte = regnum*REDIS_HLL_BITS/8; \
int
_leftshift = regnum*REDIS_HLL_BITS&7; \
unsigned long
_leftshift = regnum*REDIS_HLL_BITS&7; \
int
_rightshift = 8 - _leftshift; \
unsigned long
_rightshift = 8 - _leftshift; \
target = ((_p[_byte] << _leftshift) | \
target = ((_p[_byte] << _leftshift) | \
(_p[_byte+1] >> _rightshift)) & \
(_p[_byte+1] >> _rightshift)) & \
REDIS_HLL_REGISTER_MAX; \
REDIS_HLL_REGISTER_MAX; \
...
@@ -172,9 +172,9 @@
...
@@ -172,9 +172,9 @@
* 'p' is an array of unsigned bytes. */
* 'p' is an array of unsigned bytes. */
#define HLL_SET_REGISTER(p,regnum,val) do { \
#define HLL_SET_REGISTER(p,regnum,val) do { \
uint8_t *_p = (uint8_t*) p; \
uint8_t *_p = (uint8_t*) p; \
int
_byte = regnum*REDIS_HLL_BITS/8; \
unsigned long
_byte = regnum*REDIS_HLL_BITS/8; \
int
_leftshift = regnum*REDIS_HLL_BITS&7; \
unsigned long
_leftshift = regnum*REDIS_HLL_BITS&7; \
int
_rightshift = 8 - _leftshift; \
unsigned long
_rightshift = 8 - _leftshift; \
_p[_byte] &= ~(REDIS_HLL_REGISTER_MAX >> _leftshift); \
_p[_byte] &= ~(REDIS_HLL_REGISTER_MAX >> _leftshift); \
_p[_byte] |= val >> _leftshift; \
_p[_byte] |= val >> _leftshift; \
_p[_byte+1] &= ~(REDIS_HLL_REGISTER_MAX << _rightshift); \
_p[_byte+1] &= ~(REDIS_HLL_REGISTER_MAX << _rightshift); \
...
@@ -290,10 +290,10 @@ uint64_t hllCount(uint8_t *registers) {
...
@@ -290,10 +290,10 @@ uint64_t hllCount(uint8_t *registers) {
initialized
=
1
;
initialized
=
1
;
}
}
/* Compute SUM(2^-register[0..i]). */
for
(
j
=
0
;
j
<
REDIS_HLL_REGISTERS
;
j
++
)
{
for
(
j
=
0
;
j
<
REDIS_HLL_REGISTERS
;
j
++
)
{
u
int8_t
reg
;
u
nsigned
long
reg
;
/* Compute SUM(2^-register[0..i]). */
HLL_GET_REGISTER
(
reg
,
registers
,
j
);
HLL_GET_REGISTER
(
reg
,
registers
,
j
);
if
(
reg
==
0
)
{
if
(
reg
==
0
)
{
ez
++
;
ez
++
;
...
...
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