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;
+                            }
+                        }));
+    }
 }

Reply via email to