Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-01-07 10:16:25

0001 // Copyright (C) 2021 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 
0004 #include <QtCore/qglobal.h>
0005 #include <QtCore/qcompare.h>
0006 #include <QtCore/qversionnumber.h>
0007 
0008 #ifndef QOPERATINGSYSTEMVERSION_H
0009 #define QOPERATINGSYSTEMVERSION_H
0010 
0011 QT_BEGIN_NAMESPACE
0012 
0013 #if 0
0014 #  pragma qt_class(QOperatingSystemVersionBase)
0015 #  pragma qt_class(QOperatingSystemVersion)
0016 #  pragma qt_sync_stop_processing       // we have some ifdef'ery fooling syncqt
0017 #endif
0018 
0019 class QString;
0020 
0021 class QOperatingSystemVersionBase
0022 {
0023 public:
0024     // ### Qt 7: Keep synchronized with the copy in QOperatingSystemVersion until Qt7,
0025     // then remove this comment :)
0026     enum OSType {
0027         Unknown = 0,
0028         Windows,
0029         MacOS,
0030         IOS,
0031         TvOS,
0032         WatchOS,
0033         Android,
0034         VisionOS,
0035     };
0036 
0037     constexpr QOperatingSystemVersionBase(OSType osType,
0038                                             int vmajor, int vminor = -1, int vmicro = -1)
0039     : m_os(osType),
0040         m_major(vmajor),
0041         m_minor(vminor),
0042         m_micro(vmicro)
0043     { }
0044 
0045     static Q_CORE_EXPORT QOperatingSystemVersionBase current();
0046     static Q_CORE_EXPORT QString name(QOperatingSystemVersionBase osversion);
0047     static Q_CORE_EXPORT bool isAnyOfType(std::initializer_list<OSType> types, OSType type);
0048 
0049     static constexpr OSType currentType()
0050     {
0051 #if defined(Q_OS_WIN)
0052         return Windows;
0053 #elif defined(Q_OS_MACOS)
0054         return MacOS;
0055 #elif defined(Q_OS_IOS)
0056         return IOS;
0057 #elif defined(Q_OS_TVOS)
0058         return TvOS;
0059 #elif defined(Q_OS_WATCHOS)
0060         return WatchOS;
0061 #elif defined(Q_OS_VISIONOS)
0062         return VisionOS;
0063 #elif defined(Q_OS_ANDROID)
0064         return Android;
0065 #else
0066         return Unknown;
0067 #endif
0068     }
0069 
0070     inline QVersionNumber version() const { return QVersionNumber(m_major, m_minor, m_micro); }
0071 
0072     constexpr int majorVersion() const { return m_major; }
0073     constexpr int minorVersion() const { return m_minor; }
0074     constexpr int microVersion() const { return m_micro; }
0075 
0076     constexpr int segmentCount() const
0077     { return m_micro >= 0 ? 3 : m_minor >= 0 ? 2 : m_major >= 0 ? 1 : 0; }
0078 
0079     inline bool isAnyOfType(std::initializer_list<OSType> types) const
0080     {
0081         return QOperatingSystemVersionBase::isAnyOfType(types, type());
0082     }
0083     constexpr OSType type() const { return m_os; }
0084     inline QString name() const { return name(*this); }
0085 
0086 protected:
0087     static Q_CORE_EXPORT int compare(QOperatingSystemVersionBase v1,
0088                                      QOperatingSystemVersionBase v2) noexcept;
0089 
0090     friend Qt::partial_ordering compareThreeWay(const QOperatingSystemVersionBase &lhs,
0091                                                 const QOperatingSystemVersionBase &rhs) noexcept
0092     {
0093         if (lhs.type() != rhs.type())
0094             return Qt::partial_ordering::unordered;
0095         const int res = QOperatingSystemVersionBase::compare(lhs, rhs);
0096         return Qt::compareThreeWay(res, 0);
0097     }
0098 #ifdef __cpp_lib_three_way_comparison
0099     friend std::partial_ordering
0100     operator<=>(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
0101     { return compareThreeWay(lhs, rhs); }
0102 #else
0103     friend bool
0104     operator>(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
0105     { return is_gt(compareThreeWay(lhs, rhs)); }
0106 
0107     friend bool
0108     operator>=(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
0109     { return is_gteq(compareThreeWay(lhs, rhs)); }
0110 
0111     friend bool
0112     operator<(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
0113     { return is_lt(compareThreeWay(lhs, rhs)); }
0114 
0115     friend bool
0116     operator<=(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
0117     { return is_lteq(compareThreeWay(lhs, rhs)); }
0118 #endif
0119 
0120     QOperatingSystemVersionBase() = default;
0121 private:
0122     static QOperatingSystemVersionBase current_impl();
0123 
0124     OSType m_os;
0125     int m_major;
0126     int m_minor;
0127     int m_micro;
0128 };
0129 
0130 #if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED) && !defined(Q_QDOC)
0131 class QOperatingSystemVersionUnexported : public QOperatingSystemVersionBase
0132 {
0133 public:
0134     using QOperatingSystemVersionBase::QOperatingSystemVersionBase;
0135     constexpr QOperatingSystemVersionUnexported(QOperatingSystemVersionBase other) noexcept
0136         : QOperatingSystemVersionBase(other) {}
0137 #else
0138 class QOperatingSystemVersion : public QOperatingSystemVersionBase
0139 {
0140     using QOperatingSystemVersionUnexported = QOperatingSystemVersionBase;
0141 public:
0142 #endif
0143 
0144     // ### Qt7: Regroup with the rest below
0145     static constexpr QOperatingSystemVersionBase MacOSSonoma { QOperatingSystemVersionBase::MacOS, 14 };
0146     static constexpr QOperatingSystemVersionBase MacOSSequoia { QOperatingSystemVersionBase::MacOS, 15 };
0147     static constexpr QOperatingSystemVersionBase MacOSTahoe { QOperatingSystemVersionBase::MacOS, 26 };
0148     static constexpr QOperatingSystemVersionBase Android14 { QOperatingSystemVersionBase::Android, 14, 0 };
0149     static constexpr QOperatingSystemVersionBase Windows11_23H2 { QOperatingSystemVersionBase::Windows, 10, 0, 22631 };
0150     static constexpr QOperatingSystemVersionBase Windows11_24H2 { QOperatingSystemVersionBase::Windows, 10, 0, 26100 };
0151 
0152 #if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED) && !defined(Q_QDOC)
0153 };
0154 
0155 class Q_CORE_EXPORT QOperatingSystemVersion : public QOperatingSystemVersionUnexported
0156 {
0157 #endif
0158 public:
0159     // ### Qt7: Remove. Keep synchronized with QOperatingSystemVersionBase::OSType until then!
0160 #if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
0161     enum OSType {
0162         Unknown = 0,
0163         Windows,
0164         MacOS,
0165         IOS,
0166         TvOS,
0167         WatchOS,
0168         Android,
0169         VisionOS,
0170     };
0171 #endif
0172 
0173     // ### Qt7: remove the branch with static const variables. Then group and
0174     // sort the inline ones. Until then, new entries should be added to
0175     // QOperatingSystemVersionUnexported.
0176 #if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
0177     static const QOperatingSystemVersion Windows7;
0178     static const QOperatingSystemVersion Windows8;
0179     static const QOperatingSystemVersion Windows8_1;
0180     static const QOperatingSystemVersion Windows10;
0181 
0182     static const QOperatingSystemVersion OSXMavericks;
0183     static const QOperatingSystemVersion OSXYosemite;
0184     static const QOperatingSystemVersion OSXElCapitan;
0185     static const QOperatingSystemVersion MacOSSierra;
0186     static const QOperatingSystemVersion MacOSHighSierra;
0187     static const QOperatingSystemVersion MacOSMojave;
0188     static const QOperatingSystemVersion MacOSCatalina;
0189     static const QOperatingSystemVersion MacOSBigSur;
0190     static const QOperatingSystemVersion MacOSMonterey;
0191 
0192     static const QOperatingSystemVersion AndroidJellyBean;
0193     static const QOperatingSystemVersion AndroidJellyBean_MR1;
0194     static const QOperatingSystemVersion AndroidJellyBean_MR2;
0195     static const QOperatingSystemVersion AndroidKitKat;
0196     static const QOperatingSystemVersion AndroidLollipop;
0197     static const QOperatingSystemVersion AndroidLollipop_MR1;
0198     static const QOperatingSystemVersion AndroidMarshmallow;
0199     static const QOperatingSystemVersion AndroidNougat;
0200     static const QOperatingSystemVersion AndroidNougat_MR1;
0201     static const QOperatingSystemVersion AndroidOreo;
0202     static const QOperatingSystemVersion AndroidOreo_MR1;
0203     static const QOperatingSystemVersion AndroidPie;
0204     static const QOperatingSystemVersion Android10;
0205     static const QOperatingSystemVersion Android11;
0206 #else
0207     static constexpr QOperatingSystemVersionBase Windows7 { QOperatingSystemVersionBase::Windows, 6, 1 };
0208     static constexpr QOperatingSystemVersionBase Windows8 { QOperatingSystemVersionBase::Windows, 6, 2 };
0209     static constexpr QOperatingSystemVersionBase Windows8_1 { QOperatingSystemVersionBase::Windows, 6, 3 };
0210     static constexpr QOperatingSystemVersionBase Windows10 { QOperatingSystemVersionBase::Windows, 10 };
0211 
0212     static constexpr QOperatingSystemVersionBase OSXMavericks { QOperatingSystemVersionBase::MacOS, 10, 9 };
0213     static constexpr QOperatingSystemVersionBase OSXYosemite { QOperatingSystemVersionBase::MacOS, 10, 10 };
0214     static constexpr QOperatingSystemVersionBase OSXElCapitan { QOperatingSystemVersionBase::MacOS, 10, 11 };
0215     static constexpr QOperatingSystemVersionBase MacOSSierra { QOperatingSystemVersionBase::MacOS, 10, 12 };
0216     static constexpr QOperatingSystemVersionBase MacOSHighSierra { QOperatingSystemVersionBase::MacOS, 10, 13 };
0217     static constexpr QOperatingSystemVersionBase MacOSMojave { QOperatingSystemVersionBase::MacOS, 10, 14 };
0218     static constexpr QOperatingSystemVersionBase MacOSCatalina { QOperatingSystemVersionBase::MacOS, 10, 15 };
0219     static constexpr QOperatingSystemVersionBase MacOSBigSur = { QOperatingSystemVersionBase::MacOS, 11 };
0220     static constexpr QOperatingSystemVersionBase MacOSMonterey = { QOperatingSystemVersionBase::MacOS, 12 };
0221 
0222     static constexpr QOperatingSystemVersionBase AndroidJellyBean { QOperatingSystemVersionBase::Android, 4, 1 };
0223     static constexpr QOperatingSystemVersionBase AndroidJellyBean_MR1 { QOperatingSystemVersionBase::Android, 4, 2 };
0224     static constexpr QOperatingSystemVersionBase AndroidJellyBean_MR2 { QOperatingSystemVersionBase::Android, 4, 3 };
0225     static constexpr QOperatingSystemVersionBase AndroidKitKat { QOperatingSystemVersionBase::Android, 4, 4 };
0226     static constexpr QOperatingSystemVersionBase AndroidLollipop { QOperatingSystemVersionBase::Android, 5, 0 };
0227     static constexpr QOperatingSystemVersionBase AndroidLollipop_MR1 { QOperatingSystemVersionBase::Android, 5, 1 };
0228     static constexpr QOperatingSystemVersionBase AndroidMarshmallow { QOperatingSystemVersionBase::Android, 6, 0 };
0229     static constexpr QOperatingSystemVersionBase AndroidNougat { QOperatingSystemVersionBase::Android, 7, 0 };
0230     static constexpr QOperatingSystemVersionBase AndroidNougat_MR1 { QOperatingSystemVersionBase::Android, 7, 1 };
0231     static constexpr QOperatingSystemVersionBase AndroidOreo { QOperatingSystemVersionBase::Android, 8, 0 };
0232     static constexpr QOperatingSystemVersionBase AndroidOreo_MR1 { QOperatingSystemVersionBase::Android, 8, 1 };
0233     static constexpr QOperatingSystemVersionBase AndroidPie { QOperatingSystemVersionBase::Android, 9, 0 };
0234     static constexpr QOperatingSystemVersionBase Android10 { QOperatingSystemVersionBase::Android, 10, 0 };
0235     static constexpr QOperatingSystemVersionBase Android11 { QOperatingSystemVersionBase::Android, 11, 0 };
0236 #endif
0237 
0238     static constexpr QOperatingSystemVersionBase Windows10_1809 { QOperatingSystemVersionBase::Windows, 10, 0, 17763 }; // RS5
0239     static constexpr QOperatingSystemVersionBase Windows10_1903 { QOperatingSystemVersionBase::Windows, 10, 0, 18362 }; // 19H1
0240     static constexpr QOperatingSystemVersionBase Windows10_1909 { QOperatingSystemVersionBase::Windows, 10, 0, 18363 }; // 19H2
0241     static constexpr QOperatingSystemVersionBase Windows10_2004 { QOperatingSystemVersionBase::Windows, 10, 0, 19041 }; // 20H1
0242     static constexpr QOperatingSystemVersionBase Windows10_20H2 { QOperatingSystemVersionBase::Windows, 10, 0, 19042 };
0243     static constexpr QOperatingSystemVersionBase Windows10_21H1 { QOperatingSystemVersionBase::Windows, 10, 0, 19043 };
0244     static constexpr QOperatingSystemVersionBase Windows10_21H2 { QOperatingSystemVersionBase::Windows, 10, 0, 19044 };
0245     static constexpr QOperatingSystemVersionBase Windows10_22H2 { QOperatingSystemVersionBase::Windows, 10, 0, 19045 };
0246     static constexpr QOperatingSystemVersionBase Windows11 { QOperatingSystemVersionBase::Windows, 10, 0, 22000 };
0247     static constexpr QOperatingSystemVersionBase Windows11_21H2 = Windows11;
0248     static constexpr QOperatingSystemVersionBase Windows11_22H2 { QOperatingSystemVersionBase::Windows, 10, 0, 22621 };
0249 
0250     static constexpr QOperatingSystemVersionBase Android12 { QOperatingSystemVersionBase::Android, 12, 0 };
0251     static constexpr QOperatingSystemVersionBase Android12L { QOperatingSystemVersionBase::Android, 12, 0 };
0252     static constexpr QOperatingSystemVersionBase Android13 { QOperatingSystemVersionBase::Android, 13, 0 };
0253 
0254     static constexpr QOperatingSystemVersionBase MacOSVentura { QOperatingSystemVersionBase::MacOS, 13 };
0255 
0256     constexpr QOperatingSystemVersion(const QOperatingSystemVersionBase &osversion)
0257         : QOperatingSystemVersionUnexported(osversion) {}
0258 
0259     constexpr QOperatingSystemVersion(OSType osType, int vmajor, int vminor = -1, int vmicro = -1)
0260         : QOperatingSystemVersionUnexported(QOperatingSystemVersionBase::OSType(osType), vmajor, vminor,
0261                                       vmicro)
0262     {
0263     }
0264 
0265 #if QT_CORE_REMOVED_SINCE(6, 3) || defined(Q_QDOC)
0266     static QOperatingSystemVersion current();
0267 #endif
0268 
0269     static constexpr OSType currentType()
0270     {
0271         return OSType(QOperatingSystemVersionBase::currentType());
0272     }
0273 
0274 #if QT_CORE_REMOVED_SINCE(6, 3) || defined(Q_QDOC)
0275     QVersionNumber version() const { return QOperatingSystemVersionBase::version(); }
0276 
0277     constexpr int majorVersion() const { return QOperatingSystemVersionBase::majorVersion(); }
0278     constexpr int minorVersion() const { return QOperatingSystemVersionBase::minorVersion(); }
0279     constexpr int microVersion() const { return QOperatingSystemVersionBase::microVersion(); }
0280 
0281     constexpr int segmentCount() const
0282     { return QOperatingSystemVersionBase::segmentCount(); }
0283 #endif // QT_CORE_REMOVED_SINCE(6, 3)
0284 
0285     constexpr OSType type() const { return OSType(QOperatingSystemVersionBase::type()); }
0286     QT7_ONLY(Q_CORE_EXPORT) bool isAnyOfType(std::initializer_list<OSType> types) const;
0287 #if QT_CORE_REMOVED_SINCE(6, 3) || defined(Q_QDOC)
0288     QString name() const;
0289 #endif
0290 
0291 private:
0292     QOperatingSystemVersion() = default;
0293 
0294 #if QT_CORE_REMOVED_SINCE(6, 3)
0295     // ### Qt 7: Remove. It's only here for backwards compat with previous inline calls.
0296     [[maybe_unused]] static int compare(const QOperatingSystemVersion &v1,
0297                                         const QOperatingSystemVersion &v2);
0298 #endif
0299 };
0300 Q_DECLARE_TYPEINFO(QOperatingSystemVersion, Q_PRIMITIVE_TYPE);
0301 
0302 #ifndef QT_NO_DEBUG_STREAM
0303 class QDebug;
0304 Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QOperatingSystemVersion &ov);
0305 #endif
0306 
0307 QT_END_NAMESPACE
0308 
0309 #endif // QOPERATINGSYSTEMVERSION_H