This commit is contained in:
Michel Elkenwaat 2023-11-22 16:29:15 +01:00
parent ff84c8f564
commit 9dc7027a22
No known key found for this signature in database
GPG Key ID: 089A09BF9FCCBE16

View File

@ -74,14 +74,37 @@ public class ByteMessage extends ByteBuf {
} }
public void writeVarInt(int value) { public void writeVarInt(int value) {
while (true) { // Peel the one and two byte count cases explicitly as they are the most common VarInt sizes
if ((value & 0xFFFFFF80) == 0) { // that the proxy will write, to improve inlining.
buf.writeByte(value); if ((value & (0xFFFFFFFF << 7)) == 0) {
return; buf.writeByte(value);
} } else if ((value & (0xFFFFFFFF << 14)) == 0) {
int w = (value & 0x7F | 0x80) << 8 | (value >>> 7);
buf.writeShort(w);
} else {
writeVarIntFull(value);
}
}
buf.writeByte(value & 0x7F | 0x80); private void writeVarIntFull(final int value) {
value >>>= 7; // See https://steinborn.me/posts/performance/how-fast-can-you-write-a-varint/
if ((value & (0xFFFFFFFF << 7)) == 0) {
buf.writeByte(value);
} else if ((value & (0xFFFFFFFF << 14)) == 0) {
int w = (value & 0x7F | 0x80) << 8 | (value >>> 7);
buf.writeShort(w);
} else if ((value & (0xFFFFFFFF << 21)) == 0) {
int w = (value & 0x7F | 0x80) << 16 | ((value >>> 7) & 0x7F | 0x80) << 8 | (value >>> 14);
buf.writeMedium(w);
} else if ((value & (0xFFFFFFFF << 28)) == 0) {
int w = (value & 0x7F | 0x80) << 24 | (((value >>> 7) & 0x7F | 0x80) << 16)
| ((value >>> 14) & 0x7F | 0x80) << 8 | (value >>> 21);
buf.writeInt(w);
} else {
int w = (value & 0x7F | 0x80) << 24 | ((value >>> 7) & 0x7F | 0x80) << 16
| ((value >>> 14) & 0x7F | 0x80) << 8 | ((value >>> 21) & 0x7F | 0x80);
buf.writeInt(w);
buf.writeByte(value >>> 28);
} }
} }