13
0
geforkt von Mirrors/Velocity

Revert "Optimize varint writing"

This reverts commit 3db2fe8d63.
Dieser Commit ist enthalten in:
Andrew Steinborn 2021-05-03 18:07:25 -04:00
Ursprung 3db2fe8d63
Commit e531cdb373

Datei anzeigen

@ -62,17 +62,6 @@ public enum ProtocolUtils {
private static final int DEFAULT_MAX_STRING_SIZE = 65536; // 64KiB private static final int DEFAULT_MAX_STRING_SIZE = 65536; // 64KiB
private static final QuietDecoderException BAD_VARINT_CACHED = private static final QuietDecoderException BAD_VARINT_CACHED =
new QuietDecoderException("Bad varint decoded"); new QuietDecoderException("Bad varint decoded");
private static final int[] VAR_INT_LENGTHS = new int[33];
static {
// Inspired by https://richardstartin.github.io/posts/dont-use-protobuf-for-telemetry
//
// This has been slightly modified in that we reduce the length to 32-bit only, since Velocity
// doesn't look at any part of the Minecraft protocol that requires us to look at VarLongs.
for (int i = 0; i <= 32; ++i) {
VAR_INT_LENGTHS[i] = (31 - i) / 7;
}
}
/** /**
* Reads a Minecraft-style VarInt from the specified {@code buf}. * Reads a Minecraft-style VarInt from the specified {@code buf}.
@ -108,22 +97,21 @@ public enum ProtocolUtils {
return Integer.MIN_VALUE; return Integer.MIN_VALUE;
} }
public static int varintBytes(int value) {
return VAR_INT_LENGTHS[Integer.numberOfLeadingZeros(value)];
}
/** /**
* Writes a Minecraft-style VarInt to the specified {@code buf}. * Writes a Minecraft-style VarInt to the specified {@code buf}.
* @param buf the buffer to read from * @param buf the buffer to read from
* @param value the integer to write * @param value the integer to write
*/ */
public static void writeVarInt(ByteBuf buf, int value) { public static void writeVarInt(ByteBuf buf, int value) {
int length = varintBytes(value); while (true) {
for (int i = 0; i < length; ++i) { if ((value & 0xFFFFFF80) == 0) {
buf.writeByte(((byte) ((value & 0x7F) | 0x80))); buf.writeByte(value);
return;
}
buf.writeByte(value & 0x7F | 0x80);
value >>>= 7; value >>>= 7;
} }
buf.writeByte((byte) value);
} }
public static String readString(ByteBuf buf) { public static String readString(ByteBuf buf) {