diff options
| author | 2026-02-23 20:33:42 +0100 | |
|---|---|---|
| committer | 2026-02-23 20:33:42 +0100 | |
| commit | 4e9020dfb847d80475415f9f5914efaa50238767 (patch) | |
| tree | 2929decccea0182ea83da656c926211168e941f7 /common.h | |
| parent | 821db6af0a5b1894152c772d765762b7bdbf5d93 (diff) | |
cpp: add __COUNTER__ macro
Diffstat (limited to 'common.h')
| -rw-r--r-- | common.h | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -376,6 +376,20 @@ bsiter(uint *i, struct bitset bs[/*siz*/], uint siz) } #define bs_each(T, var, bs, siz) for (T (var) = 0; bsiter(&(var), (bs), (siz)); ++(var)) +static inline bool +bsiterzr(uint *i, struct bitset bs[/*siz*/], uint siz) +{ + uint k = *i/BSNBIT, j = *i%BSNBIT; + if (k >= siz) return 0; + size_t t = ~bs[k].u & ~(((size_t)1 << j) - 1); + while (!t) { + if (++k >= siz) return 0; + t = ~bs[k].u; + } + *i = k*BSNBIT + lowestsetbit(t); + return 1; +} + /********/ /** IO **/ /********/ |