summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qmetaobject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/kernel/qmetaobject.cpp')
-rw-r--r--src/corelib/kernel/qmetaobject.cpp23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp
index f4f75e39e6..2e0dd8e5d2 100644
--- a/src/corelib/kernel/qmetaobject.cpp
+++ b/src/corelib/kernel/qmetaobject.cpp
@@ -2557,9 +2557,19 @@ int QMetaEnum::value(int index) const
*/
bool QMetaEnum::isFlag() const
{
- return mobj && mobj->d.data[handle + 1];
+ return mobj && mobj->d.data[handle + 1] & EnumIsFlag;
}
+/*!
+ \since 5.8
+
+ Returns \c true if this enumerator is declared as a C++11 enum class;
+ otherwise returns false.
+*/
+bool QMetaEnum::isScoped() const
+{
+ return mobj && mobj->d.data[handle + 1] & EnumIsScoped;
+}
/*!
Returns the scope this enumerator was declared in.
@@ -2652,15 +2662,16 @@ int QMetaEnum::keysToValue(const char *keys, bool *ok) const
return -1;
if (ok != 0)
*ok = true;
- QStringList l = QString::fromLatin1(keys).split(QLatin1Char('|'));
- if (l.isEmpty())
+ const QString keysString = QString::fromLatin1(keys);
+ const QVector<QStringRef> splitKeys = keysString.splitRef(QLatin1Char('|'));
+ if (splitKeys.isEmpty())
return 0;
- //#### TODO write proper code, do not use QStringList
+ // ### TODO write proper code: do not allocate memory, so we can go nothrow
int value = 0;
int count = mobj->d.data[handle + 2];
int data = mobj->d.data[handle + 3];
- for (int li = 0; li < l.size(); ++li) {
- QString trimmed = l.at(li).trimmed();
+ for (const QStringRef &untrimmed : splitKeys) {
+ const QStringRef trimmed = untrimmed.trimmed();
QByteArray qualified_key = trimmed.toLatin1();
const char *key = qualified_key.constData();
uint scope = 0;