You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hx...@apache.org on 2021/03/18 17:05:58 UTC

[iotdb] 02/02: add bitmap class

This is an automated email from the ASF dual-hosted git repository.

hxd pushed a commit to branch encoding_parallel
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit de362d36dfa628746a6f93aa20d13382d4f90c47
Author: xiangdong huang <sa...@gmail.com>
AuthorDate: Fri Mar 19 01:05:22 2021 +0800

    add bitmap class
---
 .../java/org/apache/iotdb/db/utils/BitMap.java     | 87 ++++++++++++++++++++++
 1 file changed, 87 insertions(+)

diff --git a/server/src/main/java/org/apache/iotdb/db/utils/BitMap.java b/server/src/main/java/org/apache/iotdb/db/utils/BitMap.java
new file mode 100644
index 0000000..d62097b
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/utils/BitMap.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.utils;
+
+import java.util.Arrays;
+
+public class BitMap {
+  private static final byte[] BIT_UTIL = new byte[] {1, 2, 4, 8, 16, 32, 64, -128};
+  private static final byte[] UNMARK_BIT_UTIL =
+      new byte[] {
+        (byte) 0XFE,
+        (byte) 0XFD,
+        (byte) 0XFA,
+        (byte) 0XF7,
+        (byte) 0XEF,
+        (byte) 0XDF,
+        (byte) 0XAF,
+        (byte) 0X7F
+      };
+
+  private byte[] bits;
+  private int size;
+
+  public BitMap(int size) {
+    this.size = size;
+    bits = new byte[size / Byte.SIZE + 1];
+    Arrays.fill(bits, (byte) 0);
+  }
+
+  /** mark as 1 at the given bit position */
+  public void mark(int position) {
+    bits[position / Byte.SIZE] |= BIT_UTIL[position % Byte.SIZE];
+  }
+
+  /** mark as 0 at the given bit position */
+  public void unmark(int position) {
+    bits[position / Byte.SIZE] &= UNMARK_BIT_UTIL[position % Byte.SIZE];
+  }
+
+  /** whether all bits are one */
+  public boolean isAllZero() {
+    int j;
+    for (j = 0; j < size / Byte.SIZE; j++) {
+      if (bits[j] != (byte) 0) {
+        return false;
+      }
+    }
+    for (j = 0; j < size % Byte.SIZE; j++) {
+      if ((bits[size / Byte.SIZE] & BIT_UTIL[j]) != BIT_UTIL[j]) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /** whether all bits are zero */
+  public boolean isAllOne() {
+    int j;
+    for (j = 0; j < size / Byte.SIZE; j++) {
+      if (bits[j] != (byte) 0XFF) {
+        return false;
+      }
+    }
+    for (j = 0; j < size % Byte.SIZE; j++) {
+      if ((bits[size / Byte.SIZE] & BIT_UTIL[j]) == 0) {
+        return false;
+      }
+    }
+    return true;
+  }
+}