From 211f0a2226db7c53cfa1581c5572a6100c3e17f6 Mon Sep 17 00:00:00 2001 From: daurnimator Date: Mon, 22 Apr 2019 03:48:27 +1000 Subject: [PATCH] std: Add mem.nativeIntToBig and mem.nativeIntToLittle To be used where `htons`, `htonl`, etc. would be used in C. It's useful to have a function that returns a number directly for use in initialisers. --- std/mem.zig | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/std/mem.zig b/std/mem.zig index 46cfda2d94..b22396c0e9 100644 --- a/std/mem.zig +++ b/std/mem.zig @@ -754,6 +754,22 @@ test "writeIntBig and writeIntLittle" { testing.expect(eql_slice_u8(buf2[0..], []u8{ 0xfc, 0xff })); } +pub fn nativeIntToBig(comptime T: type, x: T) T { + comptime assert(T.bit_count % 8 == 0); + switch (builtin.endian) { + builtin.Endian.Little => return @bswap(T, x), + builtin.Endian.Big => return x, + } +} + +pub fn nativeIntToLittle(comptime T: type, x: T) T { + comptime assert(T.bit_count % 8 == 0); + switch (builtin.endian) { + builtin.Endian.Little => return x, + builtin.Endian.Big => return @bswap(T, x), + } +} + pub fn hash_slice_u8(k: []const u8) u32 { // FNV 32-bit hash var h: u32 = 2166136261;