Hi,

Thanks! Your solution is faster, but I like to wait implementing it
unless it is really a measurable performance problem, because the
solution is quite complex :-) Maybe I will just switch to BitSet at
some point.

Regards,
Thomas




On Thu, Oct 16, 2008 at 5:25 PM, Alex <[EMAIL PROTECTED]> wrote:
>
> Hello Thomas,
>
> I checked again and you are correct the code is not broken, it just
> iterates bit by bit twice on the first long and on the last long.
> If you'd like to try below is the code that does not iterate bit by
> bit at all. I did not test it with the H2 myself.
>
>    public int nextSetBit1(int fromIndex) {
>        int result = -1;
>
>        int dataIndex = fromIndex >> ADDRESS_BITS;
>        int bitIndex = fromIndex - (dataIndex << ADDRESS_BITS);
>
>        long l = data[dataIndex];
>        l = clearLowBits(l, bitIndex);
>        while(l==0) {
>          dataIndex++;
>          if (dataIndex >= data.length) break;
>          l = data[dataIndex];
>        }
>
>        if (l != 0)
>          result = (dataIndex << ADDRESS_BITS) + lowestSetBit(l);
>
>
>        return result;
>    }
>
>
>    private static int lowestSetBit(long data)
>    {
>        int result = 0;
>
>        data &= -data;
>
>        if ((data & 0xffffffff00000000L) != 0)  result += 32;
>        if ((data & 0xffff0000ffff0000L) != 0)  result += 16;
>        if ((data & 0xff00ff00ff00ff00L) != 0)  result += 8;
>        if ((data & 0xf0f0f0f0f0f0f0f0L) != 0)  result += 4;
>        if ((data & 0xccccccccccccccccL) != 0)  result += 2;
>        if ((data & 0xaaaaaaaaaaaaaaaaL) != 0)  result += 1;
>
>        return result;
>    }
>
>    private static long clearLowBits(long data, int cnt)
>    {
>        long result = data;
>
>        if (cnt > 0)
>        {
>                long mask = 1;
>                if (cnt > 1) mask = (0xAAAAAAAAAAAAAAAAL >>> (BITS-cnt)) |
>                                                        (0xAAAAAAAAAAAAAAAAL 
> >>> (BITS-(cnt-1)));
>                result &= ~mask;
>        }
>
>       return result;
> }
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/h2-database?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to