refactor: reduce write calls in float writing functions

Also using std.mem.writeInt.
This commit is contained in:
CJ van den Berg 2026-03-12 20:18:05 +01:00
parent 30e260bcea
commit be1e1f551e
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9

View file

@ -146,47 +146,24 @@ fn writeU64(writer: *Io.Writer, value: u64) Io.Writer.Error!void {
} }
fn writeF16(writer: *Io.Writer, value: f16) Io.Writer.Error!void { fn writeF16(writer: *Io.Writer, value: f16) Io.Writer.Error!void {
try write(writer, cbor_magic_float16); var buf: [3]u8 = undefined;
const value_bytes = std.mem.asBytes(&value); buf[0] = cbor_magic_float16;
switch (native_endian) { std.mem.writeInt(u16, buf[1..3], @bitCast(value), .big);
.big => try write(writer, value_bytes), _ = try writer.write(&buf);
.little => {
try write(writer, value_bytes[1]);
try write(writer, value_bytes[0]);
},
}
} }
fn writeF32(writer: *Io.Writer, value: f32) Io.Writer.Error!void { fn writeF32(writer: *Io.Writer, value: f32) Io.Writer.Error!void {
try write(writer, cbor_magic_float32); var buf: [5]u8 = undefined;
const value_bytes = std.mem.asBytes(&value); buf[0] = cbor_magic_float32;
switch (native_endian) { std.mem.writeInt(u32, buf[1..5], @bitCast(value), .big);
.big => try write(writer, value_bytes), _ = try writer.write(&buf);
.little => {
try write(writer, value_bytes[3]);
try write(writer, value_bytes[2]);
try write(writer, value_bytes[1]);
try write(writer, value_bytes[0]);
},
}
} }
fn writeF64(writer: *Io.Writer, value: f64) Io.Writer.Error!void { fn writeF64(writer: *Io.Writer, value: f64) Io.Writer.Error!void {
try write(writer, cbor_magic_float64); var buf: [9]u8 = undefined;
const value_bytes = std.mem.asBytes(&value); buf[0] = cbor_magic_float64;
switch (native_endian) { std.mem.writeInt(u64, buf[1..9], @bitCast(value), .big);
.big => try write(writer, value_bytes), _ = try writer.write(&buf);
.little => {
try write(writer, value_bytes[7]);
try write(writer, value_bytes[6]);
try write(writer, value_bytes[5]);
try write(writer, value_bytes[4]);
try write(writer, value_bytes[3]);
try write(writer, value_bytes[2]);
try write(writer, value_bytes[1]);
try write(writer, value_bytes[0]);
},
}
} }
fn writeString(writer: *Io.Writer, s: []const u8) Io.Writer.Error!void { fn writeString(writer: *Io.Writer, s: []const u8) Io.Writer.Error!void {