in include/poac/core/semver.hpp [273:310]
bool lt_pre(const Version& lhs, const Version& rhs) {
if (!lhs.pre.empty() && rhs.pre.empty()) { // lt
return true;
}
const int lhs_pre_size = static_cast<int>(lhs.pre.size());
const int rhs_pre_size = static_cast<int>(rhs.pre.size());
const int max_size = std::max(lhs_pre_size, rhs_pre_size);
for (int i = 0; i <= max_size; ++i) {
if (i >= lhs_pre_size && i >= rhs_pre_size) {
return false; // eq
}
else if (i >= lhs_pre_size) {
return true; // lt
}
else if (i >= rhs_pre_size) {
return false; // gt
}
else if (lhs.pre[i] == rhs.pre[i]) {
continue;
}
else if (is_number(lhs.pre[i]) && !is_number(rhs.pre[i])) {
return true;
}
else if (lhs.pre[i] < rhs.pre[i]) {
return true;
}
else if (is_number(lhs.pre[i]) && is_number(rhs.pre[i])) {
if (std::stoull(lhs.pre[i]) < std::stoull(rhs.pre[i])) {
return true;
}
}
else {
return false;
}
}
return false;
}