/*
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 .
*/
#include
#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]|^)(?\\d+)"
"(?:\\.(?\\d+))(?:\\.(?\\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;
}