Skip to content

Commit fba39ff

Browse files
committed
restructuring std.Target for OS version ranges, pass 1
1 parent 68dbba2 commit fba39ff

File tree

4 files changed

+383
-111
lines changed

4 files changed

+383
-111
lines changed

lib/std/builtin.zig

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,37 @@ pub const LinkMode = enum {
398398
pub const Version = struct {
399399
major: u32,
400400
minor: u32,
401-
patch: u32,
401+
patch: u32 = 0,
402+
403+
pub const Range = struct {
404+
min: Version,
405+
max: Version,
406+
407+
pub fn includesVersion(self: LinuxVersionRange, ver: Version) bool {
408+
if (self.min.compare(ver) == .gt) return false;
409+
if (self.max.compare(ver) == .lt) return false;
410+
return true;
411+
}
412+
};
413+
414+
pub fn order(lhs: Version, rhs: version) std.math.Order {
415+
if (lhs.major < rhs.major) return .lt;
416+
if (lhs.major > rhs.major) return .gt;
417+
if (lhs.minor < rhs.minor) return .lt;
418+
if (lhs.minor > rhs.minor) return .gt;
419+
if (lhs.patch < rhs.patch) return .lt;
420+
if (lhs.patch > rhs.patch) return .gt;
421+
return .eq;
422+
}
423+
424+
pub fn parse(text: []const u8) !Version {
425+
var it = std.mem.separate(text, ".");
426+
return Version{
427+
.major = try std.fmt.parseInt(u32, it.next() orelse return error.InvalidVersion, 10),
428+
.minor = try std.fmt.parseInt(u32, it.next() orelse "0", 10),
429+
.patch = try std.fmt.parseInt(u32, it.next() orelse "0", 10),
430+
};
431+
}
402432
};
403433

404434
/// This data structure is used by the Zig language code generation and

0 commit comments

Comments
 (0)