From 86e312abea8012e39f868f1f2fbc72d6e28a466b Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Thu, 7 Oct 2021 16:33:54 -0700 Subject: [PATCH] add sliceToInt --- src/lib.zig | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/lib.zig b/src/lib.zig index 1aacd86ff0d994b7647f12da5db05ee5a83b6192..57a3b3c2ea3f617872aa5b2d57a365038518afc7 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -87,3 +87,16 @@ pub fn doesFileExist(dir: ?std.fs.Dir, fpath: []const u8) !bool { defer file.close(); return true; } + +pub fn sliceToInt(comptime T: type, comptime E: type, slice: []const E) !T { + const a = @typeInfo(T).Int.bits; + const b = @typeInfo(E).Int.bits; + if (a < b * slice.len) return error.Overflow; + + var n: T = 0; + for (slice) |item, i| { + const shift = @intCast(std.math.Log2Int(T), b * (slice.len - 1 - i)); + n = n | (@as(T, item) << shift); + } + return n; +} -- 2.54.0