You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2021/12/06 07:50:52 UTC

[iotdb] branch iotdb_arrayList_0.12 created (now 435e2ff)

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

haonan pushed a change to branch iotdb_arrayList_0.12
in repository https://gitbox.apache.org/repos/asf/iotdb.git.


      at 435e2ff  Implement IoTDBArrayList

This branch includes the following new commits:

     new 435e2ff  Implement IoTDBArrayList

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[iotdb] 01/01: Implement IoTDBArrayList

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

haonan pushed a commit to branch iotdb_arrayList_0.12
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 435e2ffd883881db457ad13acd16da95e56675d2
Author: HTHou <hh...@outlook.com>
AuthorDate: Mon Dec 6 15:49:19 2021 +0800

    Implement IoTDBArrayList
---
 .../org/apache/iotdb/db/utils/IoTDBArrayList.java  | 175 +++++++++++++++++++++
 .../iotdb/db/utils/datastructure/BinaryTVList.java |   4 +-
 .../db/utils/datastructure/BooleanTVList.java      |   4 +-
 .../iotdb/db/utils/datastructure/DoubleTVList.java |   4 +-
 .../iotdb/db/utils/datastructure/FloatTVList.java  |   4 +-
 .../iotdb/db/utils/datastructure/IntTVList.java    |   4 +-
 .../iotdb/db/utils/datastructure/LongTVList.java   |   4 +-
 .../iotdb/db/utils/datastructure/TVList.java       |   4 +-
 8 files changed, 189 insertions(+), 14 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/utils/IoTDBArrayList.java b/server/src/main/java/org/apache/iotdb/db/utils/IoTDBArrayList.java
new file mode 100644
index 0000000..be27799
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/utils/IoTDBArrayList.java
@@ -0,0 +1,175 @@
+/*
+ * 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.ArrayList;
+import java.util.Arrays;
+
+public class IoTDBArrayList<E> extends ArrayList<E> {
+
+  private static final int DEFAULT_CAPACITY = 1;
+  private static final Object[] EMPTY_ELEMENTDATA = new Object[0];
+  private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = new Object[0];
+  transient Object[] elementData;
+  private int size;
+  private static final int MAX_ARRAY_SIZE = 2147483639;
+
+  public IoTDBArrayList(int initialCapacity) {
+    super();
+    if (initialCapacity > 0) {
+      this.elementData = new Object[initialCapacity];
+    } else {
+      if (initialCapacity != 0) {
+        throw new IllegalArgumentException("Illegal Capacity: " + initialCapacity);
+      }
+
+      this.elementData = EMPTY_ELEMENTDATA;
+    }
+  }
+
+  public IoTDBArrayList() {
+    super();
+    this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
+  }
+
+  private Object[] grow(int minCapacity) {
+    return this.elementData = Arrays.copyOf(this.elementData, this.newCapacity(minCapacity));
+  }
+
+  private Object[] grow() {
+    return this.grow(this.size + 1);
+  }
+
+  @Override
+  public int size() {
+    return this.size;
+  }
+
+  @Override
+  public boolean isEmpty() {
+    return this.size == 0;
+  }
+
+  @Override
+  public E get(int index) {
+    return this.elementData(index);
+  }
+
+  E elementData(int index) {
+    return (E) this.elementData[index];
+  }
+
+  public E set(int index, E element) {
+    E oldValue = this.elementData(index);
+    this.elementData[index] = element;
+    return oldValue;
+  }
+
+  private void add(E e, Object[] elementData, int s) {
+    if (s == elementData.length) {
+      elementData = this.grow();
+    }
+
+    elementData[s] = e;
+    this.size = s + 1;
+  }
+
+  public boolean add(E e) {
+    ++this.modCount;
+    this.add(e, this.elementData, this.size);
+    return true;
+  }
+
+  public void add(int index, E element) {
+    ++this.modCount;
+    int s;
+    Object[] elementData;
+    if ((s = this.size) == (elementData = this.elementData).length) {
+      elementData = this.grow();
+    }
+
+    System.arraycopy(elementData, index, elementData, index + 1, s - index);
+    elementData[index] = element;
+    this.size = s + 1;
+  }
+
+  private int newCapacity(int minCapacity) {
+    int oldCapacity = this.elementData.length;
+    int newCapacity = oldCapacity + 1;
+    if (newCapacity - minCapacity <= 0) {
+      if (this.elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
+        return Math.max(1, minCapacity);
+      } else if (minCapacity < 0) {
+        throw new OutOfMemoryError();
+      } else {
+        return minCapacity;
+      }
+    } else {
+      return newCapacity - 2147483639 <= 0 ? newCapacity : hugeCapacity(minCapacity);
+    }
+  }
+
+  private static int hugeCapacity(int minCapacity) {
+    if (minCapacity < 0) {
+      throw new OutOfMemoryError();
+    } else {
+      return minCapacity > 2147483639 ? 2147483647 : 2147483639;
+    }
+  }
+
+  @Override
+  public E remove(int index) {
+    Object[] es = this.elementData;
+    E oldValue = (E) es[index];
+    this.fastRemove(es, index);
+    return oldValue;
+  }
+
+  private void fastRemove(Object[] es, int i) {
+    ++this.modCount;
+    int newSize;
+    if ((newSize = this.size - 1) > i) {
+      System.arraycopy(es, i + 1, es, i, newSize - i);
+    }
+
+    es[this.size = newSize] = null;
+  }
+
+  @Override
+  public void clear() {
+    ++this.modCount;
+    Object[] es = this.elementData;
+    int to = this.size;
+
+    for (int i = this.size = 0; i < to; ++i) {
+      es[i] = null;
+    }
+    trimToSize();
+  }
+
+  @Override
+  public void trimToSize() {
+    ++this.modCount;
+    if (this.size < this.elementData.length) {
+      this.elementData =
+          this.size == 0 ? EMPTY_ELEMENTDATA : Arrays.copyOf(this.elementData, this.size);
+    }
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BinaryTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BinaryTVList.java
index bf62d63..52999d1 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BinaryTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BinaryTVList.java
@@ -19,13 +19,13 @@
 package org.apache.iotdb.db.utils.datastructure;
 
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
+import org.apache.iotdb.db.utils.IoTDBArrayList;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.utils.Binary;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import static org.apache.iotdb.db.rescon.PrimitiveArrayManager.ARRAY_SIZE;
@@ -40,7 +40,7 @@ public class BinaryTVList extends TVList {
 
   BinaryTVList() {
     super();
-    values = new ArrayList<>();
+    values = new IoTDBArrayList<>();
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BooleanTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BooleanTVList.java
index e293544..02547b0 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BooleanTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BooleanTVList.java
@@ -19,12 +19,12 @@
 package org.apache.iotdb.db.utils.datastructure;
 
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
+import org.apache.iotdb.db.utils.IoTDBArrayList;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import static org.apache.iotdb.db.rescon.PrimitiveArrayManager.ARRAY_SIZE;
@@ -39,7 +39,7 @@ public class BooleanTVList extends TVList {
 
   BooleanTVList() {
     super();
-    values = new ArrayList<>();
+    values = new IoTDBArrayList<>();
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
index d7e8178..2987b48 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
@@ -19,13 +19,13 @@
 package org.apache.iotdb.db.utils.datastructure;
 
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
+import org.apache.iotdb.db.utils.IoTDBArrayList;
 import org.apache.iotdb.db.utils.MathUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import static org.apache.iotdb.db.rescon.PrimitiveArrayManager.ARRAY_SIZE;
@@ -40,7 +40,7 @@ public class DoubleTVList extends TVList {
 
   DoubleTVList() {
     super();
-    values = new ArrayList<>();
+    values = new IoTDBArrayList<>();
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
index d2ead4b..6c7c770 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
@@ -19,13 +19,13 @@
 package org.apache.iotdb.db.utils.datastructure;
 
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
+import org.apache.iotdb.db.utils.IoTDBArrayList;
 import org.apache.iotdb.db.utils.MathUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import static org.apache.iotdb.db.rescon.PrimitiveArrayManager.ARRAY_SIZE;
@@ -40,7 +40,7 @@ public class FloatTVList extends TVList {
 
   FloatTVList() {
     super();
-    values = new ArrayList<>();
+    values = new IoTDBArrayList<>();
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/IntTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/IntTVList.java
index caab7d9..759b672 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/IntTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/IntTVList.java
@@ -19,12 +19,12 @@
 package org.apache.iotdb.db.utils.datastructure;
 
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
+import org.apache.iotdb.db.utils.IoTDBArrayList;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import static org.apache.iotdb.db.rescon.PrimitiveArrayManager.ARRAY_SIZE;
@@ -39,7 +39,7 @@ public class IntTVList extends TVList {
 
   IntTVList() {
     super();
-    values = new ArrayList<>();
+    values = new IoTDBArrayList<>();
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java
index 1459e39..4bef620 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java
@@ -19,12 +19,12 @@
 package org.apache.iotdb.db.utils.datastructure;
 
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
+import org.apache.iotdb.db.utils.IoTDBArrayList;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import static org.apache.iotdb.db.rescon.PrimitiveArrayManager.ARRAY_SIZE;
@@ -39,7 +39,7 @@ public class LongTVList extends TVList {
 
   LongTVList() {
     super();
-    values = new ArrayList<>();
+    values = new IoTDBArrayList<>();
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java
index 8ce6295..fd15014 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java
@@ -20,6 +20,7 @@
 package org.apache.iotdb.db.utils.datastructure;
 
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
+import org.apache.iotdb.db.utils.IoTDBArrayList;
 import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
@@ -29,7 +30,6 @@ import org.apache.iotdb.tsfile.read.reader.IPointReader;
 import org.apache.iotdb.tsfile.utils.Binary;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -53,7 +53,7 @@ public abstract class TVList {
   private long version;
 
   public TVList() {
-    timestamps = new ArrayList<>();
+    timestamps = new IoTDBArrayList<>();
     size = 0;
     minTime = Long.MAX_VALUE;
     referenceCount = new AtomicInteger();