dependency version operators

а также сделал и вынес Version в ContentPackVersion ну и подправил луа скрипты.
требуются тесты
This commit is contained in:
KotIsOff
2025-08-26 01:52:26 +03:00
parent 5b18639d94
commit 7aa4c33721
7 changed files with 255 additions and 13 deletions
+66
View File
@@ -0,0 +1,66 @@
#include "ContentPackVersion.hpp"
#include <algorithm>
#include <iostream>
#include <sstream>
#include "coders/commons.hpp"
Version::Version(const std::string& version) {
major = 0;
minor = 0;
patch = 0;
std::vector<int> parts;
std::stringstream ss(version);
std::string part;
while (std::getline(ss, part, '.')) {
if (!part.empty()) {
parts.push_back(std::stoi(part));
}
}
if (parts.size() > 0) major = parts[0];
if (parts.size() > 1) minor = parts[1];
if (parts.size() > 2) patch = parts[2];
}
DependencyVersionOperator Version::string_to_operator(const std::string& op) {
if (op == "=")
return DependencyVersionOperator::equal;
else if (op == ">")
return DependencyVersionOperator::more;
else if (op == "<")
return DependencyVersionOperator::less;
else if (op == ">=" || op == "=>")
return DependencyVersionOperator::more_or_equal;
else if (op == "<=" || op == "=<")
return DependencyVersionOperator::less_or_equal;
else return DependencyVersionOperator::equal;
}
bool isNumber(const std::string& s) {
return !s.empty() && std::all_of(s.begin(), s.end(), ::is_digit);
}
bool Version::matches_pattern(const std::string& version) {
for (char c : version) {
if (!isdigit(c) && c != '.') {
return false;
}
}
std::stringstream ss(version);
std::vector<std::string> parts;
std::string part;
while (std::getline(ss, part, '.')) {
if (part.empty()) return false;
if (!isNumber(part)) return false;
parts.push_back(part);
}
return parts.size() == 2 || parts.size() == 3;
}