Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qplugin_p.h
Go to the documentation of this file.
1// Copyright (C) 2018 Intel Corporation.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QPLUGIN_P_H
5#define QPLUGIN_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists for the convenience
12// of the QLibrary class. This header file may change from
13// version to version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <private/qglobal_p.h>
19
21
25 IID,
28 URI,
29 IsDebug,
30};
31
32// F(IntKey, StringKey, Description)
33// Keep this list sorted in the order moc should output.
34#define QT_PLUGIN_FOREACH_METADATA(F) \
35 F(QtPluginMetaDataKeys::IID, "IID", "Plugin's Interface ID") \
36 F(QtPluginMetaDataKeys::ClassName, "className", "Plugin class name") \
37 F(QtPluginMetaDataKeys::MetaData, "MetaData", "Other meta data") \
38 F(QtPluginMetaDataKeys::URI, "URI", "Plugin URI") \
39 /* not output by moc in CBOR */ \
40 F(QtPluginMetaDataKeys::QtVersion, "version", "Qt version") \
41 F(QtPluginMetaDataKeys::Requirements, "archlevel", "Architectural level") \
42 F(QtPluginMetaDataKeys::IsDebug, "debug", "Debug-mode plugin") \
43
44
45namespace {
46struct DecodedArchRequirements
47{
49 bool isDebug;
50 friend constexpr bool operator==(DecodedArchRequirements r1, DecodedArchRequirements r2)
51 {
52 return r1.level == r2.level && r1.isDebug == r2.isDebug;
53 }
54};
55
56static constexpr DecodedArchRequirements decodeVersion0ArchRequirements(quint8 value)
57{
58 // see qPluginArchRequirements() and QPluginMetaDataV2::archRequirements()
59 DecodedArchRequirements r = {};
60#ifdef Q_PROCESSOR_X86
61 if (value & 4)
62 r.level = 4; // AVX512F -> x86-64-v4
63 else if (value & 2)
64 r.level = 3; // AVX2 -> x86-64-v3
65#endif
66 if (value & 1)
67 r.isDebug = true;
68 return r;
69}
70// self checks
71static_assert(decodeVersion0ArchRequirements(0) == DecodedArchRequirements{ 0, false });
72static_assert(decodeVersion0ArchRequirements(1) == DecodedArchRequirements{ 0, true });
73#ifdef Q_PROCESSOR_X86
74static_assert(decodeVersion0ArchRequirements(2) == DecodedArchRequirements{ 3, false });
75static_assert(decodeVersion0ArchRequirements(3) == DecodedArchRequirements{ 3, true });
76static_assert(decodeVersion0ArchRequirements(4) == DecodedArchRequirements{ 4, false });
77static_assert(decodeVersion0ArchRequirements(5) == DecodedArchRequirements{ 4, true });
78#endif
79
80static constexpr DecodedArchRequirements decodeVersion1ArchRequirements(quint8 value)
81{
82 return { quint8(value & 0x7f), bool(value & 0x80) };
83}
84// self checks
85static_assert(decodeVersion1ArchRequirements(0) == DecodedArchRequirements{ 0, false });
86static_assert(decodeVersion1ArchRequirements(0x80) == DecodedArchRequirements{ 0, true });
87#ifdef Q_PROCESSOR_X86
88static_assert(decodeVersion1ArchRequirements(1) == DecodedArchRequirements{ 1, false });
89static_assert(decodeVersion1ArchRequirements(3) == DecodedArchRequirements{ 3, false});
90static_assert(decodeVersion1ArchRequirements(4) == DecodedArchRequirements{ 4, false });
91static_assert(decodeVersion1ArchRequirements(0x82) == DecodedArchRequirements{ 2, true });
92static_assert(decodeVersion1ArchRequirements(0x84) == DecodedArchRequirements{ 4, true });
93#endif
94} // unnamed namespace
95
97
98#endif // QPLUGIN_P_H
Combined button and popup list for selecting options.
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLenum GLuint GLint level
GLboolean r
[2]
QtPluginMetaDataKeys
Definition qplugin_p.h:22
bool operator==(const QRandomGenerator &rng1, const QRandomGenerator &rng2)
Definition qrandom.cpp:1220
unsigned char quint8
Definition qtypes.h:46
QRect r1(100, 200, 11, 16)
[0]
QRect r2(QPoint(100, 200), QSize(11, 16))