#include <sdarray.h>
+#include <stdint.h>
using std::min;
using std::max;
#if 0
static uint __getbits(uint *B, int i, int d)
{
- ulong x;
+ uint64_t x;
B += (i >> logD);
i &= (D-1);
- x = ((ulong *) B)[0];
+ x = ((uint64_t *) B)[0];
x = (x << 32)|(x >> 32);
x = (x << i) >> (2*D - d);
return x;
int i,m;
int nl;
int p,pp;
- int il,is,ml,ms;
+ int il,is,ms,ml;
int r;
uint *s;
for(int k=0;k<nl+1;k++) select->p[k]=0;
select->size += (nl+1)*sizeof(uint);
+
for (r = 0; r < 2; r++) {
ml = ms = 0;
for (il = 0; il < nl; il++) {
select->lp[il] = pp;
i = min((il+1)*L-1,m-1);
p = s[i];
- //printf("%d ",p-pp);
+ // printf("p-pp=%d, LL=%d\n",p-pp, LL);
+
if (p - pp >= LL) {
if (r == 1) {
for (is = 0; is < L; is++) {
select->sl[ml*L+is] = s[il*L+is];
}
}
+
select->p[il] = -((ml<<logL)+1);
ml++;
}
ms++;
}
}
+
if (r == 0) {
select->sl = new uint[ml*L+1];
for(int k=0;k<ml*L+1;k++) select->sl[k]=0;