TurboPFor: Elias fano encode/decode
This commit is contained in:
10
eliasfano.c
10
eliasfano.c
@ -159,10 +159,10 @@ unsigned char *TEMPLATE2(EFANOENC, USIZE)(uint_t *__restrict in, unsigned n, uns
|
|||||||
|
|
||||||
memset(op, 0, hl);
|
memset(op, 0, hl);
|
||||||
for(i = 0; i != n&~3; ) {
|
for(i = 0; i != n&~3; ) {
|
||||||
x = i + (EFE(in,i,start) >> lb), op[x >> 3] |= 1u << (x & 7); ++i;
|
x = i + (EFE(in,i,start) >> lb), op[x >> 3] |= (uint_t)1 << (x & 7); ++i;
|
||||||
x = i + (EFE(in,i,start) >> lb), op[x >> 3] |= 1u << (x & 7); ++i;
|
x = i + (EFE(in,i,start) >> lb), op[x >> 3] |= (uint_t)1 << (x & 7); ++i;
|
||||||
x = i + (EFE(in,i,start) >> lb), op[x >> 3] |= 1u << (x & 7); ++i;
|
x = i + (EFE(in,i,start) >> lb), op[x >> 3] |= (uint_t)1 << (x & 7); ++i;
|
||||||
x = i + (EFE(in,i,start) >> lb), op[x >> 3] |= 1u << (x & 7); ++i;
|
x = i + (EFE(in,i,start) >> lb), op[x >> 3] |= (uint_t)1 << (x & 7); ++i;
|
||||||
}
|
}
|
||||||
while(i < n) x = i + (EFE(in,i,start) >> lb), op[x >> 3] |= (uint_t)1 << (x & 7),++i;
|
while(i < n) x = i + (EFE(in,i,start) >> lb), op[x >> 3] |= (uint_t)1 << (x & 7),++i;
|
||||||
if(pa != _pa) free(pa);
|
if(pa != _pa) free(pa);
|
||||||
@ -171,7 +171,7 @@ unsigned char *TEMPLATE2(EFANOENC, USIZE)(uint_t *__restrict in, unsigned n, uns
|
|||||||
|
|
||||||
unsigned char *TEMPLATE2(EFANODEC, USIZE)(unsigned char *__restrict in, unsigned n, uint_t *__restrict out, uint_t start) {
|
unsigned char *TEMPLATE2(EFANODEC, USIZE)(unsigned char *__restrict in, unsigned n, uint_t *__restrict out, uint_t start) {
|
||||||
unsigned char *ip = in;
|
unsigned char *ip = in;
|
||||||
unsigned i,j,lb = *ip++;
|
uint_t i,j,lb = *ip++;
|
||||||
uint64_t b,x;
|
uint64_t b,x;
|
||||||
if(!n)
|
if(!n)
|
||||||
return in;
|
return in;
|
||||||
|
Reference in New Issue
Block a user