123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- #include "ctkVersion.h"
- #include <QStringListIterator>
- namespace ctk {
- const QString Version::SEPARATOR = ".";
- const QRegExp Version::RegExp = QRegExp("[a-zA-Z0-9_\\-]*");
- const Version Version::emptyVersion = Version(0, 0, 0);
- void Version::validate()
- {
- valid = RegExp.exactMatch(qualifier);
- }
- Version::Version(unsigned int major, unsigned int minor, unsigned int micro)
- : valid(true), major(major), minor(minor), micro(micro), qualifier("")
- {
- }
- Version::Version(unsigned int major, unsigned int minor, unsigned int micro, const QString& qualifier)
- : valid(false), major(major), minor(minor), micro(micro), qualifier(qualifier)
- {
- this->validate();
- }
- Version::Version(const QString& version)
- : valid(false), major(0), minor(0), micro(0), qualifier("")
- {
- unsigned int maj = 0;
- unsigned int min = 0;
- unsigned int mic = 0;
- QString qual("");
- QStringList st = version.split(SEPARATOR);
- if (st.empty()) return;
- QStringListIterator i(st);
- bool ok = true;
- maj = i.next().toUInt(&ok);
- if (i.hasNext())
- {
- min = i.next().toUInt(&ok);
- if (i.hasNext())
- {
- mic = i.next().toUInt(&ok);
- if (i.hasNext())
- {
- qual = i.next();
- if (i.hasNext())
- {
- ok = false;
- }
- }
- }
- }
- if (!ok) return;
- major = maj;
- minor = min;
- micro = mic;
- qualifier = qual;
- this->validate();
- }
- Version::Version(const Version& version)
- : valid(version.valid), major(version.major), minor(version.minor),
- micro(version.micro), qualifier(version.qualifier)
- {
- }
- Version Version::parseVersion(const QString& version)
- {
- if (version.isEmpty())
- {
- return emptyVersion;
- }
- QString version2 = version.trimmed();
- if (version2.isEmpty())
- {
- return emptyVersion;
- }
- return Version(version2);
- }
- unsigned int Version::getMajor() const
- {
- return major;
- }
- unsigned int Version::getMinor() const
- {
- return minor;
- }
- unsigned int Version::getMicro() const
- {
- return micro;
- }
- QString Version::getQualifier() const
- {
- return qualifier;
- }
- QString Version::toString() const
- {
- QString result;
- result += QString::number(major) + SEPARATOR + QString::number(minor) + SEPARATOR + QString::number(micro);
- if (!qualifier.isEmpty())
- {
- result += SEPARATOR + qualifier;
- }
- return result;
- }
- bool Version::operator==(const Version& other) const
- {
- if (&other == this)
- { // quicktest
- return true;
- }
- return (major == other.major) && (minor == other.minor) && (micro
- == other.micro) && qualifier == other.qualifier;
- }
- int Version::compare(const Version& other) const
- {
- if (&other == this)
- { // quicktest
- return 0;
- }
- if (major < other.major)
- {
- return -1;
- }
- if (major == other.major)
- {
- if (minor < other.minor)
- {
- return -1;
- }
- if (minor == other.minor)
- {
- if (micro < other.micro)
- {
- return -1;
- }
- if (micro == other.micro)
- {
- return qualifier.compare(other.qualifier);
- }
- }
- }
- return 1;
- }
- }
|