+2020-11-29 Akim Demaille <akim@lrde.epita.fr>
+
+ bitset: use integer_length in table implementation
+ * lib/bitset/table.c (tbitset_list_reverse): Use
+ BITSET_FOR_EACH_BIT_REVERSE.
+
2020-11-29 Akim Demaille <akim@lrde.epita.fr>
bitset: use integer_length in list implementation
do
{
- for (bitset_word word = srcp[woffset] << (BITSET_WORD_BITS - 1 - bitcnt);
- word; bitcnt--)
+ bitset_word word = srcp[woffset];
+ if (bitcnt + 1 < BITSET_WORD_BITS)
+ /* We're starting in the middle of a word: smash bits to ignore. */
+ word &= ((bitset_word) 1 << (bitcnt + 1)) - 1;
+ BITSET_FOR_EACH_BIT_REVERSE(pos, word)
{
- if (word & BITSET_MSB)
+ list[count++] = bitoff + pos;
+ if (count >= num)
{
- list[count++] = bitoff + bitcnt;
- if (count >= num)
- {
- *next = n_bits - (bitoff + bitcnt);
- return count;
- }
+ *next = n_bits - (bitoff + pos);
+ return count;
}
- word <<= 1;
}
bitoff -= BITSET_WORD_BITS;
bitcnt = BITSET_WORD_BITS - 1;