2024-09-16 00:20:03 +02:00
|
|
|
package mp.code;
|
|
|
|
|
2024-09-17 02:40:03 +02:00
|
|
|
import java.io.IOException;
|
|
|
|
|
2024-09-17 23:16:39 +02:00
|
|
|
/**
|
|
|
|
* A class holding utility functions, as well as functions which are specific
|
|
|
|
* to this language's glue and don't necessarily have a counterpart in the
|
|
|
|
* broader CodeMP API.
|
|
|
|
*/
|
|
|
|
public final class Extensions {
|
2024-09-16 00:20:03 +02:00
|
|
|
/**
|
|
|
|
* Hashes the given {@link String} using CodeMP's hashing algorithm (xxh3).
|
|
|
|
* @param input the string to hash
|
|
|
|
* @return the hash
|
|
|
|
*/
|
|
|
|
public static native long hash(String input);
|
|
|
|
|
|
|
|
/**
|
2024-09-17 23:16:39 +02:00
|
|
|
* Drive the underlying library's asynchronous event loop. In other words, tells
|
|
|
|
* it what thread to use. You usually want to call this during initialisation.
|
|
|
|
* <p>
|
|
|
|
* Passing false will have the native library manage threads, but it may fail to
|
|
|
|
* work with some more advanced features.
|
|
|
|
* <p>
|
|
|
|
* You may alternatively call this with true, in a separate and dedicated Java thread;
|
|
|
|
* it will remain active in the background and act as event loop. Assign it like this:
|
|
|
|
* <p><code>new Thread(() -> Extensions.drive(true)).start();</code></p>
|
|
|
|
* @param block true if it should use the current thread
|
2024-09-16 00:20:03 +02:00
|
|
|
*/
|
|
|
|
public static native void drive(boolean block);
|
2024-09-17 02:40:03 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Configures the tracing subscriber for the native logs.
|
2024-09-17 23:16:39 +02:00
|
|
|
* Do not call this unless you want to see the native library's logs.
|
2024-09-17 02:40:03 +02:00
|
|
|
* @param path where to output this, null to use stdout
|
|
|
|
* @param debug whether to run it in debug mode
|
|
|
|
*/
|
|
|
|
public static native void setupTracing(String path, boolean debug);
|
|
|
|
|
2024-09-17 23:16:39 +02:00
|
|
|
private static boolean loaded = false;
|
|
|
|
static synchronized void loadLibraryIfNotPresent() {
|
|
|
|
if(loaded) return;
|
|
|
|
try {
|
2024-09-18 02:40:55 +02:00
|
|
|
String os = System.getProperty("os.name").toLowerCase();
|
|
|
|
|
|
|
|
String filename;
|
|
|
|
if(os.startsWith("windows")) {
|
|
|
|
filename = "/natives/codemp.dll";
|
|
|
|
} else if(os.startsWith("mac")) {
|
|
|
|
filename = "/natives/libcodemp.dylib";;
|
|
|
|
} else filename = "/natives/libcodemp.so";
|
2024-09-17 23:16:39 +02:00
|
|
|
cz.adamh.utils.NativeUtils.loadLibraryFromJar(filename);
|
2024-09-18 02:40:55 +02:00
|
|
|
|
2024-09-17 23:16:39 +02:00
|
|
|
loaded = true;
|
|
|
|
} catch(IOException e) {
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-09-17 02:40:03 +02:00
|
|
|
static {
|
|
|
|
Extensions.loadLibraryIfNotPresent();
|
|
|
|
}
|
2024-09-16 00:20:03 +02:00
|
|
|
}
|