Files
        @ 71441196d1c5
    
        
              Branch filter: 
        
    Location: tempo-plotter/src/versionnumber.cpp
        
            
            71441196d1c5
            2.6 KiB
            text/x-c++hdr
        
        
    
    Merge with default
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103  | /*
  Copyright © 2017 Hasan Yavuz Özderya
  This file is part of serialplot.
  serialplot is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.
  serialplot is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  You should have received a copy of the GNU General Public License
  along with serialplot.  If not, see <http://www.gnu.org/licenses/>.
*/
#include <QRegularExpression>
#include "versionnumber.h"
VersionNumber::VersionNumber(unsigned mj, unsigned mn, unsigned pt)
{
    major = mj;
    minor = mn;
    patch = pt;
}
QString VersionNumber::toString() const
{
    return QString("%1.%2.%3").arg(major).arg(minor).arg(patch);
}
bool VersionNumber::extract(const QString& str, VersionNumber& number)
{
    QRegularExpression regexp("(?:[-_vV \\t]|^)(?<major>\\d+)"
                              "(?:\\.(?<minor>\\d+))(?:\\.(?<patch>\\d+))?[-_ \\t]?");
    auto match = regexp.match(str, 0, QRegularExpression::PartialPreferCompleteMatch);
    if (!(match.hasMatch() || match.hasPartialMatch())) return false;
    number.major = match.captured("major").toUInt();
    auto zeroIfNull = [](QString str) -> unsigned
        {
            if (str.isNull()) return 0;
            return str.toUInt();
        };
    number.minor = zeroIfNull(match.captured("minor"));
    number.patch = zeroIfNull(match.captured("patch"));
    return true;
}
bool operator==(const VersionNumber& lhs, const VersionNumber& rhs)
{
    return lhs.major == rhs.major &&
           lhs.minor == rhs.minor &&
           lhs.patch == rhs.patch;
}
bool operator<(const VersionNumber& lhs, const VersionNumber& rhs)
{
    if (lhs.major < rhs.major)
    {
        return true;
    }
    else if (lhs.major == rhs.major)
    {
        if (lhs.minor < rhs.minor)
        {
             return true;
        }
        else if (lhs.minor == rhs.minor)
        {
            if (lhs.patch < rhs.patch) return true;
        }
    }
    return false;
}
bool operator>(const VersionNumber& lhs, const VersionNumber& rhs)
{
    if (lhs.major > rhs.major)
    {
        return true;
    }
    else if (lhs.major == rhs.major)
    {
        if (lhs.minor > rhs.minor)
        {
             return true;
        }
        else if (lhs.minor == rhs.minor)
        {
            if (lhs.patch > rhs.patch) return true;
        }
    }
    return false;
}
 |