From d77ee373c1f1b4156c60dd1fe486d779c28263c9 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Wed, 9 Aug 2023 20:37:13 -0700 Subject: [PATCH] add safeAddWrap --- src/lib.zig | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lib.zig b/src/lib.zig index 6f217856fa283a3f1900fbc6a1749021d9cd33dc..8ce19859c0cb966f3051dc6be4813d6e5bbceba7 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -454,6 +454,14 @@ pub fn safeAdd(a: anytype, b: anytype) @TypeOf(a) { return a - @as(@TypeOf(a), @intCast(-@as(OneBiggerInt(@TypeOf(b)), b))); } +/// Allows u32 + i16 to work +pub fn safeAddWrap(a: anytype, b: anytype) @TypeOf(a) { + if (b >= 0) { + return a +% @as(@TypeOf(a), @intCast(b)); + } + return a -% @as(@TypeOf(a), @intCast(-@as(OneBiggerInt(@TypeOf(b)), b))); +} + pub fn readBytesAlloc(reader: anytype, alloc: std.mem.Allocator, len: usize) ![]u8 { var list = std.ArrayListUnmanaged(u8){}; try list.ensureTotalCapacityPrecise(alloc, len); -- 2.54.0