summaryrefslogtreecommitdiffstats
path: root/src/bitset.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2021-09-10 20:47:36 -0400
committerDavid Robillard <d@drobilla.net>2021-09-10 20:54:28 -0400
commit592961cc6b6c92ba6af2c30d01aa4f2a00955b68 (patch)
treefcb4e10c25acf7a33a4290c7e3c5ab2a5711bb5d /src/bitset.c
parent731ce39ef6fa35f64c19947bdb1719028478fdb9 (diff)
downloadzix-592961cc6b6c92ba6af2c30d01aa4f2a00955b68.tar.gz
zix-592961cc6b6c92ba6af2c30d01aa4f2a00955b68.tar.bz2
zix-592961cc6b6c92ba6af2c30d01aa4f2a00955b68.zip
Remove branches from zix_bitset_set() and zix_bitset_reset()
Diffstat (limited to 'src/bitset.c')
-rw-r--r--src/bitset.c24
1 files changed, 10 insertions, 14 deletions
diff --git a/src/bitset.c b/src/bitset.c
index e818225..2779de6 100644
--- a/src/bitset.c
+++ b/src/bitset.c
@@ -45,28 +45,24 @@ zix_bitset_clear(ZixBitset* b, ZixBitsetTally* t, size_t n_bits)
void
zix_bitset_set(ZixBitset* b, ZixBitsetTally* t, size_t i)
{
- const size_t e = i / ZIX_BITSET_ELEM_BIT;
- const size_t ebit = i & (ZIX_BITSET_ELEM_BIT - 1); // i % ELEM_BIT
- const ZixBitset mask = (ZixBitset)1 << ebit;
-
- if (!(b[e] & mask)) {
- ++t[e];
- }
+ const size_t e = i / ZIX_BITSET_ELEM_BIT;
+ const size_t ebit = i & (ZIX_BITSET_ELEM_BIT - 1); // i % ELEM_BIT
+ const ZixBitset mask = (ZixBitset)1 << ebit;
+ const bool is_set = (b[e] & mask);
+ t[e] = (ZixBitsetTally)(t[e] + !is_set);
b[e] |= mask;
}
void
zix_bitset_reset(ZixBitset* b, ZixBitsetTally* t, size_t i)
{
- const size_t e = i / ZIX_BITSET_ELEM_BIT;
- const size_t ebit = i & (ZIX_BITSET_ELEM_BIT - 1); // i % ELEM_BIT
- const ZixBitset mask = (ZixBitset)1 << ebit;
-
- if (b[e] & mask) {
- --t[e];
- }
+ const size_t e = i / ZIX_BITSET_ELEM_BIT;
+ const size_t ebit = i & (ZIX_BITSET_ELEM_BIT - 1); // i % ELEM_BIT
+ const ZixBitset mask = (ZixBitset)1 << ebit;
+ const bool is_set = b[e] & mask;
+ t[e] = (ZixBitsetTally)(t[e] - is_set);
b[e] &= ~mask;
}