From 2d201adc2e3e0f1cfbe9880c6fc365bd17661273 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sun, 22 Nov 2020 16:37:37 +0100 Subject: [PATCH] bitset: style: sort header * lib/bitset/base.h (bitset_ffs): Rename as... (bitset_ffs_): this. (bitset_ffs_, BITSET_FOR_EACH_BIT): Move to better places. --- ChangeLog | 7 +++++++ lib/bitset/base.h | 31 +++++++++++++++---------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2c34d92165..01bf7e465f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2020-11-29 Akim Demaille + + bitset: style: sort header + * lib/bitset/base.h (bitset_ffs): Rename as... + (bitset_ffs_): this. + (bitset_ffs_, BITSET_FOR_EACH_BIT): Move to better places. + 2020-11-29 Akim Demaille bitset: tests: check BITSET_FOR_EACH_REVERSE diff --git a/lib/bitset/base.h b/lib/bitset/base.h index 50569a0fc1..a124b0df4d 100644 --- a/lib/bitset/base.h +++ b/lib/bitset/base.h @@ -53,14 +53,6 @@ extern const char * const bitset_type_names[]; typedef unsigned long bitset_word; #define BITSET_WORD_BITS ((unsigned) (CHAR_BIT * sizeof (bitset_word))) -/* Iterate over each set bit of WORD. - Each iteration sets POS to the 0-based index of the next set bit in WORD. - Repeatedly resets bits in WORD in place until it's null. */ -#define BITSET_FOR_EACH_BIT(Pos, Word) \ - for (int Pos = bitset_ffs (Word); \ - 0 <= Pos; \ - Word ^= 1UL << Pos, Pos = bitset_ffs (Word)) - /* Bit index. In theory we might need a type wider than size_t, but in practice we lose at most a factor of CHAR_BIT by going with size_t, and that is good enough. If this type is changed to be @@ -69,14 +61,6 @@ typedef unsigned long bitset_word; The bit and word index types must be unsigned. */ typedef size_t bitset_bindex; -/* First first set bit in WORD. - Indexes start at 0, return -1 if WORD is null. */ -static inline -int bitset_ffs (bitset_word word) -{ - return ffsl ((long) word) - 1; -} - /* Word index. */ typedef size_t bitset_windex; @@ -294,6 +278,13 @@ if (!BITSET_COMPATIBLE_ (DST, SRC1) || !BITSET_COMPATIBLE_ (DST, SRC2) \ #define BITSET_LIST_REVERSE_(BSET, LIST, NUM, NEXT) \ (BSET)->b.vtable->list_reverse (BSET, LIST, NUM, NEXT) +/* Iterate left to right over each set bit of WORD. + Each iteration sets POS to the 0-based index of the next set bit in WORD. + Repeatedly resets bits in WORD in place until it's null. */ +#define BITSET_FOR_EACH_BIT(Pos, Word) \ + for (int Pos = bitset_ffs_ (Word); \ + 0 <= Pos; \ + Word ^= 1UL << Pos, Pos = bitset_ffs_ (Word)) /* Private functions for bitset implementations. */ @@ -317,4 +308,12 @@ void bitset_or_and_ (bitset, bitset, bitset, bitset); bool bitset_or_and_cmp_ (bitset, bitset, bitset, bitset); +/* First set bit in WORD. + Indexes start at 0, return -1 if WORD is null. */ +static inline +int bitset_ffs_ (bitset_word word) +{ + return ffsl ((long) word) - 1; +} + #endif /* _BBITSET_H */ -- 2.39.5