diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-02-24 01:38:21 -0500 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-02-28 14:51:50 -0500 |
| commit | fba39ff331a84f1a32d076ccbb8b87cd02ea7121 (patch) | |
| tree | 51133625f5bae70a9f3d5991d9f79839ad1ffc68 /lib/std/builtin.zig | |
| parent | 68dbba212dd7393c90ab0e914dedeac975fa0224 (diff) | |
| download | zig-fba39ff331a84f1a32d076ccbb8b87cd02ea7121.tar.gz zig-fba39ff331a84f1a32d076ccbb8b87cd02ea7121.zip | |
restructuring std.Target for OS version ranges, pass 1
Diffstat (limited to 'lib/std/builtin.zig')
| -rw-r--r-- | lib/std/builtin.zig | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/lib/std/builtin.zig b/lib/std/builtin.zig index 5440de4d3b..1bb8fd85ae 100644 --- a/lib/std/builtin.zig +++ b/lib/std/builtin.zig @@ -398,7 +398,37 @@ pub const LinkMode = enum { pub const Version = struct { major: u32, minor: u32, - patch: u32, + patch: u32 = 0, + + pub const Range = struct { + min: Version, + max: Version, + + pub fn includesVersion(self: LinuxVersionRange, ver: Version) bool { + if (self.min.compare(ver) == .gt) return false; + if (self.max.compare(ver) == .lt) return false; + return true; + } + }; + + pub fn order(lhs: Version, rhs: version) std.math.Order { + if (lhs.major < rhs.major) return .lt; + if (lhs.major > rhs.major) return .gt; + if (lhs.minor < rhs.minor) return .lt; + if (lhs.minor > rhs.minor) return .gt; + if (lhs.patch < rhs.patch) return .lt; + if (lhs.patch > rhs.patch) return .gt; + return .eq; + } + + pub fn parse(text: []const u8) !Version { + var it = std.mem.separate(text, "."); + return Version{ + .major = try std.fmt.parseInt(u32, it.next() orelse return error.InvalidVersion, 10), + .minor = try std.fmt.parseInt(u32, it.next() orelse "0", 10), + .patch = try std.fmt.parseInt(u32, it.next() orelse "0", 10), + }; + } }; /// This data structure is used by the Zig language code generation and |
