private static int Find1span(byte[] bp, int offset, int bs, int be)
{
int bits = be - bs;
int n, span;
int pos = offset + (bs >> 3);
/*
* Check partial byte on lhs.
*/
if (bits > 0 && (n = (bs & 7)) != 0) {
span = oneruns[((int)bp[pos] << n) & 0xff];
if (span > 8-n) /* table value too generous */
span = 8-n;
if (span > bits) /* constrain span to bit range */
span = bits;
if (n+span < 8) /* doesn't extend to edge of byte */
return (span);
bits -= span;
pos++;
} else
span = 0;
/*
* Scan full bytes for all 1's.
*/
while (bits >= 8) {
if (bp[pos] != 0xff) /* end of run */
return (span + oneruns[bp[pos] & 0xff]);
span += 8;
bits -= 8;
pos++;
}
/*
* Check partial byte on rhs.
*/
if (bits > 0) {
n = oneruns[bp[pos] & 0xff];
span += (n > bits ? bits : n);
}
return (span);
}