authorgravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2024-07-06 23:43:18-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-07-19 14:09:51-07:00
log647a0c9b8227aa8b80b9409d75e7bf25269507a1
tree8120b05b74f0f2fc5778fd825629452375b30b3f
parentebd9efa85052fc19d8296e8e0f4da079da9cab45

mem: handle Float and Bool cases in byteSwapAllFields


1 files changed, 20 insertions(+), 0 deletions(-)

lib/std/mem.zig+20
......@@ -2021,6 +2021,10 @@ pub fn byteSwapAllFields(comptime S: type, ptr: *S) void {
20212021 .Enum => {
20222022 @field(ptr, f.name) = @enumFromInt(@byteSwap(@intFromEnum(@field(ptr, f.name))));
20232023 },
2024 .Bool => {},
2025 .Float => |float_info| {
2026 @field(ptr, f.name) = @bitCast(@byteSwap(@as(std.meta.Int(.unsigned, float_info.bits), @bitCast(@field(ptr, f.name)))));
2027 },
20242028 else => {
20252029 @field(ptr, f.name) = @byteSwap(@field(ptr, f.name));
20262030 },
......@@ -2034,6 +2038,10 @@ pub fn byteSwapAllFields(comptime S: type, ptr: *S) void {
20342038 .Enum => {
20352039 item.* = @enumFromInt(@byteSwap(@intFromEnum(item.*)));
20362040 },
2041 .Bool => {},
2042 .Float => |float_info| {
2043 item.* = @bitCast(@byteSwap(@as(std.meta.Int(.unsigned, float_info.bits), @bitCast(item.*))));
2044 },
20372045 else => {
20382046 item.* = @byteSwap(item.*);
20392047 },
......@@ -2050,24 +2058,32 @@ test byteSwapAllFields {
20502058 f1: u16,
20512059 f2: u32,
20522060 f3: [1]u8,
2061 f4: bool,
2062 f5: f32,
20532063 };
20542064 const K = extern struct {
20552065 f0: u8,
20562066 f1: T,
20572067 f2: u16,
20582068 f3: [1]u8,
2069 f4: bool,
2070 f5: f32,
20592071 };
20602072 var s = T{
20612073 .f0 = 0x12,
20622074 .f1 = 0x1234,
20632075 .f2 = 0x12345678,
20642076 .f3 = .{0x12},
2077 .f4 = true,
2078 .f5 = @as(f32, @bitCast(@as(u32, 0x4640e400))),
20652079 };
20662080 var k = K{
20672081 .f0 = 0x12,
20682082 .f1 = s,
20692083 .f2 = 0x1234,
20702084 .f3 = .{0x12},
2085 .f4 = false,
2086 .f5 = @as(f32, @bitCast(@as(u32, 0x45d42800))),
20712087 };
20722088 byteSwapAllFields(T, &s);
20732089 byteSwapAllFields(K, &k);
......@@ -2076,12 +2092,16 @@ test byteSwapAllFields {
20762092 .f1 = 0x3412,
20772093 .f2 = 0x78563412,
20782094 .f3 = .{0x12},
2095 .f4 = true,
2096 .f5 = @as(f32, @bitCast(@as(u32, 0x00e44046))),
20792097 }, s);
20802098 try std.testing.expectEqual(K{
20812099 .f0 = 0x12,
20822100 .f1 = s,
20832101 .f2 = 0x3412,
20842102 .f3 = .{0x12},
2103 .f4 = false,
2104 .f5 = @as(f32, @bitCast(@as(u32, 0x0028d445))),
20852105 }, k);
20862106}
20872107