6#include <QtCore/qversionnumber.h>
7#include <QtCore/qhash.h>
8#include <QtCore/private/qlocale_tools_p.h>
9#include <QtCore/qcollator.h>
11#ifndef QT_NO_DATASTREAM
12# include <QtCore/qdatastream.h>
15#ifndef QT_NO_DEBUG_STREAM
16# include <QtCore/qdebug.h>
151 if (m_segments.isUsingPointer())
152 return *m_segments.pointer_segments;
240 for (
i = m_segments.size();
i; --
i)
241 if (m_segments.at(
i - 1) != 0)
264 if (segmentAt(
i) !=
other.segmentAt(
i))
287 if (
Q_LIKELY(!
v1.m_segments.isUsingPointer() && !
v2.m_segments.isUsingPointer())) {
289 const qint8 *ptr1 =
v1.m_segments.inline_segments + InlineSegmentStartIdx;
290 const qint8 *ptr2 =
v2.m_segments.inline_segments + InlineSegmentStartIdx;
291 commonlen =
qMin(
v1.m_segments.size(),
292 v2.m_segments.size());
294 if (
int x = ptr1[
i] - ptr2[
i])
297 commonlen =
qMin(
v1.segmentCount(),
v2.segmentCount());
299 if (
v1.segmentAt(
i) !=
v2.segmentAt(
i))
300 return v1.segmentAt(
i) -
v2.segmentAt(
i);
306 if (
v1.segmentCount() > commonlen) {
308 if (
v1.segmentAt(commonlen) != 0)
309 return v1.segmentAt(commonlen);
312 }
else if (
v2.segmentCount() > commonlen) {
314 if (
v2.segmentAt(commonlen) != 0)
315 return -
v2.segmentAt(commonlen);
337 for (
i = 0;
i < commonlen; ++
i) {
338 if (
v1.segmentAt(
i) !=
v2.segmentAt(
i))
451 QVarLengthArray<int, 32> seg;
453 const char *
start =
string.begin();
454 const char *lastGoodEnd =
start;
455 const char *endOfString =
string.end();
460 if (used <= 0 || value >
qulonglong(std::numeric_limits<int>::max()))
462 seg.append(
int(
value));
464 lastGoodEnd =
start - 1;
465 }
while (
start < endOfString && *lastGoodEnd ==
'.');
468 *suffixIndex = lastGoodEnd -
string.begin();
483 QVarLengthArray<char>
copy;
491 return string.visit([=] (
auto string) {
return from_string(
string, suffixIndex); });
494void QVersionNumber::SegmentStorage::setListData(
const QList<int> &seg)
496 pointer_segments =
new QList<int>(seg);
499void QVersionNumber::SegmentStorage::setListData(QList<int> &&seg)
501 pointer_segments =
new QList<int>(std::move(seg));
504void QVersionNumber::SegmentStorage::setListData(
const int *
first,
const int *last)
506 pointer_segments =
new QList<int>(
first, last);
509void QVersionNumber::SegmentStorage::resize(
qsizetype len)
511 if (isUsingPointer())
512 pointer_segments->resize(
len);
517void QVersionNumber::SegmentStorage::setVector(
int len,
int maj,
int min,
int mic)
519 pointer_segments =
new QList<int>;
520 pointer_segments->resize(
len);
521 pointer_segments->data()[0] = maj;
523 pointer_segments->data()[1] =
min;
525 pointer_segments->data()[2] = mic;
530#ifndef QT_NO_DATASTREAM
556 if (!version.m_segments.isUsingPointer())
557 version.m_segments.pointer_segments =
new QList<int>;
558 in >> *version.m_segments.pointer_segments;
563#ifndef QT_NO_DEBUG_STREAM
567 debug.nospace().noquote();
583 for (
int i = 0;
i <
key.segmentCount(); ++
i)
\inmodule QtCore\reentrant
size_t qHash(const QVersionNumber &key, size_t seed)
\macro QT_RESTRICTED_CAST_FROM_ASCII
void reserve(qsizetype size)
Ensures the string has space for at least size characters.
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QDataStream & operator<<(QDataStream &out, const QVersionNumber &version)
Writes the version number version to stream out.
Q_CORE_EXPORT bool isPrefixOf(const QVersionNumber &other) const noexcept
Returns true if the current version number is contained in the other version number,...
friend Q_CORE_EXPORT QDataStream & operator>>(QDataStream &in, QVersionNumber &version)
Reads a version number from stream in and stores it in version.
static Q_CORE_EXPORT QVersionNumber commonPrefix(const QVersionNumber &v1, const QVersionNumber &v2)
QVersionNumber QVersionNumber::commonPrefix(const QVersionNumber &v1, ...
QVersionNumber() noexcept
Produces a null version.
static Q_CORE_EXPORT QVersionNumber fromString(QAnyStringView string, qsizetype *suffixIndex=nullptr)
Q_CORE_EXPORT QList< int > segments() const
Returns all of the numerical segments.
qsizetype segmentCount() const noexcept
Returns the number of integers stored in segments().
Q_CORE_EXPORT QString toString() const
Returns a string with all of the segments delimited by a period ({.}).
Q_CORE_EXPORT QVersionNumber normalized() const
Returns an equivalent version number but with all trailing zeros removed.
int segmentAt(qsizetype index) const noexcept
Returns the segment value at index.
static Q_CORE_EXPORT int compare(const QVersionNumber &v1, const QVersionNumber &v2) noexcept
Compares v1 with v2 and returns an integer less than, equal to, or greater than zero,...
QHash< int, QWidget * > hash
[35multi]
Combined button and popup list for selecting options.
constexpr const T & min(const T &a, const T &b)
static jboolean copy(JNIEnv *, jobject)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
constexpr const T & qMin(const T &a, const T &b)
constexpr const T & qMax(const T &a, const T &b)
GLint GLfloat GLfloat GLfloat v2
GLint GLint GLint GLint GLint x
[0]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
static int segmentCount(const QPainterPath &path, qreal pathLength)
static Q_CONSTINIT QBasicAtomicInteger< unsigned > seed
QT_BEGIN_NAMESPACE typedef signed char qint8
static QVersionNumber from_string(QLatin1StringView string, qsizetype *suffixIndex)
void qt_to_latin1(uchar *dst, const char16_t *uc, qsizetype len)
QTextStream out(stdout)
[7]