Reverses the byte order of all elements in a slice. Handles structs, unions, arrays, enums, floats, and integers recursively. Useful for converting between little-endian and big-endian representations.
pub fn byteSwapAllElements(comptime Elem: type, slice: []Elem) void
pub fn byteSwapAllElements(comptime Elem: type, slice: []Elem) void {
for (slice) |*elem| {
switch (@typeInfo(@TypeOf(elem.*))) {
.@"struct", .@"union", .array => byteSwapAllFields(@TypeOf(elem.*), elem),
.@"enum" => {
elem.* = @fromBackingInt(@intCast(@byteSwap(@backingInt(elem.*))));
},
.bool => {},
.float => |float| {
const int_repr: @Int(.unsigned, float.bits) = @bitCast(elem.*);
elem.* = @bitCast(@byteSwap(int_repr));
},
else => {
elem.* = @byteSwap(elem.*);
},
}
}
}