About Social Code
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/util/bitset.h8
-rw-r--r--src/util/tests/bitset_test.cpp6
2 files changed, 7 insertions, 7 deletions
diff --git a/src/util/bitset.h b/src/util/bitset.h
index d5b5d6dae2d..cffbb73ecce 100644
--- a/src/util/bitset.h
+++ b/src/util/bitset.h
@@ -205,11 +205,11 @@ __bitset_shl(BITSET_WORD *x, unsigned amount, unsigned n)
#define BITSET_SHL(x, n) \
__bitset_shl(x, n, ARRAY_SIZE(x));
-/* bit range operations
+/* bit range operations (e=end is inclusive)
*/
-#define BITSET_TEST_RANGE_INSIDE_WORD(x, b, e) \
+#define BITSET_TEST_RANGE_INSIDE_WORD(x, b, e, mask) \
(BITSET_BITWORD(b) == BITSET_BITWORD(e) ? \
- (((x)[BITSET_BITWORD(b)] & BITSET_RANGE(b, e)) != 0) : \
+ (((x)[BITSET_BITWORD(b)] & BITSET_RANGE(b, e)) == mask) : \
(assert (!"BITSET_TEST_RANGE: bit range crosses word boundary"), 0))
#define BITSET_SET_RANGE_INSIDE_WORD(x, b, e) \
(BITSET_BITWORD(b) == BITSET_BITWORD(e) ? \
@@ -227,7 +227,7 @@ __bitset_test_range(const BITSET_WORD *r, unsigned start, unsigned end)
const unsigned start_mod = start % BITSET_WORDBITS;
if (start_mod + size <= BITSET_WORDBITS) {
- return BITSET_TEST_RANGE_INSIDE_WORD(r, start, end);
+ return !BITSET_TEST_RANGE_INSIDE_WORD(r, start, end, 0);
} else {
const unsigned first_size = BITSET_WORDBITS - start_mod;
diff --git a/src/util/tests/bitset_test.cpp b/src/util/tests/bitset_test.cpp
index ec3ba5104ab..5c69c5ac0b1 100644
--- a/src/util/tests/bitset_test.cpp
+++ b/src/util/tests/bitset_test.cpp
@@ -74,8 +74,8 @@ TEST(bitset, test_basic_range)
const int max_set = 15;
BITSET_SET_RANGE_INSIDE_WORD(mask128, 0, max_set);
- EXPECT_EQ(BITSET_TEST_RANGE_INSIDE_WORD(mask128, 0, max_set), true);
- EXPECT_EQ(BITSET_TEST_RANGE_INSIDE_WORD(mask128, max_set + 1, max_set + 15), false);
+ EXPECT_EQ(!BITSET_TEST_RANGE_INSIDE_WORD(mask128, 0, max_set, 0), true);
+ EXPECT_EQ(!BITSET_TEST_RANGE_INSIDE_WORD(mask128, max_set + 1, max_set + 15, 0), false);
for (int i = 0; i < 128; i++) {
if (i <= max_set)
EXPECT_EQ(BITSET_TEST(mask128, i), true);
@@ -83,7 +83,7 @@ TEST(bitset, test_basic_range)
EXPECT_EQ(BITSET_TEST(mask128, i), false);
}
BITSET_CLEAR_RANGE(mask128, 0, max_set);
- EXPECT_EQ(BITSET_TEST_RANGE_INSIDE_WORD(mask128, 0, max_set), false);
+ EXPECT_EQ(!BITSET_TEST_RANGE_INSIDE_WORD(mask128, 0, max_set, 0), false);
for (int i = 0; i < 128; i++) {
EXPECT_EQ(BITSET_TEST(mask128, i), false);
}