| ... | ... | @@ -2021,6 +2021,10 @@ pub fn byteSwapAllFields(comptime S: type, ptr: *S) void { |
| 2021 | 2021 | .Enum => { |
| 2022 | 2022 | @field(ptr, f.name) = @enumFromInt(@byteSwap(@intFromEnum(@field(ptr, f.name)))); |
| 2023 | 2023 | }, |
| 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 | }, |
| 2024 | 2028 | else => { |
| 2025 | 2029 | @field(ptr, f.name) = @byteSwap(@field(ptr, f.name)); |
| 2026 | 2030 | }, |
| ... | ... | @@ -2034,6 +2038,10 @@ pub fn byteSwapAllFields(comptime S: type, ptr: *S) void { |
| 2034 | 2038 | .Enum => { |
| 2035 | 2039 | item.* = @enumFromInt(@byteSwap(@intFromEnum(item.*))); |
| 2036 | 2040 | }, |
| 2041 | .Bool => {}, |
| 2042 | .Float => |float_info| { |
| 2043 | item.* = @bitCast(@byteSwap(@as(std.meta.Int(.unsigned, float_info.bits), @bitCast(item.*)))); |
| 2044 | }, |
| 2037 | 2045 | else => { |
| 2038 | 2046 | item.* = @byteSwap(item.*); |
| 2039 | 2047 | }, |
| ... | ... | @@ -2050,24 +2058,32 @@ test byteSwapAllFields { |
| 2050 | 2058 | f1: u16, |
| 2051 | 2059 | f2: u32, |
| 2052 | 2060 | f3: [1]u8, |
| 2061 | f4: bool, |
| 2062 | f5: f32, |
| 2053 | 2063 | }; |
| 2054 | 2064 | const K = extern struct { |
| 2055 | 2065 | f0: u8, |
| 2056 | 2066 | f1: T, |
| 2057 | 2067 | f2: u16, |
| 2058 | 2068 | f3: [1]u8, |
| 2069 | f4: bool, |
| 2070 | f5: f32, |
| 2059 | 2071 | }; |
| 2060 | 2072 | var s = T{ |
| 2061 | 2073 | .f0 = 0x12, |
| 2062 | 2074 | .f1 = 0x1234, |
| 2063 | 2075 | .f2 = 0x12345678, |
| 2064 | 2076 | .f3 = .{0x12}, |
| 2077 | .f4 = true, |
| 2078 | .f5 = @as(f32, @bitCast(@as(u32, 0x4640e400))), |
| 2065 | 2079 | }; |
| 2066 | 2080 | var k = K{ |
| 2067 | 2081 | .f0 = 0x12, |
| 2068 | 2082 | .f1 = s, |
| 2069 | 2083 | .f2 = 0x1234, |
| 2070 | 2084 | .f3 = .{0x12}, |
| 2085 | .f4 = false, |
| 2086 | .f5 = @as(f32, @bitCast(@as(u32, 0x45d42800))), |
| 2071 | 2087 | }; |
| 2072 | 2088 | byteSwapAllFields(T, &s); |
| 2073 | 2089 | byteSwapAllFields(K, &k); |
| ... | ... | @@ -2076,12 +2092,16 @@ test byteSwapAllFields { |
| 2076 | 2092 | .f1 = 0x3412, |
| 2077 | 2093 | .f2 = 0x78563412, |
| 2078 | 2094 | .f3 = .{0x12}, |
| 2095 | .f4 = true, |
| 2096 | .f5 = @as(f32, @bitCast(@as(u32, 0x00e44046))), |
| 2079 | 2097 | }, s); |
| 2080 | 2098 | try std.testing.expectEqual(K{ |
| 2081 | 2099 | .f0 = 0x12, |
| 2082 | 2100 | .f1 = s, |
| 2083 | 2101 | .f2 = 0x3412, |
| 2084 | 2102 | .f3 = .{0x12}, |
| 2103 | .f4 = false, |
| 2104 | .f5 = @as(f32, @bitCast(@as(u32, 0x0028d445))), |
| 2085 | 2105 | }, k); |
| 2086 | 2106 | } |
| 2087 | 2107 | |