Alignment: min/minStrict max/maxStrict

Carve out a path forward for being a little bit more intentional about
handling "default" alignment values.
This commit is contained in:
Andrew Kelley 2023-09-20 17:29:46 -07:00
parent 5ea3de55c4
commit 51b1a2a6cb

View File

@ -3178,16 +3178,32 @@ pub const Alignment = enum(u6) {
}
/// Treats `none` as zero.
/// This matches previous behavior of using `@max` directly on byte units.
/// Prefer `maxStrict` if possible.
pub fn max(lhs: Alignment, rhs: Alignment) Alignment {
if (lhs == .none) return rhs;
if (rhs == .none) return lhs;
return maxStrict(lhs, rhs);
}
pub fn maxStrict(lhs: Alignment, rhs: Alignment) Alignment {
assert(lhs != .none);
assert(rhs != .none);
return @enumFromInt(@max(@intFromEnum(lhs), @intFromEnum(rhs)));
}
/// Treats `none` as maximum value.
/// Treats `none` as zero.
/// This matches previous behavior of using `@min` directly on byte units.
/// Prefer `minStrict` if possible.
pub fn min(lhs: Alignment, rhs: Alignment) Alignment {
if (lhs == .none) return rhs;
if (rhs == .none) return lhs;
if (lhs == .none) return lhs;
if (rhs == .none) return rhs;
return minStrict(lhs, rhs);
}
pub fn minStrict(lhs: Alignment, rhs: Alignment) Alignment {
assert(lhs != .none);
assert(rhs != .none);
return @enumFromInt(@min(@intFromEnum(lhs), @intFromEnum(rhs)));
}