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