add any (*) to ComparableVersionInfo

This commit is contained in:
ConfiG 2023-08-07 21:13:40 +03:00
parent 7d74f16c01
commit 2b1dc178a4
No known key found for this signature in database
GPG key ID: 44DA1983F524C11B
2 changed files with 17 additions and 6 deletions

View file

@ -13,6 +13,7 @@ namespace geode {
MoreEq, MoreEq,
Less, Less,
More, More,
Any
}; };
/** /**
@ -185,7 +186,7 @@ namespace geode {
protected: protected:
VersionInfo m_version; VersionInfo m_version;
VersionCompare m_compare = VersionCompare::Exact; VersionCompare m_compare = VersionCompare::Exact;
public: public:
constexpr ComparableVersionInfo() = default; constexpr ComparableVersionInfo() = default;
constexpr ComparableVersionInfo( constexpr ComparableVersionInfo(
@ -196,12 +197,16 @@ namespace geode {
static Result<ComparableVersionInfo> parse(std::string const& string); static Result<ComparableVersionInfo> parse(std::string const& string);
constexpr bool compare(VersionInfo const& version) const { constexpr bool compare(VersionInfo const& version) const {
if (m_compare == VersionCompare::Any) {
return true;
}
// opposing major versions never match // opposing major versions never match
if (m_version.getMajor() != version.getMajor()) { if (m_version.getMajor() != version.getMajor()) {
return false; return false;
} }
// the comparison works invertedly as a version like "v1.2.0" // the comparison works invertedly as a version like "v1.2.0"
// should return true for "<=v1.3.0" // should return true for "<=v1.3.0"
switch (m_compare) { switch (m_compare) {
case VersionCompare::LessEq: case VersionCompare::LessEq:

View file

@ -133,6 +133,11 @@ std::ostream& geode::operator<<(std::ostream& stream, VersionInfo const& version
Result<ComparableVersionInfo> ComparableVersionInfo::parse(std::string const& rawStr) { Result<ComparableVersionInfo> ComparableVersionInfo::parse(std::string const& rawStr) {
VersionCompare compare; VersionCompare compare;
auto string = rawStr; auto string = rawStr;
if (string == "*") {
return Ok(ComparableVersionInfo({0, 0, 0}, VersionCompare::Any));
}
if (string.starts_with("<=")) { if (string.starts_with("<=")) {
compare = VersionCompare::LessEq; compare = VersionCompare::LessEq;
string.erase(0, 2); string.erase(0, 2);
@ -162,13 +167,14 @@ Result<ComparableVersionInfo> ComparableVersionInfo::parse(std::string const& ra
} }
std::string ComparableVersionInfo::toString() const { std::string ComparableVersionInfo::toString() const {
std::string prefix = ""; std::string prefix;
switch (m_compare) { switch (m_compare) {
case VersionCompare::Exact: prefix = "="; break; case VersionCompare::Exact: prefix = "="; break;
case VersionCompare::LessEq: prefix = "<="; break; case VersionCompare::LessEq: prefix = "<="; break;
case VersionCompare::MoreEq: prefix = ">="; break; case VersionCompare::MoreEq: prefix = ">="; break;
case VersionCompare::Less: prefix = "<"; break; case VersionCompare::Less: prefix = "<"; break;
case VersionCompare::More: prefix = ">"; break; case VersionCompare::More: prefix = ">"; break;
case VersionCompare::Any: return "*";
} }
return prefix + m_version.toString(); return prefix + m_version.toString();
} }