KWin
Loading...
Searching...
No Matches
version.cpp
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2023 Xaver Hugl <xaver.hugl@gmail.com>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9#include "version.h"
10
11#include <QChar>
12#include <QList>
13
14namespace KWin
15{
16
17Version::Version(uint32_t major, uint32_t minor, uint32_t patch)
18 : m_major(major)
19 , m_minor(minor)
20 , m_patch(patch)
21{
22}
23
24bool Version::isValid() const
25{
26 return m_major > 0 || m_minor > 0 || m_patch > 0;
27}
28
29uint32_t Version::majorVersion() const
30{
31 return m_major;
32}
33
34uint32_t Version::minorVersion() const
35{
36 return m_minor;
37}
38
39uint32_t Version::patchVersion() const
40{
41 return m_patch;
42}
43
44Version Version::parseString(QByteArrayView versionString)
45{
46 // Skip any leading non digit
47 int start = 0;
48 while (start < versionString.length() && !QChar::fromLatin1(versionString[start]).isDigit()) {
49 start++;
50 }
51
52 // Strip any non digit, non '.' characters from the end
53 int end = start;
54 while (end < versionString.length() && (versionString[end] == '.' || QChar::fromLatin1(versionString[end]).isDigit())) {
55 end++;
56 }
57
58 const QByteArray result = versionString.toByteArray().mid(start, end - start);
59 const QList<QByteArray> tokens = result.split('.');
60 if (tokens.empty()) {
61 return Version(0, 0, 0);
62 }
63 const uint64_t major = tokens.at(0).toInt();
64 const uint64_t minor = tokens.count() > 1 ? tokens.at(1).toInt() : 0;
65 const uint64_t patch = tokens.count() > 2 ? tokens.at(2).toInt() : 0;
66
67 return Version(major, minor, patch);
68}
69
70QString Version::toString() const
71{
72 if (m_patch == 0) {
73 return QString::number(m_major) + '.' + QString::number(m_minor);
74 } else {
75 return QString::number(m_major) + '.' + QString::number(m_minor) + '.' + QString::number(m_patch);
76 }
77}
78
79QByteArray Version::toByteArray() const
80{
81 if (m_patch == 0) {
82 return QByteArray::number(m_major) + '.' + QByteArray::number(m_minor);
83 } else {
84 return QByteArray::number(m_major) + '.' + QByteArray::number(m_minor) + '.' + QByteArray::number(m_patch);
85 }
86}
87}
Version()=default
uint32_t minorVersion() const
Definition version.cpp:34
uint32_t patchVersion() const
Definition version.cpp:39
bool isValid() const
Definition version.cpp:24
uint32_t majorVersion() const
Definition version.cpp:29
QString toString() const
Definition version.cpp:70
static Version parseString(QByteArrayView versionString)
Definition version.cpp:44
QByteArray toByteArray() const
Definition version.cpp:79