const std = @import("std"); pub fn max(a: anytype, b: anytype) @TypeOf(a, b) { return @max(a, b); } pub fn max_int(comptime int: std.builtin.Type.Int) comptime_int { const bit_count = int.bits; if (bit_count == 0) return 0; return (1 << (bit_count - @intFromBool(int.signedness == .signed))) - 1; } pub fn min(a: anytype, b: anytype) @TypeOf(a, b) { return @min(a, b); } pub fn min_int(comptime int: std.builtin.Type.Int) comptime_int { if (int.signedness == .unsigned) return 0; const bit_count = int.bits; if (bit_count == 0) return 0; return -(1 << (bit_count - 1)); } pub fn wrap(value: anytype, lower: anytype, upper: anytype) @TypeOf(value, lower, upper) { const range = upper - lower; return if (range == 0) lower else lower + @mod((@mod((value - lower), range) + range), range); }