8#include <QtCore/qjsonvalue.h>
9#include <QtCore/qiterator.h>
10#include <QtCore/qshareddata.h>
11#include <initializer_list>
23 QJsonArray(std::initializer_list<QJsonValue> args);
27 QJsonArray(
const QJsonArray &other)
noexcept;
28 QJsonArray &operator =(
const QJsonArray &other)
noexcept;
30 QJsonArray(QJsonArray &&other)
noexcept;
32 QJsonArray &operator =(QJsonArray &&other)
noexcept
38 static QJsonArray fromStringList(
const QStringList &list);
39 static QJsonArray fromVariantList(
const QVariantList &list);
40 QVariantList toVariantList()
const;
42 qsizetype size()
const;
43 inline qsizetype count()
const {
return size(); }
46 QJsonValue at(qsizetype i)
const;
47 QJsonValue first()
const;
48 QJsonValue last()
const;
50 void prepend(
const QJsonValue &value);
51 void append(
const QJsonValue &value);
52 void removeAt(qsizetype i);
53 QJsonValue takeAt(qsizetype i);
54 inline void removeFirst() { removeAt(0); }
55 inline void removeLast() { removeAt(size() - 1); }
57 void insert(qsizetype i,
const QJsonValue &value);
58 void replace(qsizetype i,
const QJsonValue &value);
60 bool contains(
const QJsonValue &element)
const;
61 QJsonValueRef operator[](qsizetype i);
62 QJsonValue operator[](qsizetype i)
const;
64#if QT_CORE_REMOVED_SINCE(6
, 8
)
65 bool operator==(
const QJsonArray &other)
const;
66 bool operator!=(
const QJsonArray &other)
const;
68 void swap(QJsonArray &other)
noexcept
77 typedef std::random_access_iterator_tag iterator_category;
78 typedef qsizetype difference_type;
79 typedef QJsonValue value_type;
80 typedef QJsonValueRef reference;
81 typedef QJsonValueRef *pointer;
83 inline iterator() : item(
static_cast<QJsonArray *>(
nullptr), 0) { }
84 explicit inline iterator(QJsonArray *array, qsizetype index) : item(array, index) { }
86 constexpr iterator(
const iterator &other) =
default;
87 iterator &operator=(
const iterator &other)
89 item.rebind(other.item);
93 inline QJsonValueRef operator*()
const {
return item; }
94 inline const QJsonValueConstRef *operator->()
const {
return &item; }
95 inline QJsonValueRef *operator->() {
return &item; }
96 inline QJsonValueRef operator[](qsizetype j)
const {
return *(*
this + j); }
98#if QT_CORE_REMOVED_SINCE(6
, 8
)
99 inline bool operator==(
const iterator &o)
const
100 {
return item.d == o.item.d && item.index == o.item.index; }
101 inline bool operator!=(
const iterator &o)
const {
return !operator==(o); }
102 inline bool operator<(
const iterator &other)
const
103 { Q_ASSERT(item.d == other.item.d);
return item.index < other.item.index; }
104 inline bool operator<=(
const iterator &other)
const
105 { Q_ASSERT(item.d == other.item.d);
return item.index <= other.item.index; }
106 inline bool operator>(
const iterator &other)
const {
return !operator<=(other); }
107 inline bool operator>=(
const iterator &other)
const {
return !operator<(other); }
108 inline bool operator==(
const const_iterator &o)
const
109 {
return item.d == o.item.d && item.index == o.item.index; }
110 inline bool operator!=(
const const_iterator &o)
const {
return !operator==(o); }
111 inline bool operator<(
const const_iterator &other)
const
112 { Q_ASSERT(item.d == other.item.d);
return item.index < other.item.index; }
113 inline bool operator<=(
const const_iterator &other)
const
114 { Q_ASSERT(item.d == other.item.d);
return item.index <= other.item.index; }
115 inline bool operator>(
const const_iterator &other)
const {
return !operator<=(other); }
116 inline bool operator>=(
const const_iterator &other)
const {
return !operator<(other); }
118 inline iterator &operator++() { ++item.index;
return *
this; }
119 inline iterator operator++(
int) { iterator n = *
this; ++item.index;
return n; }
120 inline iterator &operator--() { item.index--;
return *
this; }
121 inline iterator operator--(
int) { iterator n = *
this; item.index--;
return n; }
122 inline iterator &operator+=(qsizetype j) { item.index += quint64(j);
return *
this; }
123 inline iterator &operator-=(qsizetype j) { item.index -= quint64(j);
return *
this; }
124 inline iterator operator+(qsizetype j)
const { iterator r = *
this;
return r += j; }
125 inline iterator operator-(qsizetype j)
const {
return operator+(-j); }
126 inline qsizetype operator-(iterator j)
const {
return item.index - j.item.index; }
130 static bool comparesEqual_helper(
const iterator &lhs,
const iterator &rhs)
noexcept
132 return lhs.item.d == rhs.item.d && lhs.item.index == rhs.item.index;
135 static bool comparesEqual_helper(
const iterator &lhs,
const const_iterator &rhs)
noexcept
137 return lhs.item.d == rhs.item.d && lhs.item.index == rhs.item.index;
140 static Qt::strong_ordering compareThreeWay_helper(
const iterator &lhs,
143 Q_ASSERT(lhs.item.d == rhs.item.d);
144 return Qt::compareThreeWay(lhs.item.index, rhs.item.index);
147 static Qt::strong_ordering compareThreeWay_helper(
const iterator &lhs,
148 const const_iterator &rhs)
150 Q_ASSERT(lhs.item.d == rhs.item.d);
151 return Qt::compareThreeWay(lhs.item.index, rhs.item.index);
155 friend bool comparesEqual(
const iterator &lhs,
const iterator &rhs)
noexcept
157 return comparesEqual_helper(lhs, rhs);
159 friend Qt::strong_ordering compareThreeWay(
const iterator &lhs,
162 return compareThreeWay_helper(lhs, rhs);
164 Q_DECLARE_STRONGLY_ORDERED_NON_NOEXCEPT(iterator)
165 friend bool comparesEqual(
const iterator &lhs,
const const_iterator &rhs)
noexcept
167 return comparesEqual_helper(lhs, rhs);
169 friend Qt::strong_ordering compareThreeWay(
const iterator &lhs,
170 const const_iterator &rhs)
172 return compareThreeWay_helper(lhs, rhs);
174 Q_DECLARE_STRONGLY_ORDERED_NON_NOEXCEPT(iterator, const_iterator)
177 friend class QJsonArray;
179 friend class iterator;
181 class const_iterator {
183 typedef std::random_access_iterator_tag iterator_category;
184 typedef qptrdiff difference_type;
185 typedef QJsonValue value_type;
186 typedef const QJsonValueRef reference;
187 typedef const QJsonValueRef *pointer;
189 inline const_iterator() : item(
static_cast<QJsonArray *>(
nullptr), 0) { }
190 explicit inline const_iterator(
const QJsonArray *array, qsizetype index)
191 : item(
const_cast<QJsonArray *>(array), index) { }
192 inline const_iterator(
const iterator &o) : item(o.item) { }
194 constexpr const_iterator(
const const_iterator &other) =
default;
195 const_iterator &operator=(
const const_iterator &other)
197 item.rebind(other.item);
201 inline const QJsonValueConstRef operator*()
const {
return item; }
202 inline const QJsonValueConstRef *operator->()
const {
return &item; }
204 inline QJsonValueConstRef operator[](qsizetype j)
const {
return *(*
this + j); }
205#if QT_CORE_REMOVED_SINCE(6
, 8
)
206 inline bool operator==(
const const_iterator &o)
const
207 {
return item.d == o.item.d && item.index == o.item.index; }
208 inline bool operator!=(
const const_iterator &o)
const {
return !operator==(o); }
209 inline bool operator<(
const const_iterator &other)
const
210 { Q_ASSERT(item.d == other.item.d);
return item.index < other.item.index; }
211 inline bool operator<=(
const const_iterator &other)
const
212 { Q_ASSERT(item.d == other.item.d);
return item.index <= other.item.index; }
213 inline bool operator>(
const const_iterator &other)
const {
return !operator<=(other); }
214 inline bool operator>=(
const const_iterator &other)
const {
return !operator<(other); }
216 inline const_iterator &operator++() { ++item.index;
return *
this; }
217 inline const_iterator operator++(
int) { const_iterator n = *
this; ++item.index;
return n; }
218 inline const_iterator &operator--() { item.index--;
return *
this; }
219 inline const_iterator operator--(
int) { const_iterator n = *
this; item.index--;
return n; }
220 inline const_iterator &operator+=(qsizetype j) { item.index += quint64(j);
return *
this; }
221 inline const_iterator &operator-=(qsizetype j) { item.index -= quint64(j);
return *
this; }
222 inline const_iterator operator+(qsizetype j)
const { const_iterator r = *
this;
return r += j; }
223 inline const_iterator operator-(qsizetype j)
const {
return operator+(-j); }
224 inline qsizetype operator-(const_iterator j)
const {
return item.index - j.item.index; }
228 static bool comparesEqual_helper(
const const_iterator &lhs,
229 const const_iterator &rhs)
noexcept
231 return lhs.item.d == rhs.item.d && lhs.item.index == rhs.item.index;
233 static Qt::strong_ordering compareThreeWay_helper(
const const_iterator &lhs,
234 const const_iterator &rhs)
236 Q_ASSERT(lhs.item.d == rhs.item.d);
237 return Qt::compareThreeWay(lhs.item.index, rhs.item.index);
241 friend bool comparesEqual(
const const_iterator &lhs,
const const_iterator &rhs)
noexcept
243 return comparesEqual_helper(lhs, rhs);
245 friend Qt::strong_ordering compareThreeWay(
const const_iterator &lhs,
246 const const_iterator &rhs)
248 return compareThreeWay_helper(lhs, rhs);
250 Q_DECLARE_STRONGLY_ORDERED_NON_NOEXCEPT(const_iterator)
251 QJsonValueConstRef item;
252 friend class QJsonArray;
254 friend class const_iterator;
257 inline iterator begin() { detach();
return iterator(
this, 0); }
258 inline const_iterator begin()
const {
return const_iterator(
this, 0); }
259 inline const_iterator constBegin()
const {
return const_iterator(
this, 0); }
260 inline const_iterator cbegin()
const {
return const_iterator(
this, 0); }
261 inline iterator end() { detach();
return iterator(
this, size()); }
262 inline const_iterator end()
const {
return const_iterator(
this, size()); }
263 inline const_iterator constEnd()
const {
return const_iterator(
this, size()); }
264 inline const_iterator cend()
const {
return const_iterator(
this, size()); }
265 iterator insert(iterator before,
const QJsonValue &value)
266 { insert(before.item.index, value);
return before; }
267 iterator erase(iterator it)
268 { removeAt(it.item.index);
return it; }
271 typedef iterator Iterator;
272 typedef const_iterator ConstIterator;
275 inline QJsonArray operator+(
const QJsonValue &v)
const
276 { QJsonArray n = *
this; n += v;
return n; }
277 inline QJsonArray &operator+=(
const QJsonValue &v)
278 { append(v);
return *
this; }
279 inline QJsonArray &operator<< (
const QJsonValue &v)
280 { append(v);
return *
this; }
283 inline void push_back(
const QJsonValue &t) { append(t); }
284 inline void push_front(
const QJsonValue &t) { prepend(t); }
285 inline void pop_front() { removeFirst(); }
286 inline void pop_back() { removeLast(); }
287 inline bool empty()
const {
return isEmpty(); }
288 typedef qsizetype size_type;
289 typedef QJsonValue value_type;
290 typedef value_type *pointer;
291 typedef const value_type *const_pointer;
292 typedef QJsonValueRef reference;
293 typedef QJsonValue const_reference;
294 typedef qsizetype difference_type;
297 friend class QJsonValue;
298 friend class QJsonValueConstRef;
299 friend class QJsonValueRef;
300 friend class QJsonPrivate::Value;
301 friend class QJsonDocument;
302 friend class QCborArray;
303 friend Q_CORE_EXPORT QDebug operator<<(QDebug,
const QJsonArray &);
305 friend Q_CORE_EXPORT
bool comparesEqual(
const QJsonArray &lhs,
306 const QJsonArray &rhs);
308 friend Q_CORE_EXPORT
bool comparesEqual(
const QJsonArray &lhs,
309 const QJsonValue &rhs);
310 Q_DECLARE_EQUALITY_COMPARABLE_NON_NOEXCEPT(QJsonArray)
311 Q_DECLARE_EQUALITY_COMPARABLE_NON_NOEXCEPT(QJsonArray, QJsonValue)
313 QJsonArray(QCborContainerPrivate *array);
314 bool detach(qsizetype reserve = 0);
316 QExplicitlySharedDataPointer<QCborContainerPrivate> a;
321#if QT_VERSION >= QT_VERSION_CHECK(7
, 0
, 0
) || defined(QT_BOOTSTRAPPED)
322inline QJsonValueConstRef::QJsonValueConstRef(QJsonArray *a, qsizetype idx)
323 : d(a ? a->a.data() :
nullptr), is_object(
false), index(idx)
327Q_CORE_EXPORT size_t qHash(
const QJsonArray &array, size_t seed = 0);
329#if !defined(QT_NO_DEBUG_STREAM)
330Q_CORE_EXPORT
QDebug operator<<(QDebug,
const QJsonArray &);
333#ifndef QT_NO_DATASTREAM
334Q_CORE_EXPORT
QDataStream &operator<<(QDataStream &,
const QJsonArray &);
335Q_CORE_EXPORT
QDataStream &operator>>(QDataStream &, QJsonArray &);
bool testFunctionAttribute(Token tok, FunctionDef *def)
void parseEnumOrFlag(BaseDef *def, QtMocConstants::EnumFlags flags)
bool hasGlobalModuleFragment
void checkSuperClasses(ClassDef *def)
bool inPrivateModuleFragment
bool parseEnum(EnumDef *def, ClassDef *containingClass)
void parseProperty(ClassDef *def, PropertyMode mode)
QByteArray lexemUntil(Token)
EncounteredQmlMacro parseClassInfo(BaseDef *def)
QList< QByteArray > includeFiles
QList< QByteArray > moduleFragmentIncludes
bool requireCompleteTypes
QHash< QByteArray, QByteArray > knownQObjectClasses
void createPropertyDef(PropertyDef &def, int propertyIndex, PropertyMode mode)
void parseClassInfo(ClassDef *def)
QByteArrayView strippedFileName() const
bool parseClassHead(ClassDef *def)
void parsePrivateProperty(ClassDef *def, PropertyMode mode)
void parseFlag(BaseDef *def)
void parsePrivateModuleFragment(qsizetype rewind)
void parseSignals(ClassDef *def)
void parseDeclareMetatype()
void parsePropertyAttributes(PropertyDef &propDef)
void parseInterfaces(ClassDef *def)
bool testFunctionRevision(FunctionDef *def)
bool testFunctionAttribute(FunctionDef *def)
void prependNamespaces(BaseDef &def, const QList< NamespaceDef > &namespaceList) const
QHash< QByteArray, QByteArray > knownGadgets
QList< QByteArray > metaTypes
bool parseFunction(FunctionDef *def, bool inMacro=false)
QByteArray parsePropertyAccessor()
QMap< QString, QJsonArray > metaArgs
bool testForFunctionModifiers(FunctionDef *def)
const QByteArray & toFullyQualified(const QByteArray &name) const noexcept
void parseSlots(ClassDef *def, FunctionDef::Access access)
void parseDeclareInterface()
void checkListSizes(const ClassDef &def)
QTypeRevision parseRevision()
QList< QString > parsedPluginMetadataFiles
qsizetype firstSourceSymbolIndex
ModuleUnitKind moduleUnitKind
bool parseMaybeFunction(const ClassDef *cdef, FunctionDef *def)
void checkProperties(ClassDef *cdef)
void parseModuleDeclaration(qsizetype rewind, bool exported)
void parseFunctionArguments(FunctionDef *def)
void parseSlotInPrivate(ClassDef *def, FunctionDef::Access access)
bool inClass(const ClassDef *def) const
void parsePluginData(ClassDef *def)
QByteArray modulePartitionName
void generate(FILE *out, FILE *jsonOutput)
QMap< QByteArray, QByteArray > interface2IdMap
bool inNamespace(const NamespaceDef *def) const
QList< ClassDef > classList
QByteArray resolveIncludeNext(const QByteArray &filename, qsizetype startIndex, qsizetype *foundIndex=nullptr)
void setDebugIncludes(bool value)
void parseDefineArguments(Macro *m)
Symbols preprocessed(const QByteArray &filename, QFile *device)
void substituteUntilNewline(Symbols &substituted)
QList< QByteArray > frameworks
QHash< QByteArray, IncludeResolution > nonlocalIncludePathResolutionCache
static bool preprocessOnly
QByteArray resolveInclude(const QByteArray &filename, const QByteArray &relativeTo, qsizetype *foundIndex=nullptr)
static Symbols macroExpandIdentifier(Preprocessor *that, SymbolStack &symbols, int lineNum, QByteArray *macroName)
static Symbols tokenize(const QByteArray &input, int lineNum=1, TokenizeMode mode=TokenizeCpp)
static void macroExpand(Symbols *into, Preprocessor *that, const Symbols &toExpand, qsizetype &index, int lineNum, bool one, const QSet< QByteArray > &excludeSymbols=QSet< QByteArray >())
@ PreparePreprocessorStatement
@ TokenizePreprocessorStatement
The QCommandLineOption class defines a possible command-line option. \inmodule QtCore.
The QCommandLineParser class provides a means for handling the command line options.
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
std::map< Key, T > toStdMap() const &
friend size_t qHash(const M &key, size_t seed=0) noexcept(QHashPrivate::noexceptPairHash< typename M::key_type, typename M::mapped_type >())
QMap(std::map< Key, T > &&other)
std::map< Key, T > toStdMap() &&
QMap(const std::map< Key, T > &other)
friend bool comparesEqual(const QMap &lhs, const QMap &rhs)
QMap(std::initializer_list< std::pair< Key, T > > list)
void swap(QMap< Key, T > &other) noexcept
\macro QT_RESTRICTED_CAST_FROM_ASCII
QByteArray unquotedLexem()
const Symbol & symbol() const
bool dontReplaceSymbol(const QByteArray &name) const
const SafeSymbols & constTop() const
Q_DECLARE_TYPEINFO(EnumDef, Q_RELOCATABLE_TYPE)
QByteArray noRef(const QByteArray &type)
Q_DECLARE_TYPEINFO(PropertyDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(NamespaceDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(ClassDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(ClassInfoDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(ClassDef::Interface, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(SuperClass, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(ArgumentDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(PrivateQPropertyDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(FunctionDef, Q_RELOCATABLE_TYPE)
std::conditional_t< std::is_same_v< HashKey, q20::remove_cvref_t< KeyArgument > >, KeyArgument, HashKey > HeterogenousConstructProxy
Combined button and popup list for selecting options.
QString && asString(QString &&s)
constexpr QAnyStringArg qStringLikeToArg(QAnyStringView s) noexcept
const QString & asString(const QString &s)
std::is_same< Char, char32_t > IsCompatibleChar32TypeHelper
constexpr bool isLatin1(QLatin1StringView s) noexcept
QHash< MacroName, Macro > Macros
Q_DECLARE_TYPEINFO(QDateTime::Data, Q_RELOCATABLE_TYPE)
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
qsizetype erase_if(QMultiHash< Key, T > &hash, Predicate pred)
#define QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_CREF(Class)
#define QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH(Class, Arguments)
#define QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_VALUE(Class)
#define QT_MK_QHASH_COMPAT(X)
QList< QVariant > QVariantList
QMultiMap< Key, T > operator+=(QMultiMap< Key, T > &lhs, const QMultiMap< Key, T > &rhs)
QSet(InputIterator, InputIterator) -> QSet< ValueType >
size_t qHash(const QSet< T > &key, size_t seed=0) noexcept(noexcept(qHashRangeCommutative(key.begin(), key.end(), seed)))
qsizetype erase_if(QSet< T > &set, Predicate pred)
QString operator+(const QString &s1, QChar s2)
QString operator+(QString &&lhs, const QString &rhs)
qsizetype erase_if(QString &s, Predicate pred)
#define QT_UNICODE_LITERAL(str)
#define qPrintable(string)
QString operator+(QString &&lhs, QChar rhs)
QString operator+(QChar s1, const QString &s2)
#define QStringLiteral(str)
QString operator+(const QString &s1, const QString &s2)
qsizetype erase(QString &s, const T &t)
static QByteArray combinePath(const QString &infile, const QString &outfile)
static bool hasNext(const Symbols &symbols, int i)
static const Symbol & next(const Symbols &symbols, int &i)
int runMoc(int argc, char **argv)
static auto openFileForWriting(const QString &name)
void error(const char *msg="Invalid argument")
static QStringList argumentsFromCommandLineAndFile(const QStringList &arguments, bool &hasOptionFiles)
QByteArray composePreprocessorOutput(const Symbols &symbols)
int main(int argc, char *argv[])
[ctor_close]
QByteArray normalizedType
QJsonObject toJson() const
QMap< QByteArray, QByteArray > flagAliases
QList< ClassInfoDef > classInfoList
QList< EnumDef > enumList
Interface(const QByteArray &_className)
QMap< QString, QJsonArray > metaArgs
QList< QList< Interface > > interfaceList
QList< FunctionDef > publicList
QList< FunctionDef > methodList
QList< PropertyDef > propertyList
QList< FunctionDef > constructorList
QList< SuperClass > superclassList
bool requireCompleteMethodTypes
QList< FunctionDef > slotList
QList< FunctionDef > signalList
QJsonObject toJson() const
QList< QByteArray > nonClassSignalList
QFlags< QtMocConstants::EnumFlags > flags
QByteArray qualifiedType(const ClassDef *cdef) const
QJsonObject toJson(const ClassDef &cdef) const
QList< QByteArray > values
QByteArray normalizedType
QJsonObject toJson(int index) const
static void accessToJson(QJsonObject *obj, Access acs)
QByteArray inPrivateClass
QList< ArgumentDef > arguments
bool returnTypeIsVolatile
Simple structure used by the Doc and DocParser classes.
QByteArray inPrivateClass
QJsonObject toJson() const
constexpr QAnyStringArg(QAnyStringView v) noexcept
constexpr QLatin1StringArg(QLatin1StringView v) noexcept
QLatin1StringArg()=default
constexpr QStringViewArg(QStringView v) noexcept
bool operator==(const SubArray &other) const
SubArray(const QByteArray &a)
SubArray(const QByteArray &a, qsizetype from, qsizetype len)
FunctionDef::Access access
QByteArrayView unquotedLexemView() const
Symbol(int lineNum, Token token)
operator SubArray() const
QByteArrayView lexemView() const
void mergeStringLiteral(const Symbol &next)
bool operator==(const Symbol &o) const
Symbol(int lineNum, Token token, const QByteArray &lexem, qsizetype from, qsizetype len)
QByteArray unquotedLexem() const
Symbol(int lineNum, Token token, const QByteArray &lexem)
size_t qHash(const SubArray &key, size_t seed=0)
Q_DECLARE_TYPEINFO(Symbol, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(SafeSymbols, Q_RELOCATABLE_TYPE)
#define FOR_ALL_TOKENS(F)