aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSet.java8
-rw-r--r--unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSetMethods.java7
-rw-r--r--unsafe/src/test/java/org/apache/spark/unsafe/bitset/BitSetSuite.java7
3 files changed, 19 insertions, 3 deletions
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSet.java b/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSet.java
index f72e07fce9..28e23da108 100644
--- a/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSet.java
+++ b/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSet.java
@@ -102,4 +102,12 @@ public final class BitSet {
public int nextSetBit(int fromIndex) {
return BitSetMethods.nextSetBit(baseObject, baseOffset, fromIndex, numWords);
}
+
+ /**
+ * Returns {@code true} if any bit is set.
+ */
+ public boolean anySet() {
+ return BitSetMethods.anySet(baseObject, baseOffset, numWords);
+ }
+
}
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSetMethods.java b/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSetMethods.java
index f30626d8f4..0987191c1c 100644
--- a/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSetMethods.java
+++ b/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSetMethods.java
@@ -70,9 +70,10 @@ public final class BitSetMethods {
/**
* Returns {@code true} if any bit is set.
*/
- public static boolean anySet(Object baseObject, long baseOffset, long bitSetWidthInBytes) {
- for (int i = 0; i <= bitSetWidthInBytes; i++) {
- if (PlatformDependent.UNSAFE.getByte(baseObject, baseOffset + i) != 0) {
+ public static boolean anySet(Object baseObject, long baseOffset, long bitSetWidthInWords) {
+ long addr = baseOffset;
+ for (int i = 0; i < bitSetWidthInWords; i++, addr += WORD_SIZE) {
+ if (PlatformDependent.UNSAFE.getLong(baseObject, addr) != 0) {
return true;
}
}
diff --git a/unsafe/src/test/java/org/apache/spark/unsafe/bitset/BitSetSuite.java b/unsafe/src/test/java/org/apache/spark/unsafe/bitset/BitSetSuite.java
index e3a824e29b..18393db9f3 100644
--- a/unsafe/src/test/java/org/apache/spark/unsafe/bitset/BitSetSuite.java
+++ b/unsafe/src/test/java/org/apache/spark/unsafe/bitset/BitSetSuite.java
@@ -39,6 +39,8 @@ public class BitSetSuite {
for (int i = 0; i < bs.capacity(); i++) {
Assert.assertFalse(bs.isSet(i));
}
+ // another form of asserting that the bit set is empty
+ Assert.assertFalse(bs.anySet());
// Set every bit and check it.
for (int i = 0; i < bs.capacity(); i++) {
@@ -52,6 +54,11 @@ public class BitSetSuite {
bs.unset(i);
Assert.assertFalse(bs.isSet(i));
}
+
+ // Make sure anySet() can detect any set bit
+ bs = createBitSet(256);
+ bs.set(64);
+ Assert.assertTrue(bs.anySet());
}
@Test