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));
      }
   }
}