2020-11-12 02:13:54 +01:00
|
|
|
package speiger.src.collections.utils;
|
|
|
|
|
2020-11-30 02:27:58 +01:00
|
|
|
import java.util.concurrent.ForkJoinPool;
|
|
|
|
import java.util.concurrent.ForkJoinTask;
|
|
|
|
|
2020-11-12 02:13:54 +01:00
|
|
|
public class SanityChecks
|
|
|
|
{
|
2020-11-26 22:56:15 +01:00
|
|
|
public static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
|
2020-11-30 02:27:58 +01:00
|
|
|
private static ForkJoinPool WORK_POOL = ForkJoinPool.commonPool();
|
2020-11-26 22:56:15 +01:00
|
|
|
|
2020-11-30 02:27:58 +01:00
|
|
|
public static byte castToByte(int value) {
|
2020-11-12 02:13:54 +01:00
|
|
|
if(value > Byte.MAX_VALUE || value < Byte.MIN_VALUE) throw new IllegalStateException("Value ["+value+"] out of Byte[-128,127] range");
|
|
|
|
return (byte)value;
|
|
|
|
}
|
|
|
|
|
2020-11-30 02:27:58 +01:00
|
|
|
public static short castToShort(int value) {
|
2020-11-12 02:13:54 +01:00
|
|
|
if(value > Short.MAX_VALUE || value < Short.MIN_VALUE) throw new IllegalStateException("Value ["+value+"] out of Short[-32768,32767] range");
|
|
|
|
return (short)value;
|
|
|
|
}
|
|
|
|
|
2020-11-30 02:27:58 +01:00
|
|
|
public static char castToChar(int value) {
|
2020-11-12 02:13:54 +01:00
|
|
|
if(value > Character.MAX_VALUE || value < Character.MIN_VALUE) throw new IllegalStateException("Value ["+value+"] out of Character[0,65535] range");
|
|
|
|
return (char)value;
|
|
|
|
}
|
|
|
|
|
2020-11-30 02:27:58 +01:00
|
|
|
public static float castToFloat(double value) {
|
2020-11-12 02:13:54 +01:00
|
|
|
if(Double.isNaN(value)) return Float.NaN;
|
|
|
|
if(Double.isInfinite(value)) return value > 0 ? Float.POSITIVE_INFINITY : Float.NEGATIVE_INFINITY;
|
|
|
|
if(value < -Float.MAX_VALUE || value > Float.MAX_VALUE) throw new IllegalStateException("Value ["+value+"] out of Float range");
|
|
|
|
return (float)value;
|
|
|
|
}
|
2020-11-26 22:56:15 +01:00
|
|
|
|
2020-11-30 02:27:58 +01:00
|
|
|
public static void checkArrayCapacity(int arraySize, int offset, int accessSize) {
|
2020-11-26 22:56:15 +01:00
|
|
|
if(offset < 0) throw new IllegalStateException("Offset is negative ("+offset+")");
|
|
|
|
else if(accessSize < 0) throw new IllegalStateException("Size is negative ("+accessSize+")");
|
|
|
|
else if(arraySize < offset + accessSize) throw new IndexOutOfBoundsException("Index (" + offset + accessSize + ") is not in size (" + arraySize + ")");
|
|
|
|
}
|
2020-11-30 02:27:58 +01:00
|
|
|
|
|
|
|
public static boolean canParallelTask() {
|
|
|
|
return WORK_POOL.getParallelism() > 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static <T> void invokeTask(ForkJoinTask<T> task) {
|
|
|
|
WORK_POOL.invoke(task);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void setWorkPool(ForkJoinPool pool) {
|
|
|
|
WORK_POOL = pool == null ? ForkJoinPool.commonPool() : pool;
|
|
|
|
}
|
2020-11-12 02:13:54 +01:00
|
|
|
}
|