diff options
Diffstat (limited to 'src/corelib/tools/qversionnumber.h')
-rw-r--r-- | src/corelib/tools/qversionnumber.h | 54 |
1 files changed, 45 insertions, 9 deletions
diff --git a/src/corelib/tools/qversionnumber.h b/src/corelib/tools/qversionnumber.h index 9fd4242859..03a27548b8 100644 --- a/src/corelib/tools/qversionnumber.h +++ b/src/corelib/tools/qversionnumber.h @@ -344,30 +344,30 @@ public: if_valid_segment_type<Minor> = true> static constexpr QTypeRevision fromVersion(Major majorVersion, Minor minorVersion) { - Q_ASSERT(isValidSegment(majorVersion)); - Q_ASSERT(isValidSegment(minorVersion)); - return QTypeRevision(quint8(majorVersion), quint8(minorVersion)); + return Q_ASSERT(isValidSegment(majorVersion)), + Q_ASSERT(isValidSegment(minorVersion)), + QTypeRevision(quint8(majorVersion), quint8(minorVersion)); } template<typename Major, if_valid_segment_type<Major> = true> static constexpr QTypeRevision fromMajorVersion(Major majorVersion) { - Q_ASSERT(isValidSegment(majorVersion)); - return QTypeRevision(quint8(majorVersion), SegmentUnknown); + return Q_ASSERT(isValidSegment(majorVersion)), + QTypeRevision(quint8(majorVersion), SegmentUnknown); } template<typename Minor, if_valid_segment_type<Minor> = true> static constexpr QTypeRevision fromMinorVersion(Minor minorVersion) { - Q_ASSERT(isValidSegment(minorVersion)); - return QTypeRevision(SegmentUnknown, quint8(minorVersion)); + return Q_ASSERT(isValidSegment(minorVersion)), + QTypeRevision(SegmentUnknown, quint8(minorVersion)); } template<typename Integer, if_valid_value_type<Integer> = true> static constexpr QTypeRevision fromEncodedVersion(Integer value) { - Q_ASSERT((value & ~Integer(0xffff)) == Integer(0)); - return QTypeRevision((value & Integer(0xff00)) >> 8, value & Integer(0xff)); + return Q_ASSERT((value & ~Integer(0xffff)) == Integer(0)), + QTypeRevision((value & Integer(0xff00)) >> 8, value & Integer(0xff)); } static constexpr QTypeRevision zero() { return QTypeRevision(0, 0); } @@ -416,6 +416,42 @@ inline constexpr bool operator!=(QTypeRevision lhs, QTypeRevision rhs) return lhs.toEncodedVersion<quint16>() != rhs.toEncodedVersion<quint16>(); } +inline constexpr bool operator<(QTypeRevision lhs, QTypeRevision rhs) +{ + return (!lhs.hasMajorVersion() && rhs.hasMajorVersion()) + // non-0 major > unspecified major > major 0 + ? rhs.majorVersion() != 0 + : ((lhs.hasMajorVersion() && !rhs.hasMajorVersion()) + // major 0 < unspecified major < non-0 major + ? lhs.majorVersion() == 0 + : (lhs.majorVersion() != rhs.majorVersion() + // both majors specified and non-0 + ? lhs.majorVersion() < rhs.majorVersion() + : ((!lhs.hasMinorVersion() && rhs.hasMinorVersion()) + // non-0 minor > unspecified minor > minor 0 + ? rhs.minorVersion() != 0 + : ((lhs.hasMinorVersion() && !rhs.hasMinorVersion()) + // minor 0 < unspecified minor < non-0 minor + ? lhs.minorVersion() == 0 + // both minors specified and non-0 + : lhs.minorVersion() < rhs.minorVersion())))); +} + +inline constexpr bool operator>(QTypeRevision lhs, QTypeRevision rhs) +{ + return lhs != rhs && !(lhs < rhs); +} + +inline constexpr bool operator<=(QTypeRevision lhs, QTypeRevision rhs) +{ + return lhs == rhs || lhs < rhs; +} + +inline constexpr bool operator>=(QTypeRevision lhs, QTypeRevision rhs) +{ + return lhs == rhs || !(lhs < rhs); +} + Q_STATIC_ASSERT(sizeof(QTypeRevision) == 2); Q_DECLARE_TYPEINFO(QTypeRevision, Q_MOVABLE_TYPE); |