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
|
2020-08-07 08:10:10 +02:00
|
|
|
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;
|
2020-10-28 01:02:12 +01:00
|
|
|
for (int[] array : arrays) {
|
2019-08-26 04:39:58 +02:00
|
|
|
totalLength += array.length;
|
|
|
|
}
|
2020-10-28 01:02:12 +01:00
|
|
|
int[] result = new int[totalLength];
|
2019-08-26 04:39:58 +02:00
|
|
|
int startingPos = 0;
|
2020-10-28 01:02:12 +01:00
|
|
|
for (int[] array : arrays) {
|
2019-08-26 04:39:58 +02:00
|
|
|
System.arraycopy(array, 0, result, startingPos, array.length);
|
2020-10-28 01:02:12 +01:00
|
|
|
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
|
|
|
}
|