From 647a0c9b8227aa8b80b9409d75e7bf25269507a1 Mon Sep 17 00:00:00 2001 From: kcbanner Date: Sat, 6 Jul 2024 23:43:18 -0400 Subject: [PATCH] mem: handle Float and Bool cases in byteSwapAllFields --- lib/std/mem.zig | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/std/mem.zig b/lib/std/mem.zig index a31f7dfa52..3b45bdbfef 100644 --- a/lib/std/mem.zig +++ b/lib/std/mem.zig @@ -2021,6 +2021,10 @@ pub fn byteSwapAllFields(comptime S: type, ptr: *S) void { .Enum => { @field(ptr, f.name) = @enumFromInt(@byteSwap(@intFromEnum(@field(ptr, f.name)))); }, + .Bool => {}, + .Float => |float_info| { + @field(ptr, f.name) = @bitCast(@byteSwap(@as(std.meta.Int(.unsigned, float_info.bits), @bitCast(@field(ptr, f.name))))); + }, else => { @field(ptr, f.name) = @byteSwap(@field(ptr, f.name)); }, @@ -2034,6 +2038,10 @@ pub fn byteSwapAllFields(comptime S: type, ptr: *S) void { .Enum => { item.* = @enumFromInt(@byteSwap(@intFromEnum(item.*))); }, + .Bool => {}, + .Float => |float_info| { + item.* = @bitCast(@byteSwap(@as(std.meta.Int(.unsigned, float_info.bits), @bitCast(item.*)))); + }, else => { item.* = @byteSwap(item.*); }, @@ -2050,24 +2058,32 @@ test byteSwapAllFields { f1: u16, f2: u32, f3: [1]u8, + f4: bool, + f5: f32, }; const K = extern struct { f0: u8, f1: T, f2: u16, f3: [1]u8, + f4: bool, + f5: f32, }; var s = T{ .f0 = 0x12, .f1 = 0x1234, .f2 = 0x12345678, .f3 = .{0x12}, + .f4 = true, + .f5 = @as(f32, @bitCast(@as(u32, 0x4640e400))), }; var k = K{ .f0 = 0x12, .f1 = s, .f2 = 0x1234, .f3 = .{0x12}, + .f4 = false, + .f5 = @as(f32, @bitCast(@as(u32, 0x45d42800))), }; byteSwapAllFields(T, &s); byteSwapAllFields(K, &k); @@ -2076,12 +2092,16 @@ test byteSwapAllFields { .f1 = 0x3412, .f2 = 0x78563412, .f3 = .{0x12}, + .f4 = true, + .f5 = @as(f32, @bitCast(@as(u32, 0x00e44046))), }, s); try std.testing.expectEqual(K{ .f0 = 0x12, .f1 = s, .f2 = 0x3412, .f3 = .{0x12}, + .f4 = false, + .f5 = @as(f32, @bitCast(@as(u32, 0x0028d445))), }, k); }