This is an automated email from the ASF dual-hosted git repository.
lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git
The following commit(s) were added to refs/heads/master by this push:
new e2aa008a9 [common] Add some methods to RoaringBitmap32 (#3760)
e2aa008a9 is described below
commit e2aa008a914616a7ae01fe822625929c91a7bb27
Author: hang8929201 <[email protected]>
AuthorDate: Tue Jul 16 21:55:28 2024 +0800
[common] Add some methods to RoaringBitmap32 (#3760)
---
.../org/apache/paimon/utils/RoaringBitmap32.java | 42 ++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git
a/paimon-common/src/main/java/org/apache/paimon/utils/RoaringBitmap32.java
b/paimon-common/src/main/java/org/apache/paimon/utils/RoaringBitmap32.java
index 618f979ea..7b86bae8a 100644
--- a/paimon-common/src/main/java/org/apache/paimon/utils/RoaringBitmap32.java
+++ b/paimon-common/src/main/java/org/apache/paimon/utils/RoaringBitmap32.java
@@ -26,6 +26,7 @@ import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.nio.ByteBuffer;
+import java.util.Iterator;
import java.util.Objects;
/** A compressed bitmap for 32-bit integer. */
@@ -39,6 +40,10 @@ public class RoaringBitmap32 {
this.roaringBitmap = new RoaringBitmap();
}
+ private RoaringBitmap32(RoaringBitmap roaringBitmap) {
+ this.roaringBitmap = roaringBitmap;
+ }
+
public void add(int x) {
roaringBitmap.add(x);
}
@@ -99,6 +104,19 @@ public class RoaringBitmap32 {
roaringBitmap.deserialize(ByteBuffer.wrap(rbmBytes));
}
+ public void flip(final long rangeStart, final long rangeEnd) {
+ roaringBitmap.flip(rangeStart, rangeEnd);
+ }
+
+ public Iterator<Integer> iterator() {
+ return roaringBitmap.iterator();
+ }
+
+ @Override
+ public String toString() {
+ return roaringBitmap.toString();
+ }
+
@VisibleForTesting
public static RoaringBitmap32 bitmapOf(int... dat) {
RoaringBitmap32 roaringBitmap32 = new RoaringBitmap32();
@@ -107,4 +125,28 @@ public class RoaringBitmap32 {
}
return roaringBitmap32;
}
+
+ public static RoaringBitmap32 and(final RoaringBitmap32 x1, final
RoaringBitmap32 x2) {
+ return new RoaringBitmap32(RoaringBitmap.and(x1.roaringBitmap,
x2.roaringBitmap));
+ }
+
+ public static RoaringBitmap32 or(final RoaringBitmap32 x1, final
RoaringBitmap32 x2) {
+ return new RoaringBitmap32(RoaringBitmap.or(x1.roaringBitmap,
x2.roaringBitmap));
+ }
+
+ public static RoaringBitmap32 or(Iterator<RoaringBitmap32> iterator) {
+ return new RoaringBitmap32(
+ RoaringBitmap.or(
+ new Iterator<RoaringBitmap>() {
+ @Override
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ @Override
+ public RoaringBitmap next() {
+ return iterator.next().roaringBitmap;
+ }
+ }));
+ }
}