Add boolean and integer conversion methods

This commit also reorganizes the method order inside Miscellaneous.java
This commit is contained in:
JeremyStar™ 2024-07-22 13:35:14 +02:00
parent 67909e9cc3
commit a0a89d2f3c
Signed by: JeremyStarTM
GPG key ID: E366BAEF67E4704D

View file

@ -20,8 +20,11 @@
package de.staropensource.sosengine.base.utility; package de.staropensource.sosengine.base.utility;
import de.staropensource.sosengine.base.events.ThrowableCatchEvent; import de.staropensource.sosengine.base.events.ThrowableCatchEvent;
import de.staropensource.sosengine.base.exceptions.TristateConversionException;
import de.staropensource.sosengine.base.types.Tristate;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.Range;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.List; import java.util.List;
@ -44,6 +47,41 @@ public final class Miscellaneous {
*/ */
public Miscellaneous() {} public Miscellaneous() {}
/**
* Converts a boolean into an integer.
*
* @since v1-alpha2
*/
@Range(from = 0, to = 1)
public static int getIntegerizedBoolean(boolean bool) {
return bool ? 1 : 0;
}
/**
* Converts an integer into a {@link Tristate}.
*
* @return the expected boolean result, except if neither {@code 0} or {@code 1}, in which case {@link Tristate#UNSET} is returned
* @since v1-alpha2
*/
public static Tristate getTristatedInteger(@Range(from = 0, to = 1) int integer) {
return switch (integer) {
case 0 -> Tristate.TRUE;
case 1 -> Tristate.FALSE;
default -> Tristate.UNSET;
};
}
/**
* Converts an integer into a {@link Tristate} and then into a boolean.
*
* @return booleanized integer
* @throws TristateConversionException when encountering {@link Tristate#UNSET}.
* @since v1-alpha2
*/
public static boolean getBooleanizedInteger(@Range(from = 0, to = 1) int integer) throws TristateConversionException {
return Tristate.toBoolean(getTristatedInteger(integer));
}
/** /**
* Adds padding zeros to a number. * Adds padding zeros to a number.
* *
@ -57,34 +95,6 @@ public final class Miscellaneous {
return String.format("%0" + length + "d", number); return String.format("%0" + length + "d", number);
} }
/**
* Forcefully invokes the garbage collector and blocks execution until finished.<br/>
* If you want to run it in parallel to your program, consider running it in a {@link java.lang.VirtualThread}.
*
* @since v1-alpha0
*/
@SuppressWarnings("UnusedAssignment")
public static void invokeGarbageCollector() {
Object object = new Object();
WeakReference<Object> weakReference = new WeakReference<>(object);
object = null;
while(weakReference.get() != null) System.gc();
}
/**
* Measures the execution time of a {@link Runnable}.
*
* @param runnable {@link Runnable} to execute
* @return execution time in milliseconds
* @see Runnable
* @since v1-alpha0
*/
public static long measureExecutionTime(@NotNull Runnable runnable) {
long initTime = System.currentTimeMillis();
runnable.run();
return System.currentTimeMillis() - initTime;
}
/** /**
* Searches for a value in a {@link Map}. * Searches for a value in a {@link Map}.
* *
@ -101,21 +111,6 @@ public final class Miscellaneous {
.collect(Collectors.toSet()); .collect(Collectors.toSet());
} }
/**
* Executes a {@link Runnable} and emits {@link ThrowableCatchEvent} if a throwable is caught.
*
* @param runnable {@link Runnable} to execute
* @param identifier some identifier to distinguish {@link Runnable}s
* @since v1-alpha1
*/
public static void executeSafely(@NotNull Runnable runnable, @NotNull String identifier) {
try {
runnable.run();
} catch (Throwable throwable) {
new ThrowableCatchEvent().callEvent(throwable, identifier);
}
}
/** /**
* Counts the occurrences of a substring inside of a string. * Counts the occurrences of a substring inside of a string.
* *
@ -164,6 +159,49 @@ public final class Miscellaneous {
return null; return null;
} }
/**
* Measures the execution time of a {@link Runnable}.
*
* @param runnable {@link Runnable} to execute
* @return execution time in milliseconds
* @see Runnable
* @since v1-alpha0
*/
public static long measureExecutionTime(@NotNull Runnable runnable) {
long initTime = System.currentTimeMillis();
runnable.run();
return System.currentTimeMillis() - initTime;
}
/**
* Executes a {@link Runnable} and emits {@link ThrowableCatchEvent} if a throwable is caught.
*
* @param runnable {@link Runnable} to execute
* @param identifier some identifier to distinguish {@link Runnable}s
* @since v1-alpha1
*/
public static void executeSafely(@NotNull Runnable runnable, @NotNull String identifier) {
try {
runnable.run();
} catch (Throwable throwable) {
new ThrowableCatchEvent().callEvent(throwable, identifier);
}
}
/**
* Forcefully invokes the garbage collector and blocks execution until finished.<br/>
* If you want to run it in parallel to your program, consider running it in a {@link VirtualThread}.
*
* @since v1-alpha0
*/
@SuppressWarnings("UnusedAssignment")
public static void invokeGarbageCollector() {
Object object = new Object();
WeakReference<Object> weakReference = new WeakReference<>(object);
object = null;
while(weakReference.get() != null) System.gc();
}
/** /**
* Ensures that the code is running on the main thread. * Ensures that the code is running on the main thread.
* *