aboutsummaryrefslogtreecommitdiff
path: root/lib/std/builtin.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-02-24 01:38:21 -0500
committerAndrew Kelley <andrew@ziglang.org>2020-02-28 14:51:50 -0500
commitfba39ff331a84f1a32d076ccbb8b87cd02ea7121 (patch)
tree51133625f5bae70a9f3d5991d9f79839ad1ffc68 /lib/std/builtin.zig
parent68dbba212dd7393c90ab0e914dedeac975fa0224 (diff)
downloadzig-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.zig32
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