MemorySegmentUtil class

Пакет: com.hypixel.hytale.server.core.util.io

Файл: com/hypixel/hytale/server/core/util/io/MemorySegmentUtil.java

Поля (6)

МодификаторыТипИмя
final OfShort SHORT_BE
break
break
int var3
byte[] var4
byte[] var4

Методы (10)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("String is too large")
abstract return new Stringreturn new String(var4, StandardCharsets.UTF_8)
if if(var4.length >= 65535)
static int readNumberint readNumber(@Nonnull MemorySegment var0, int var1, int var2)
switch switch(var2)
return switchreturn switch(var2)
static int utf8Sizeint utf8Size(@Nonnull String var0)
static int utf8Sizeint utf8Size(@Nonnull MemorySegment var0, long var1)
static void writeNumbervoid writeNumber(@Nonnull MemorySegment var0, int var1, int var2, int var3)
static int writeUTFint writeUTF(@Nonnull MemorySegment var0, long var1, @Nonnull String var3)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.util.io;

class="kw">import com.hypixel.hytale.protocol.io.PacketIO;
class="kw">import java.lang.foreign.MemorySegment;
class="kw">import java.lang.foreign.ValueLayout;
class="kw">import java.lang.foreign.ValueLayout.OfFloat;
class="kw">import java.lang.foreign.ValueLayout.OfInt;
class="kw">import java.lang.foreign.ValueLayout.OfLong;
class="kw">import java.lang.foreign.ValueLayout.OfShort;
class="kw">import java.nio.ByteOrder;
class="kw">import java.nio.charset.StandardCharsets;
class="kw">import javax.annotation.Nonnull;

class="kw">public class MemorySegmentUtil {
   class="kw">public class="kw">static class="kw">final OfShort SHORT_BE = ValueLayout.JAVA_SHORT_UNALIGNED.withOrder(ByteOrder.BIG_ENDIAN);
   class="kw">public class="kw">static class="kw">final OfShort SHORT_LE = ValueLayout.JAVA_SHORT_UNALIGNED.withOrder(ByteOrder.LITTLE_ENDIAN);
   class="kw">public class="kw">static class="kw">final OfInt INT_BE = ValueLayout.JAVA_INT_UNALIGNED.withOrder(ByteOrder.BIG_ENDIAN);
   class="kw">public class="kw">static class="kw">final OfInt INT_LE = ValueLayout.JAVA_INT_UNALIGNED.withOrder(ByteOrder.LITTLE_ENDIAN);
   class="kw">public class="kw">static class="kw">final OfLong LONG_BE = ValueLayout.JAVA_LONG_UNALIGNED.withOrder(ByteOrder.BIG_ENDIAN);
   class="kw">public class="kw">static class="kw">final OfLong LONG_LE = ValueLayout.JAVA_LONG_UNALIGNED.withOrder(ByteOrder.LITTLE_ENDIAN);
   class="kw">public class="kw">static class="kw">final OfFloat FLOAT_BE = ValueLayout.JAVA_FLOAT_UNALIGNED.withOrder(ByteOrder.BIG_ENDIAN);
   class="kw">public class="kw">static class="kw">final OfFloat FLOAT_LE = ValueLayout.JAVA_FLOAT_UNALIGNED.withOrder(ByteOrder.LITTLE_ENDIAN);
   class="kw">public class="kw">static class="kw">final int MAX_UNSIGNED_SHORT_VALUE = 65535;

   class="kw">public MemorySegmentUtil() {
   }

   class="kw">public class="kw">static int utf8Size(@Nonnull String var0) {
      class="kw">return 2 + PacketIO.utf8ByteLength(var0);
   }

   class="kw">public class="kw">static int utf8Size(@Nonnull MemorySegment var0, long var1) {
      class="kw">return 2 + Short.toUnsignedInt(var0.get(SHORT_BE, var1));
   }

   class="kw">public class="kw">static int writeUTF(@Nonnull MemorySegment var0, long var1, @Nonnull String var3) {
      byte[] var4 = var3.getBytes(StandardCharsets.UTF_8);
      if (var4.length >= 65535) {
         throw new IllegalArgumentException("String is too large");
      }

      var0.set(SHORT_BE, var1, (short)var4.length);
      MemorySegment.copy(var4, 0, var0, ValueLayout.JAVA_BYTE, var1 + 2L, var4.length);
      class="kw">return 2 + var4.length;
   }

   @Nonnull
   class="kw">public class="kw">static String readUTF(@Nonnull MemorySegment var0, long var1) {
      int var3 = Short.toUnsignedInt(var0.get(SHORT_BE, var1));
      byte[] var4 = var0.asSlice(var1 + 2L, var3).toArray(ValueLayout.JAVA_BYTE);
      class="kw">return new String(var4, StandardCharsets.UTF_8);
   }

   class="kw">public class="kw">static void writeNumber(@Nonnull MemorySegment var0, int var1, int var2, int var3) {
      class="kw">switch (var2) {
         case 1:
            var0.set(ValueLayout.JAVA_BYTE, var1, (byte)var3);
            break;
         case 2:
            var0.set(ValueLayout.JAVA_SHORT_UNALIGNED, var1, (short)var3);
         case 3:
         class="kw">default:
            break;
         case 4:
            var0.set(ValueLayout.JAVA_INT_UNALIGNED, var1, var3);
      }
   }

   class="kw">public class="kw">static int readNumber(@Nonnull MemorySegment var0, int var1, int var2) {
      class="kw">return class="kw">switch (var2) {
         case 1 -> var0.get(ValueLayout.JAVA_BYTE, var1) & 0xFF;
         case 2 -> var0.get(ValueLayout.JAVA_SHORT_UNALIGNED, var1) & 65535;
         class="kw">default -> 0;
         case 4 -> var0.get(ValueLayout.JAVA_INT_UNALIGNED, var1);
      };
   }
}