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

bchapuis pushed a commit to branch 681-handle-the-out-of-memory-errors
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git


The following commit(s) were added to 
refs/heads/681-handle-the-out-of-memory-errors by this push:
     new 6521b512 Format code
6521b512 is described below

commit 6521b5123c0fadcf7154983dc88cc16843d84807
Author: Bertil Chapuis <[email protected]>
AuthorDate: Tue Jul 4 23:03:36 2023 +0200

    Format code
---
 .../apache/baremaps/collection/JaggedDataMap.java  | 394 +++++++++++----------
 .../java/org/apache/baremaps/utils/ArrayUtils.java | 106 +++---
 .../apache/baremaps/collection/DataMapTest.java    |   6 +-
 3 files changed, 265 insertions(+), 241 deletions(-)

diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/collection/JaggedDataMap.java 
b/baremaps-core/src/main/java/org/apache/baremaps/collection/JaggedDataMap.java
index 819a8e17..5a149c4b 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/collection/JaggedDataMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/collection/JaggedDataMap.java
@@ -1,214 +1,226 @@
-package org.apache.baremaps.collection;
+/*
+ * Licensed 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.
+ */
 
-import org.apache.baremaps.stream.StreamUtils;
+package org.apache.baremaps.collection;
 
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.IntStream;
+import org.apache.baremaps.stream.StreamUtils;
 
 public class JaggedDataMap<E> extends DataMap<E> {
 
-    private static final int L_BYTES = 8;
-    private static final int L_SIZE = 1 << L_BYTES;
-    private static final int L_MASK = L_SIZE - 1;
-    private static final int L_SHIFT = 0;
-
-    private static final int K_BYTES = 8;
-    private static final int K_SIZE = 1 << K_BYTES;
-    private static final int K_MASK = K_SIZE - 1;
-    private static final int K_SHIFT = L_SHIFT + L_BYTES;
-
-    private static final int J_BYTES = 12;
-    private static final int J_SIZE = 1 << J_BYTES;
-    private static final int J_MASK = J_SIZE - 1;
-    private static final int J_SHIFT = K_SHIFT + K_BYTES;
-
-    private static final int I_BYTES = 12;
-    private static final int I_SIZE = 1 << I_BYTES;
-    private static final int I_MASK = I_SIZE - 1;
-    private static final int I_SHIFT = J_SHIFT + J_BYTES;
-
-    private static final long CAPACITY = 1L << (I_BYTES + J_BYTES + K_BYTES + 
L_BYTES);
-
-    private long[][][][] index;
-
-    private final AppendOnlyBuffer<E> values;
-
-    private final AtomicLong size = new AtomicLong();
-
-    /**
-     * Constructs a map.
-     *
-     * @param values the values
-     */
-    public JaggedDataMap(AppendOnlyBuffer<E> values) {
-        this.index = new long[I_SIZE][][][];
-        this.values = values;
+  private static final int L_BYTES = 8;
+  private static final int L_SIZE = 1 << L_BYTES;
+  private static final int L_MASK = L_SIZE - 1;
+  private static final int L_SHIFT = 0;
+
+  private static final int K_BYTES = 8;
+  private static final int K_SIZE = 1 << K_BYTES;
+  private static final int K_MASK = K_SIZE - 1;
+  private static final int K_SHIFT = L_SHIFT + L_BYTES;
+
+  private static final int J_BYTES = 12;
+  private static final int J_SIZE = 1 << J_BYTES;
+  private static final int J_MASK = J_SIZE - 1;
+  private static final int J_SHIFT = K_SHIFT + K_BYTES;
+
+  private static final int I_BYTES = 12;
+  private static final int I_SIZE = 1 << I_BYTES;
+  private static final int I_MASK = I_SIZE - 1;
+  private static final int I_SHIFT = J_SHIFT + J_BYTES;
+
+  private static final long CAPACITY = 1L << (I_BYTES + J_BYTES + K_BYTES + 
L_BYTES);
+
+  private long[][][][] index;
+
+  private final AppendOnlyBuffer<E> values;
+
+  private final AtomicLong size = new AtomicLong();
+
+  /**
+   * Constructs a map.
+   *
+   * @param values the values
+   */
+  public JaggedDataMap(AppendOnlyBuffer<E> values) {
+    this.index = new long[I_SIZE][][][];
+    this.values = values;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public E put(Long key, E value) {
+    long v = key;
+    if (v < 0 || v >= CAPACITY) {
+      throw new IllegalArgumentException();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public E put(Long key, E value) {
-        long v = key;
-        if (v < 0 || v >= CAPACITY) {
-            throw new IllegalArgumentException();
-        }
-        int i = (int) (v >>> I_SHIFT) & I_MASK;
-        int j = (int) (v >>> J_SHIFT) & J_MASK;
-        int k = (int) (v >>> K_SHIFT) & K_MASK;
-        int l = (int) (v >>> L_SHIFT) & L_MASK;
-        if (index[i] == null) {
-            index[i] = new long[J_SIZE][][];
-        }
-        if (index[i][j] == null) {
-            index[i][j] = new long[K_SIZE][];
-        }
-        if (index[i][j][k] == null) {
-            index[i][j][k] = new long[L_SIZE];
-            Arrays.fill(index[i][j][k], -1);
-        }
-        long position = values.addPositioned(value);
-        if (index[i][j][k][l] == -1) {
-            size.incrementAndGet();
-        }
-        index[i][j][k][l] = position;
-        return value;
+    int i = (int) (v >>> I_SHIFT) & I_MASK;
+    int j = (int) (v >>> J_SHIFT) & J_MASK;
+    int k = (int) (v >>> K_SHIFT) & K_MASK;
+    int l = (int) (v >>> L_SHIFT) & L_MASK;
+    if (index[i] == null) {
+      index[i] = new long[J_SIZE][][];
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public E get(Object key) {
-        long v = (Long) key;
-        if (v < 0 || v >= CAPACITY) {
-            throw new IllegalArgumentException();
-        }
-        int i = (int) (v >>> I_SHIFT) & I_MASK;
-        int j = (int) (v >>> J_SHIFT) & J_MASK;
-        int k = (int) (v >>> K_SHIFT) & K_MASK;
-        int l = (int) (v >>> L_SHIFT) & L_MASK;
-        if (index[i] == null) {
-            return null;
-        }
-        if (index[i][j] == null) {
-            return null;
-        }
-        if (index[i][j][k] == null) {
-            return null;
-        }
-        long position = index[i][j][k][l];
-        if (position == -1) {
-            return null;
-        }
-        return values.read(position);
+    if (index[i][j] == null) {
+      index[i][j] = new long[K_SIZE][];
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected Iterator<Long> keyIterator() {
-        return IntStream.range(0, index.length)
-                .filter(i -> index[i] != null)
-                .mapToObj(i -> IntStream.range(0, index[i].length)
-                        .filter(j -> index[i][j] != null)
-                        .mapToObj(j -> IntStream.range(0, index[i][j].length)
-                                .filter(k -> index[i][j][k] != null)
-                                .mapToObj(k -> IntStream.range(0, 
index[i][j][k].length)
-                                        .filter(l -> index[i][j][k][l] != -1)
-                                        .mapToObj(l -> (long) ((i << I_SHIFT) 
| (j << J_SHIFT) | (k << K_SHIFT) | (l << L_SHIFT))))
-                                .flatMap(x -> x))
-                        .flatMap(x -> x))
-                .flatMap(x -> x)
-                .iterator();
+    if (index[i][j][k] == null) {
+      index[i][j][k] = new long[L_SIZE];
+      Arrays.fill(index[i][j][k], -1);
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected Iterator<E> valueIterator() {
-        return StreamUtils.stream(keyIterator()).map(this::get).iterator();
+    long position = values.addPositioned(value);
+    if (index[i][j][k][l] == -1) {
+      size.incrementAndGet();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected Iterator<Entry<Long, E>> entryIterator() {
-        return StreamUtils.stream(keyIterator()).map(key -> Map.entry(key, 
get(key))).iterator();
+    index[i][j][k][l] = position;
+    return value;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public E get(Object key) {
+    long v = (Long) key;
+    if (v < 0 || v >= CAPACITY) {
+      throw new IllegalArgumentException();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean isEmpty() {
-        return StreamUtils.stream(keyIterator()).findAny().isEmpty();
+    int i = (int) (v >>> I_SHIFT) & I_MASK;
+    int j = (int) (v >>> J_SHIFT) & J_MASK;
+    int k = (int) (v >>> K_SHIFT) & K_MASK;
+    int l = (int) (v >>> L_SHIFT) & L_MASK;
+    if (index[i] == null) {
+      return null;
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public long sizeAsLong() {
-        return size.get();
+    if (index[i][j] == null) {
+      return null;
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean containsKey(Object key) {
-        return get(key) != null;
+    if (index[i][j][k] == null) {
+      return null;
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean containsValue(Object value) {
-        return StreamUtils.stream(valueIterator()).anyMatch(v -> 
v.equals(value));
+    long position = index[i][j][k][l];
+    if (position == -1) {
+      return null;
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public E remove(Object key) {
-        long v = (Long) key;
-        int i = (int) (v >>> I_SHIFT) & I_MASK;
-        int j = (int) (v >>> J_SHIFT) & J_MASK;
-        int k = (int) (v >>> K_SHIFT) & K_MASK;
-        int l = (int) (v >>> L_SHIFT) & L_MASK;
-        if (index[i] == null) {
-            return null;
-        }
-        if (index[i][j] == null) {
-            return null;
-        }
-        if (index[i][j][k] == null) {
-            return null;
-        }
-        long position = index[i][j][k][l];
-        if (position == -1) {
-            return null;
-        }
-        size.decrementAndGet();
-        index[i][j][k][l] = -1;
-        return values.read(position);
+    return values.read(position);
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  protected Iterator<Long> keyIterator() {
+    return IntStream.range(0, index.length)
+        .filter(i -> index[i] != null)
+        .mapToObj(i -> IntStream.range(0, index[i].length)
+            .filter(j -> index[i][j] != null)
+            .mapToObj(j -> IntStream.range(0, index[i][j].length)
+                .filter(k -> index[i][j][k] != null)
+                .mapToObj(k -> IntStream.range(0, index[i][j][k].length)
+                    .filter(l -> index[i][j][k][l] != -1)
+                    .mapToObj(l -> (long) ((i << I_SHIFT) | (j << J_SHIFT) | 
(k << K_SHIFT)
+                        | (l << L_SHIFT))))
+                .flatMap(x -> x))
+            .flatMap(x -> x))
+        .flatMap(x -> x)
+        .iterator();
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  protected Iterator<E> valueIterator() {
+    return StreamUtils.stream(keyIterator()).map(this::get).iterator();
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  protected Iterator<Entry<Long, E>> entryIterator() {
+    return StreamUtils.stream(keyIterator()).map(key -> Map.entry(key, 
get(key))).iterator();
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public boolean isEmpty() {
+    return StreamUtils.stream(keyIterator()).findAny().isEmpty();
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public long sizeAsLong() {
+    return size.get();
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public boolean containsKey(Object key) {
+    return get(key) != null;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public boolean containsValue(Object value) {
+    return StreamUtils.stream(valueIterator()).anyMatch(v -> v.equals(value));
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public E remove(Object key) {
+    long v = (Long) key;
+    int i = (int) (v >>> I_SHIFT) & I_MASK;
+    int j = (int) (v >>> J_SHIFT) & J_MASK;
+    int k = (int) (v >>> K_SHIFT) & K_MASK;
+    int l = (int) (v >>> L_SHIFT) & L_MASK;
+    if (index[i] == null) {
+      return null;
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void clear() {
-        index = new long[I_SIZE][][][];
+    if (index[i][j] == null) {
+      return null;
+    }
+    if (index[i][j][k] == null) {
+      return null;
+    }
+    long position = index[i][j][k][l];
+    if (position == -1) {
+      return null;
     }
+    size.decrementAndGet();
+    index[i][j][k][l] = -1;
+    return values.read(position);
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public void clear() {
+    index = new long[I_SIZE][][][];
+  }
 }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/utils/ArrayUtils.java 
b/baremaps-core/src/main/java/org/apache/baremaps/utils/ArrayUtils.java
index 0b70db72..bbcf9699 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/utils/ArrayUtils.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/utils/ArrayUtils.java
@@ -1,64 +1,76 @@
+/*
+ * Licensed 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.baremaps.utils;
 
 public class ArrayUtils {
 
-    private ArrayUtils() {
+  private ArrayUtils() {
 
-    }
+  }
 
-    public static Object of(int dimensions, int size) {
-        return switch (dimensions) {
-            case 1 -> d1(size);
-            case 2 -> d2(size);
-            case 3 -> d3(size);
-            case 4 -> d4(size);
-            case 5 -> d5(size);
-            case 6 -> d6(size);
-            case 7 -> d7(size);
-            case 8 -> d8(size);
-            case 9 -> d9(size);
-            case 10 -> d10(size);
-            default -> throw new IllegalArgumentException("Unsupported 
dimension");
-        };
-    }
+  public static Object of(int dimensions, int size) {
+    return switch (dimensions) {
+      case 1 -> d1(size);
+      case 2 -> d2(size);
+      case 3 -> d3(size);
+      case 4 -> d4(size);
+      case 5 -> d5(size);
+      case 6 -> d6(size);
+      case 7 -> d7(size);
+      case 8 -> d8(size);
+      case 9 -> d9(size);
+      case 10 -> d10(size);
+      default -> throw new IllegalArgumentException("Unsupported dimension");
+    };
+  }
 
-    private static Object d1(int size) {
-        return new long[size];
-    }
+  private static Object d1(int size) {
+    return new long[size];
+  }
 
-    private static Object d2(int size) {
-        return new long[size][];
-    }
+  private static Object d2(int size) {
+    return new long[size][];
+  }
 
-    private static Object d3(int size) {
-        return new long[size][][];
-    }
+  private static Object d3(int size) {
+    return new long[size][][];
+  }
 
-    private static Object d4(int size) {
-        return new long[size][][][];
-    }
+  private static Object d4(int size) {
+    return new long[size][][][];
+  }
 
-    private static Object d5(int size) {
-        return new long[size][][][][];
-    }
+  private static Object d5(int size) {
+    return new long[size][][][][];
+  }
 
-    private static Object d6(int size) {
-        return new long[size][][][][][];
-    }
+  private static Object d6(int size) {
+    return new long[size][][][][][];
+  }
 
-    private static Object d7(int size) {
-        return new long[size][][][][][][];
-    }
+  private static Object d7(int size) {
+    return new long[size][][][][][][];
+  }
 
-    private static Object d8(int size) {
-        return new long[size][][][][][][][];
-    }
+  private static Object d8(int size) {
+    return new long[size][][][][][][][];
+  }
 
-    private static Object d9(int size) {
-        return new long[size][][][][][][][][];
-    }
+  private static Object d9(int size) {
+    return new long[size][][][][][][][][];
+  }
 
-    public static Object d10(int size) {
-        return new long[size][][][][][][][][][];
-    }
+  public static Object d10(int size) {
+    return new long[size][][][][][][][][][];
+  }
 }
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/collection/DataMapTest.java 
b/baremaps-core/src/test/java/org/apache/baremaps/collection/DataMapTest.java
index ed662384..5cf09971 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/collection/DataMapTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/collection/DataMapTest.java
@@ -156,9 +156,9 @@ class DataMapTest {
   static Stream<Arguments> mapProvider() {
     return Stream
         .of(
-                Arguments.of(
-                        new JaggedDataMap<>(
-                                new AppendOnlyBuffer<>(new LongDataType(), new 
OffHeapMemory()))),
+            Arguments.of(
+                new JaggedDataMap<>(
+                    new AppendOnlyBuffer<>(new LongDataType(), new 
OffHeapMemory()))),
             Arguments.of(
                 new IndexedDataMap<>(
                     new AppendOnlyBuffer<>(new LongDataType(), new 
OffHeapMemory()))),

Reply via email to