public int NextSetBit(int fromIndex)
{
if (fromIndex < 0)
throw new ArgumentOutOfRangeException("fromIndex");
if (IsEmpty())
return -1;
int i = fromIndex / BitsPerElement;
if (i >= _data.Length)
return -1;
ulong current = _data[i] & ~((1UL << (fromIndex % BitsPerElement)) - 1);
while (true)
{
int bit = BitScanForward(current);
if (bit >= 0)
return bit + i * BitsPerElement;
i++;
if (i >= _data.Length)
break;
current = _data[i];
}
return -1;
}