ZstdNative class
Пакет: com.hypixel.hytale.protocol.io
Файл: com/hypixel/hytale/protocol/io/ZstdNative.java
Поля (26)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
C_SIZE_T |
final |
Linker |
LINKER |
|
|
LOOKUP |
|
|
ZSTD_COMPRESS |
|
|
ZSTD_COMPRESS_BOUND |
|
|
ZSTD_COMPRESS_CCTX |
|
|
ZSTD_CREATE_CCTX |
|
|
ZSTD_CREATE_DCTX |
|
|
ZSTD_DECOMPRESS |
|
|
ZSTD_DECOMPRESS_DCTX |
|
|
ZSTD_DEFAULT_C_LEVEL |
|
|
ZSTD_FREE_CCTX |
|
|
ZSTD_FREE_DCTX |
|
|
ZSTD_GET_ERROR_NAME |
|
|
ZSTD_GET_FRAME_CONTENT_SIZE |
|
|
ZSTD_IS_ERROR |
|
MemoryLayout |
var0 |
|
MemorySegment |
var2 |
|
String |
var2 |
|
String |
var3 |
|
String |
var4 |
|
|
var4 |
|
|
var4 |
|
|
var4 |
|
Path |
var6 |
|
Path |
var7 |
Методы (29)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
ExceptionInInitializerErrorthrow new ExceptionInInitializerError(var10) |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Native library not found on classpath: " + var4) |
abstract |
throw new |
UnsupportedOperationExceptionthrow new UnsupportedOperationException("Unsupported Linux architecture: " + var3) |
abstract |
throw new |
UnsupportedOperationExceptionthrow new UnsupportedOperationException("Unsupported OS: " + var2) |
abstract |
throw new |
UnsupportedOperationExceptionthrow new UnsupportedOperationException("Unsupported Windows architecture: " + var3) |
abstract |
throw new |
UnsupportedOperationExceptionthrow new UnsupportedOperationException("Unsupported macOS architecture: " + var3) |
static |
long |
compresslong compress(MemorySegment var0, long var1, MemorySegment var3, long var4, int var6) |
static |
long |
compressBoundlong compressBound(long var0) |
static |
long |
compressCCtxlong compressCCtx(MemorySegment var0, MemorySegment var1, long var2, MemorySegment var4, long var5, int var7) |
static |
MemorySegment |
createCCtxMemorySegment createCCtx() |
static |
MemorySegment |
createDCtxMemorySegment createDCtx() |
static |
long |
decompresslong decompress(MemorySegment var0, long var1, MemorySegment var3, long var4) |
static |
long |
decompressDCtxlong decompressDCtx(MemorySegment var0, MemorySegment var1, long var2, MemorySegment var4, long var5) |
static |
int |
defaultCompressionLevelint defaultCompressionLevel() |
static |
MethodHandle |
downcallMethodHandle downcall(String var0, FunctionDescriptor var1) |
static |
long |
freeCCtxlong freeCCtx(MemorySegment var0) |
static |
long |
freeDCtxlong freeDCtx(MemorySegment var0) |
static |
String |
getErrorNameString getErrorName(long var0) |
static |
long |
getFrameContentSizelong getFrameContentSize(MemorySegment var0, long var1) |
|
|
if if(var5 == null) |
static |
boolean |
isErrorboolean isError(long var0) |
static |
<T extends Throwable> RuntimeException |
sneaky<T extends Throwable> RuntimeException sneaky(Throwable var0) |
abstract |
throw |
sneakythrow sneaky(var8) |
abstract |
throw |
sneakythrow sneaky(var7) |
abstract |
throw |
sneakythrow sneaky(var3) |
abstract |
throw |
sneakythrow sneaky(var4) |
abstract |
throw |
sneakythrow sneaky(var1) |
abstract |
throw |
sneakythrow sneaky(var2) |
abstract |
throw |
sneakythrow sneaky(var9) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.protocol.io;
class="kw">import java.io.IOException;
class="kw">import java.io.InputStream;
class="kw">import java.lang.foreign.AddressLayout;
class="kw">import java.lang.foreign.Arena;
class="kw">import java.lang.foreign.FunctionDescriptor;
class="kw">import java.lang.foreign.Linker;
class="kw">import java.lang.foreign.MemoryLayout;
class="kw">import java.lang.foreign.MemorySegment;
class="kw">import java.lang.foreign.SymbolLookup;
class="kw">import java.lang.foreign.ValueLayout;
class="kw">import java.lang.foreign.ValueLayout.OfInt;
class="kw">import java.lang.foreign.ValueLayout.OfLong;
class="kw">import java.lang.invoke.MethodHandle;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.nio.file.StandardCopyOption;
class="kw">import java.util.Locale;
class="kw">public class="kw">final class ZstdNative {
class="kw">private class="kw">static class="kw">final Linker LINKER = Linker.nativeLinker();
class="kw">private class="kw">static class="kw">final Arena GLOBAL_ARENA = Arena.global();
class="kw">private class="kw">static class="kw">final SymbolLookup LOOKUP;
class="kw">private class="kw">static class="kw">final OfLong C_SIZE_T;
class="kw">private class="kw">static class="kw">final OfInt C_INT = ValueLayout.JAVA_INT;
class="kw">private class="kw">static class="kw">final OfLong C_UNSIGNED_LONG_LONG = ValueLayout.JAVA_LONG;
class="kw">private class="kw">static class="kw">final AddressLayout C_POINTER = ValueLayout.ADDRESS;
class="kw">private class="kw">static class="kw">final MethodHandle ZSTD_COMPRESS;
class="kw">private class="kw">static class="kw">final MethodHandle ZSTD_DECOMPRESS;
class="kw">private class="kw">static class="kw">final MethodHandle ZSTD_COMPRESS_BOUND;
class="kw">private class="kw">static class="kw">final MethodHandle ZSTD_GET_FRAME_CONTENT_SIZE;
class="kw">private class="kw">static class="kw">final MethodHandle ZSTD_IS_ERROR;
class="kw">private class="kw">static class="kw">final MethodHandle ZSTD_GET_ERROR_NAME;
class="kw">private class="kw">static class="kw">final MethodHandle ZSTD_CREATE_CCTX;
class="kw">private class="kw">static class="kw">final MethodHandle ZSTD_FREE_CCTX;
class="kw">private class="kw">static class="kw">final MethodHandle ZSTD_COMPRESS_CCTX;
class="kw">private class="kw">static class="kw">final MethodHandle ZSTD_CREATE_DCTX;
class="kw">private class="kw">static class="kw">final MethodHandle ZSTD_FREE_DCTX;
class="kw">private class="kw">static class="kw">final MethodHandle ZSTD_DECOMPRESS_DCTX;
class="kw">private class="kw">static class="kw">final MethodHandle ZSTD_DEFAULT_C_LEVEL;
class="kw">public class="kw">static class="kw">final long CONTENT_SIZE_UNKNOWN = -1L;
class="kw">public class="kw">static class="kw">final long CONTENT_SIZE_ERROR = -2L;
class="kw">private ZstdNative() {
}
class="kw">private class="kw">static MethodHandle downcall(String var0, FunctionDescriptor var1) {
class="kw">return LINKER.downcallHandle(LOOKUP.find(var0).orElseThrow(() -> new UnsatisfiedLinkError("Missing symbol: " + var0)), var1);
}
class="kw">public class="kw">static long compress(MemorySegment var0, long var1, MemorySegment var3, long var4, int var6) {
try {
class="kw">return (long)ZSTD_COMPRESS.invokeExact((MemorySegment)var0, (long)var1, (MemorySegment)var3, (long)var4, (int)var6);
} catch (Throwable var8) {
throw sneaky(var8);
}
}
class="kw">public class="kw">static long decompress(MemorySegment var0, long var1, MemorySegment var3, long var4) {
try {
class="kw">return (long)ZSTD_DECOMPRESS.invokeExact((MemorySegment)var0, (long)var1, (MemorySegment)var3, (long)var4);
} catch (Throwable var7) {
throw sneaky(var7);
}
}
class="kw">public class="kw">static long compressBound(long var0) {
try {
class="kw">return (long)ZSTD_COMPRESS_BOUND.invokeExact((long)var0);
} catch (Throwable var3) {
throw sneaky(var3);
}
}
class="kw">public class="kw">static long getFrameContentSize(MemorySegment var0, long var1) {
try {
class="kw">return (long)ZSTD_GET_FRAME_CONTENT_SIZE.invokeExact((MemorySegment)var0, (long)var1);
} catch (Throwable var4) {
throw sneaky(var4);
}
}
class="kw">public class="kw">static boolean isError(long var0) {
try {
class="kw">return (int)ZSTD_IS_ERROR.invokeExact((long)var0) != 0;
} catch (Throwable var3) {
throw sneaky(var3);
}
}
class="kw">public class="kw">static String getErrorName(long var0) {
try {
MemorySegment var2 = (MemorySegment)ZSTD_GET_ERROR_NAME.invokeExact((long)var0);
class="kw">return var2.reinterpret(256L).getString(0L);
} catch (Throwable var3) {
throw sneaky(var3);
}
}
class="kw">public class="kw">static int defaultCompressionLevel() {
try {
class="kw">return (int)ZSTD_DEFAULT_C_LEVEL.invokeExact();
} catch (Throwable var1) {
throw sneaky(var1);
}
}
class="kw">public class="kw">static MemorySegment createCCtx() {
try {
class="kw">return (MemorySegment)ZSTD_CREATE_CCTX.invokeExact();
} catch (Throwable var1) {
throw sneaky(var1);
}
}
class="kw">public class="kw">static long freeCCtx(MemorySegment var0) {
try {
class="kw">return (long)ZSTD_FREE_CCTX.invokeExact((MemorySegment)var0);
} catch (Throwable var2) {
throw sneaky(var2);
}
}
class="kw">public class="kw">static long compressCCtx(MemorySegment var0, MemorySegment var1, long var2, MemorySegment var4, long var5, int var7) {
try {
class="kw">return (long)ZSTD_COMPRESS_CCTX.invokeExact((MemorySegment)var0, (MemorySegment)var1, (long)var2, (MemorySegment)var4, (long)var5, (int)var7);
} catch (Throwable var9) {
throw sneaky(var9);
}
}
class="kw">public class="kw">static MemorySegment createDCtx() {
try {
class="kw">return (MemorySegment)ZSTD_CREATE_DCTX.invokeExact();
} catch (Throwable var1) {
throw sneaky(var1);
}
}
class="kw">public class="kw">static long freeDCtx(MemorySegment var0) {
try {
class="kw">return (long)ZSTD_FREE_DCTX.invokeExact((MemorySegment)var0);
} catch (Throwable var2) {
throw sneaky(var2);
}
}
class="kw">public class="kw">static long decompressDCtx(MemorySegment var0, MemorySegment var1, long var2, MemorySegment var4, long var5) {
try {
class="kw">return (long)ZSTD_DECOMPRESS_DCTX.invokeExact((MemorySegment)var0, (MemorySegment)var1, (long)var2, (MemorySegment)var4, (long)var5);
} catch (Throwable var8) {
throw sneaky(var8);
}
}
class="kw">private class="kw">static <T class="kw">extends Throwable> RuntimeException sneaky(Throwable var0) class="kw">throws T {
throw var0;
}
class="kw">static {
MemoryLayout var0 = (MemoryLayout)LINKER.canonicalLayouts().get("size_t");
if (!(var0 class="kw">instanceof OfLong var1)) {
throw new UnsupportedOperationException("ZstdNative requires a 64-bit platform (size_t is " + var0 + ")");
} else {
C_SIZE_T = var1;
String var2 = System.getProperty("os.name").toLowerCase(Locale.ROOT);
String var3 = System.getProperty("os.arch").toLowerCase(Locale.ROOT);
String var4;
if (var2.contains("linux")) {
if (!"amd64".equals(var3) && !"x86_64".equals(var3)) {
throw new UnsupportedOperationException("Unsupported Linux architecture: " + var3);
}
var4 = "/class="kw">native/linux-x64/libzstd.so";
} else if (!var2.contains("mac") && !var2.contains("darwin")) {
if (!var2.contains("win")) {
throw new UnsupportedOperationException("Unsupported OS: " + var2);
}
if (!"amd64".equals(var3) && !"x86_64".equals(var3)) {
throw new UnsupportedOperationException("Unsupported Windows architecture: " + var3);
}
var4 = "/class="kw">native/win-x64/zstd.dll";
} else {
if (!"aarch64".equals(var3)) {
throw new UnsupportedOperationException("Unsupported macOS architecture: " + var3);
}
var4 = "/class="kw">native/osx-arm64/libzstd.dylib";
}
try (InputStream var5 = ZstdNative.class.getResourceAsStream(var4)) {
if (var5 == null) {
throw new IllegalStateException("Native library not found on classpath: " + var4);
}
Path var6 = Files.createTempDirectory("zstd-class="kw">native");
Path var7 = var6.resolve(Path.of(var4).getFileName());
Files.copy(var5, var7, StandardCopyOption.REPLACE_EXISTING);
var7.toFile().deleteOnExit();
var6.toFile().deleteOnExit();
LOOKUP = SymbolLookup.libraryLookup(var7, GLOBAL_ARENA);
} catch (IOException var10) {
throw new ExceptionInInitializerError(var10);
}
ZSTD_COMPRESS = downcall("ZSTD_compress", FunctionDescriptor.of(C_SIZE_T, C_POINTER, C_SIZE_T, C_POINTER, C_SIZE_T, C_INT));
ZSTD_DECOMPRESS = downcall("ZSTD_decompress", FunctionDescriptor.of(C_SIZE_T, C_POINTER, C_SIZE_T, C_POINTER, C_SIZE_T));
ZSTD_COMPRESS_BOUND = downcall("ZSTD_compressBound", FunctionDescriptor.of(C_SIZE_T, C_SIZE_T));
ZSTD_GET_FRAME_CONTENT_SIZE = downcall("ZSTD_getFrameContentSize", FunctionDescriptor.of(C_UNSIGNED_LONG_LONG, C_POINTER, C_SIZE_T));
ZSTD_IS_ERROR = downcall("ZSTD_isError", FunctionDescriptor.of(C_INT, C_SIZE_T));
ZSTD_GET_ERROR_NAME = downcall("ZSTD_getErrorName", FunctionDescriptor.of(C_POINTER, C_SIZE_T));
ZSTD_CREATE_CCTX = downcall("ZSTD_createCCtx", FunctionDescriptor.of(C_POINTER));
ZSTD_FREE_CCTX = downcall("ZSTD_freeCCtx", FunctionDescriptor.of(C_SIZE_T, C_POINTER));
ZSTD_COMPRESS_CCTX = downcall("ZSTD_compressCCtx", FunctionDescriptor.of(C_SIZE_T, C_POINTER, C_POINTER, C_SIZE_T, C_POINTER, C_SIZE_T, C_INT));
ZSTD_CREATE_DCTX = downcall("ZSTD_createDCtx", FunctionDescriptor.of(C_POINTER));
ZSTD_FREE_DCTX = downcall("ZSTD_freeDCtx", FunctionDescriptor.of(C_SIZE_T, C_POINTER));
ZSTD_DECOMPRESS_DCTX = downcall("ZSTD_decompressDCtx", FunctionDescriptor.of(C_SIZE_T, C_POINTER, C_POINTER, C_SIZE_T, C_POINTER, C_SIZE_T));
ZSTD_DEFAULT_C_LEVEL = downcall("ZSTD_defaultCLevel", FunctionDescriptor.of(C_INT));
}
}
}