Algorithm-BinarySearch-Vec
view release on metacpan or search on metacpan
static inline int absv_cmp(ABSV_UINT a, ABSV_UINT b)
{
if (a<b) return -1;
else if (a>b) return 1;
return 0;
}
//--------------------------------------------------------------
static inline ABSV_UINT absv_vget(const uchar *v, ABSV_UINT i, ABSV_UINT nbits)
{
//fprintf(stderr, "DEBUG: absv_vget() called with INDEX=%lu, NBITS=%lu\n", i, nbits);
switch (nbits) {
case 1: return (v[i>>3] >> (i&7) ) & 1;
case 2: return (v[i>>2] >> ((i&3)<<1)) & 3;
case 4: return (v[i>>1] >> ((i&1)<<2)) & 15;
case 8: return (v[i]);
case 16: i <<= 1; return (v[i]<<8) | (v[i+1]);
case 32: i <<= 2; return (v[i]<<24) | (v[i+1]<<16) | (v[i+2]<<8) | (v[i+3]);
#ifdef ABSV_HAVE_QUAD
case 64:
i <<= 3;
( run in 0.870 second using v1.01-cache-2.11-cpan-49f99fa48dc )