mirror of
https://github.com/ziglang/zig.git
synced 2024-11-27 15:42:49 +00:00
6dba1f1c8e
* `@truncate` builtin allows casting to the same size integer. It also performs two's complement casting between signed and unsigned integers. * The idiomatic way to convert between bytes and numbers is now `mem.readInt` and `mem.writeInt` instead of an unsafe cast. It works at compile time, is safer, and looks cleaner. * Implicitly casting an array to a slice is allowed only if the slice is const. * Constant pointer values know if their memory is from a compile- time constant value or a compile-time variable. * Cast from [N]u8 to []T no longer allowed, but [N]u8 to []const T still allowed. * Fix inability to pass a mutable pointer to comptime variable at compile-time to a function and have the function modify the memory pointed to by the pointer. * Add the `comptime T: type` parameter back to mem.eql. Prevents accidentally creating instantiations for arrays.
20 lines
469 B
Zig
20 lines
469 B
Zig
const mem = @import("mem.zig");
|
|
|
|
pub fn swapIfLe(comptime T: type, x: T) -> T {
|
|
swapIf(false, T, x)
|
|
}
|
|
|
|
pub fn swapIfBe(comptime T: type, x: T) -> T {
|
|
swapIf(true, T, x)
|
|
}
|
|
|
|
pub fn swapIf(is_be: bool, comptime T: type, x: T) -> T {
|
|
if (@compileVar("is_big_endian") == is_be) swap(T, x) else x
|
|
}
|
|
|
|
pub fn swap(comptime T: type, x: T) -> T {
|
|
var buf: [@sizeOf(T)]u8 = undefined;
|
|
mem.writeInt(buf[0...], x, false);
|
|
return mem.readInt(buf, T, true);
|
|
}
|