diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-08-17 20:11:04 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-08-17 20:11:04 -0700 |
| commit | ed50bd1b655ff028bdd650edecdcdd6675f1dee0 (patch) | |
| tree | 18bab13e2631f2ec55fdd5447baa7134c282e4a4 /std/endian.zig | |
| parent | 0fbb9e09ea89ea24ec214b244e1de9574516c74c (diff) | |
| download | zig-ed50bd1b655ff028bdd650edecdcdd6675f1dee0.tar.gz zig-ed50bd1b655ff028bdd650edecdcdd6675f1dee0.zip | |
progress toward stack trace printing
Diffstat (limited to 'std/endian.zig')
| -rw-r--r-- | std/endian.zig | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/std/endian.zig b/std/endian.zig new file mode 100644 index 0000000000..dbf518d801 --- /dev/null +++ b/std/endian.zig @@ -0,0 +1,21 @@ +pub inline fn swapIfLe(inline T: type, x: T) -> T { + swapIf(false, T, x) +} + +pub inline fn swapIfBe(inline T: type, x: T) -> T { + swapIf(true, T, x) +} + +pub inline fn swapIf(is_be: bool, inline T: type, x: T) -> T { + if (@compileVar("is_big_endian") == is_be) swap(T, x) else x +} + +pub fn swap(inline T: type, x: T) -> T { + const x_slice = ([]u8)((&const x)[0...1]); + var result: T = undefined; + const result_slice = ([]u8)((&result)[0...1]); + for (result_slice) |*b, i| { + *b = x_slice[@sizeOf(T) - i - 1]; + } + return result; +} |
