Minestom/src/main/java/net/minestom/server/utils/ArrayUtils.java

68 lines
3.0 KiB
Java
Raw Normal View History

2020-04-24 03:25:58 +02:00
package net.minestom.server.utils;
2019-08-26 04:39:58 +02:00
2020-08-03 10:35:46 +02:00
import it.unimi.dsi.fastutil.ints.IntList;
2021-12-30 12:07:16 +01:00
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap;
2021-07-17 21:38:32 +02:00
import org.jetbrains.annotations.ApiStatus;
2020-10-24 16:33:13 +02:00
import org.jetbrains.annotations.NotNull;
2020-08-03 10:35:46 +02:00
2021-12-30 12:07:16 +01:00
import java.util.Map;
2020-04-05 10:15:21 +02:00
2021-07-17 21:38:32 +02:00
@ApiStatus.Internal
public final class ArrayUtils {
private ArrayUtils() {
}
2019-08-26 04:39:58 +02:00
2021-07-17 21:38:32 +02:00
public static int[] concatenateIntArrays(int @NotNull []... arrays) {
2019-08-26 04:39:58 +02:00
int totalLength = 0;
for (int[] array : arrays) {
2019-08-26 04:39:58 +02:00
totalLength += array.length;
}
int[] result = new int[totalLength];
2019-08-26 04:39:58 +02:00
int startingPos = 0;
for (int[] array : arrays) {
2019-08-26 04:39:58 +02:00
System.arraycopy(array, 0, result, startingPos, array.length);
startingPos += array.length;
2019-08-26 04:39:58 +02:00
}
return result;
}
2020-10-24 16:33:13 +02:00
public static void removeElement(@NotNull Object[] arr, int index) {
2019-08-27 05:23:25 +02:00
System.arraycopy(arr, index + 1, arr, index, arr.length - 1 - index);
}
2021-12-30 12:07:16 +01:00
public static <K, V> Map<K, V> toMap(@NotNull K[] keys, @NotNull V[] values, int length) {
assert keys.length >= length && keys.length == values.length;
return switch (length) {
case 0 -> Map.of();
case 1 -> Map.of(keys[0], values[0]);
case 2 -> Map.of(keys[0], values[0], keys[1], values[1]);
case 3 -> Map.of(keys[0], values[0], keys[1], values[1], keys[2], values[2]);
case 4 -> Map.of(keys[0], values[0], keys[1], values[1], keys[2], values[2],
keys[3], values[3]);
case 5 -> Map.of(keys[0], values[0], keys[1], values[1], keys[2], values[2],
keys[3], values[3], keys[4], values[4]);
case 6 -> Map.of(keys[0], values[0], keys[1], values[1], keys[2], values[2],
keys[3], values[3], keys[4], values[4], keys[5], values[5]);
case 7 -> Map.of(keys[0], values[0], keys[1], values[1], keys[2], values[2],
keys[3], values[3], keys[4], values[4], keys[5], values[5], keys[6], values[6]);
case 8 -> Map.of(keys[0], values[0], keys[1], values[1], keys[2], values[2],
keys[3], values[3], keys[4], values[4], keys[5], values[5], keys[6], values[6],
keys[7], values[7]);
case 9 -> Map.of(keys[0], values[0], keys[1], values[1], keys[2], values[2],
keys[3], values[3], keys[4], values[4], keys[5], values[5], keys[6], values[6],
keys[7], values[7], keys[8], values[8]);
case 10 -> Map.of(keys[0], values[0], keys[1], values[1], keys[2], values[2],
keys[3], values[3], keys[4], values[4], keys[5], values[5], keys[6], values[6],
keys[7], values[7], keys[8], values[8], keys[9], values[9]);
default -> Map.copyOf(new Object2ObjectArrayMap<>(keys, values, length));
};
2019-08-26 04:39:58 +02:00
}
2021-07-17 21:38:32 +02:00
public static int @NotNull [] toArray(@NotNull IntList list) {
2020-04-05 10:15:21 +02:00
int[] array = new int[list.size()];
2021-07-17 21:38:32 +02:00
list.getElements(0, array, 0, array.length);
2020-04-05 10:15:21 +02:00
return array;
}
2019-08-26 04:39:58 +02:00
}