refactor: reduce writeTypedVal to a single write call

Also, use the very cool std.mem.writeInt to avoid endianess issues.
This commit is contained in:
CJ van den Berg 2026-03-12 20:16:49 +01:00
parent 301e96f75d
commit 30e260bcea
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9

View file

@ -93,32 +93,28 @@ fn write(writer: *Io.Writer, value: u8) Io.Writer.Error!void {
fn writeTypedVal(writer: *Io.Writer, type_: u8, value: u64) Io.Writer.Error!void { fn writeTypedVal(writer: *Io.Writer, type_: u8, value: u64) Io.Writer.Error!void {
const t: u8 = type_ << 5; const t: u8 = type_ << 5;
if (value < 24) { var buf: [9]u8 = undefined;
try write(writer, t | @as(u8, @truncate(value))); const slice = if (value < 24) blk: {
} else if (value < 256) { buf[0] = t | @as(u8, @truncate(value));
try write(writer, t | 24); break :blk buf[0..1];
try write(writer, @as(u8, @truncate(value))); } else if (value < 256) blk: {
} else if (value < 65536) { buf[0] = t | 24;
try write(writer, t | 25); buf[1] = @truncate(value);
try write(writer, @as(u8, @truncate(value >> 8))); break :blk buf[0..2];
try write(writer, @as(u8, @truncate(value))); } else if (value < 65536) blk: {
} else if (value < 4294967296) { buf[0] = t | 25;
try write(writer, t | 26); std.mem.writeInt(u16, buf[1..3], @truncate(value), .big);
try write(writer, @as(u8, @truncate(value >> 24))); break :blk buf[0..3];
try write(writer, @as(u8, @truncate(value >> 16))); } else if (value < 4294967296) blk: {
try write(writer, @as(u8, @truncate(value >> 8))); buf[0] = t | 26;
try write(writer, @as(u8, @truncate(value))); std.mem.writeInt(u32, buf[1..5], @truncate(value), .big);
} else { break :blk buf[0..5];
try write(writer, t | 27); } else blk: {
try write(writer, @as(u8, @truncate(value >> 56))); buf[0] = t | 27;
try write(writer, @as(u8, @truncate(value >> 48))); std.mem.writeInt(u64, buf[1..9], value, .big);
try write(writer, @as(u8, @truncate(value >> 40))); break :blk buf[0..9];
try write(writer, @as(u8, @truncate(value >> 32))); };
try write(writer, @as(u8, @truncate(value >> 24))); _ = try writer.write(slice);
try write(writer, @as(u8, @truncate(value >> 16)));
try write(writer, @as(u8, @truncate(value >> 8)));
try write(writer, @as(u8, @truncate(value)));
}
} }
pub fn writeArrayHeader(writer: *Io.Writer, sz: usize) Io.Writer.Error!void { pub fn writeArrayHeader(writer: *Io.Writer, sz: usize) Io.Writer.Error!void {