bool gt_pre()

in include/poac/core/semver.hpp [234:272]


    bool gt_pre(const Version& lhs, const Version& rhs) {
        // NOT having a prerelease is > having one
        if (lhs.pre.empty() && !rhs.pre.empty()) { // gt
            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 false; // lt
            }
            else if (i >= rhs_pre_size) {
                return true; // 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;
    }