1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-21 09:27:59 +02:00
Beef/BeefLibs/corlib/src/Version.bf

115 lines
2.5 KiB
Beef
Raw Normal View History

2019-08-23 11:56:54 -07:00
namespace System
{
struct Version
{
public uint32 Major;
public uint32 Minor;
public uint32 Build = 0;
public uint32 Revision = 0;
2019-08-23 11:56:54 -07:00
public this(uint32 major, uint32 minor)
2019-08-23 11:56:54 -07:00
{
Major = major;
Minor = minor;
}
2021-12-29 12:01:44 -03:00
public this(uint32 major, uint32 minor, uint32 build)
{
Major = major;
Minor = minor;
Build = build;
}
2019-08-23 11:56:54 -07:00
public this(uint32 major, uint32 minor, uint32 build, uint32 revision)
2019-08-23 11:56:54 -07:00
{
Major = major;
Minor = minor;
Build = build;
Revision = revision;
}
public static int operator<=>(Version lhs, Version rhs)
{
if (lhs.Major != rhs.Major)
if (lhs.Major > rhs.Major)
return 1;
else
return -1;
if (lhs.Minor != rhs.Minor)
if (lhs.Minor > rhs.Minor)
return 1;
else
return -1;
if (lhs.Build != rhs.Build)
if (lhs.Build > rhs.Build)
return 1;
else
return -1;
if (lhs.Revision != rhs.Revision)
if (lhs.Revision > rhs.Revision)
return 1;
else
return -1;
return 0;
}
public bool Check(uint32 major)
{
return Major == major;
}
public bool Check(uint32 major, uint32 minor)
{
return (Major > major) || ((Major == major) && (Minor >= minor));
}
public bool Check(uint32 major, uint32 minor, uint32 build)
{
return (Major > major) || ((Major == major) && (Minor > minor)) ||
((Major == major) && (Minor == minor) && (Build >= build));
}
public bool Check(uint32 major, uint32 minor, uint32 build, uint32 revision)
{
return (Major > major) || ((Major == major) && (Minor > minor)) ||
((Major == major) && (Minor == minor) && (Build > build)) ||
((Major == major) && (Minor == minor) && (Build == build) && (Revision >= revision));
}
2021-12-29 12:01:44 -03:00
public static Result<Version> Parse(StringView version)
{
var components = version.Split('.');
mixin ParseComponent(var component)
{
uint32 parsedComponent;
if (!(uint32.Parse(component) case .Ok(out parsedComponent)))
return .Err;
parsedComponent
}
let major = ParseComponent!(components.GetNext());
let minor = ParseComponent!(components.GetNext());
if (!components.HasMore)
return Version(major, minor);
let build = ParseComponent!(components.GetNext());
if (!components.HasMore)
return Version(major, minor, build);
let revision = ParseComponent!(components.GetNext());
if (!components.HasMore)
return Version(major, minor, build, revision);
return .Err;
}
2019-08-23 11:56:54 -07:00
}
}