summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qmetaobject.cpp
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2025-04-04 22:41:25 +0200
committerMarc Mutz <marc.mutz@qt.io>2025-04-10 18:47:36 +0200
commitf2747c62d4732694e0d03638ba0ed7af7ebeaa7a (patch)
tree576d6d134222d38aa5f4a4e95d0596ff0fd81074 /src/corelib/kernel/qmetaobject.cpp
parent21c9aac20abd700cf9f4bcacbbbe7751eb0aa364 (diff)
QMetaObjectPrivate: make decodeMethodSignature() return QByteArrayView
... instead of QByteArray. This is part of a quest to improve string-based connect() performance. Needed to port a few consumers of decodeMethodSignature()'s result from QByteArray to QByteArrayView, too. All private API, so doesn't affect users. This doesn't change anything in tst_bench_qobject's connect_disconnect_benchmark:normalized signature, yet. Task-nunber: QTBUG-135572 Pick-to: 6.9 Change-Id: I1cd5b410ee090ab9c6f3aa8095a4d9efae516ac0 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/corelib/kernel/qmetaobject.cpp')
-rw-r--r--src/corelib/kernel/qmetaobject.cpp32
1 files changed, 16 insertions, 16 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp
index c74ab729d2e..17bacd219f0 100644
--- a/src/corelib/kernel/qmetaobject.cpp
+++ b/src/corelib/kernel/qmetaobject.cpp
@@ -644,7 +644,7 @@ int QMetaObject::classInfoCount() const
// matches the given name, argument count and argument types, otherwise
// returns \c false.
bool QMetaObjectPrivate::methodMatch(const QMetaObject *m, const QMetaMethod &method,
- const QByteArray &name, int argc,
+ QByteArrayView name, int argc,
const QArgumentType *types)
{
const QMetaMethod::Data &data = method.data;
@@ -702,7 +702,7 @@ QMetaMethod QMetaObjectPrivate::firstMethod(const QMetaObject *baseObject, QByte
*/
template<int MethodType>
inline int QMetaObjectPrivate::indexOfMethodRelative(const QMetaObject **baseObject,
- const QByteArray &name, int argc,
+ QByteArrayView name, int argc,
const QArgumentType *types)
{
for (const QMetaObject *m = *baseObject; m; m = m->d.superdata) {
@@ -738,7 +738,7 @@ int QMetaObject::indexOfConstructor(const char *constructor) const
{
Q_ASSERT(priv(d.data)->revision >= 7);
QArgumentTypeArray types;
- QByteArray name = QMetaObjectPrivate::decodeMethodSignature(constructor, types);
+ QByteArrayView name = QMetaObjectPrivate::decodeMethodSignature(constructor, types);
return QMetaObjectPrivate::indexOfConstructor(this, name, types.size(), types.constData());
}
@@ -756,7 +756,7 @@ int QMetaObject::indexOfMethod(const char *method) const
int i;
Q_ASSERT(priv(m->d.data)->revision >= 7);
QArgumentTypeArray types;
- QByteArray name = QMetaObjectPrivate::decodeMethodSignature(method, types);
+ QByteArrayView name = QMetaObjectPrivate::decodeMethodSignature(method, types);
i = QMetaObjectPrivate::indexOfMethodRelative<0>(&m, name, types.size(), types.constData());
if (i >= 0)
i += m->methodOffset();
@@ -789,19 +789,19 @@ static void argumentTypesFromString(const char *str, const char *end,
// Given a method \a signature (e.g. "foo(int,double)"), this function
// populates the argument \a types array and returns the method name.
-QByteArray QMetaObjectPrivate::decodeMethodSignature(
+QByteArrayView QMetaObjectPrivate::decodeMethodSignature(
const char *signature, QArgumentTypeArray &types)
{
Q_ASSERT(signature != nullptr);
const char *lparens = strchr(signature, '(');
if (!lparens)
- return QByteArray();
+ return QByteArrayView();
const char *rparens = strrchr(lparens + 1, ')');
if (!rparens || *(rparens+1))
- return QByteArray();
+ return QByteArrayView();
int nameLength = lparens - signature;
argumentTypesFromString(lparens + 1, rparens, types);
- return QByteArray::fromRawData(signature, nameLength);
+ return QByteArrayView(signature, nameLength);
}
/*!
@@ -821,7 +821,7 @@ int QMetaObject::indexOfSignal(const char *signal) const
int i;
Q_ASSERT(priv(m->d.data)->revision >= 7);
QArgumentTypeArray types;
- QByteArray name = QMetaObjectPrivate::decodeMethodSignature(signal, types);
+ QByteArrayView name = QMetaObjectPrivate::decodeMethodSignature(signal, types);
i = QMetaObjectPrivate::indexOfSignalRelative(&m, name, types.size(), types.constData());
if (i >= 0)
i += m->methodOffset();
@@ -835,7 +835,7 @@ int QMetaObject::indexOfSignal(const char *signal) const
\a baseObject will be adjusted to the enclosing QMetaObject, or \nullptr if the signal is not found
*/
int QMetaObjectPrivate::indexOfSignalRelative(const QMetaObject **baseObject,
- const QByteArray &name, int argc,
+ QByteArrayView name, int argc,
const QArgumentType *types)
{
int i = indexOfMethodRelative<MethodSignal>(baseObject, name, argc, types);
@@ -868,7 +868,7 @@ int QMetaObject::indexOfSlot(const char *slot) const
int i;
Q_ASSERT(priv(m->d.data)->revision >= 7);
QArgumentTypeArray types;
- QByteArray name = QMetaObjectPrivate::decodeMethodSignature(slot, types);
+ QByteArrayView name = QMetaObjectPrivate::decodeMethodSignature(slot, types);
i = QMetaObjectPrivate::indexOfSlotRelative(&m, name, types.size(), types.constData());
if (i >= 0)
i += m->methodOffset();
@@ -877,13 +877,13 @@ int QMetaObject::indexOfSlot(const char *slot) const
// same as indexOfSignalRelative but for slots.
int QMetaObjectPrivate::indexOfSlotRelative(const QMetaObject **m,
- const QByteArray &name, int argc,
+ QByteArrayView name, int argc,
const QArgumentType *types)
{
return indexOfMethodRelative<MethodSlot>(m, name, argc, types);
}
-int QMetaObjectPrivate::indexOfSignal(const QMetaObject *m, const QByteArray &name,
+int QMetaObjectPrivate::indexOfSignal(const QMetaObject *m, QByteArrayView name,
int argc, const QArgumentType *types)
{
int i = indexOfSignalRelative(&m, name, argc, types);
@@ -892,7 +892,7 @@ int QMetaObjectPrivate::indexOfSignal(const QMetaObject *m, const QByteArray &na
return i;
}
-int QMetaObjectPrivate::indexOfSlot(const QMetaObject *m, const QByteArray &name,
+int QMetaObjectPrivate::indexOfSlot(const QMetaObject *m, QByteArrayView name,
int argc, const QArgumentType *types)
{
int i = indexOfSlotRelative(&m, name, argc, types);
@@ -901,7 +901,7 @@ int QMetaObjectPrivate::indexOfSlot(const QMetaObject *m, const QByteArray &name
return i;
}
-int QMetaObjectPrivate::indexOfMethod(const QMetaObject *m, const QByteArray &name,
+int QMetaObjectPrivate::indexOfMethod(const QMetaObject *m, QByteArrayView name,
int argc, const QArgumentType *types)
{
int i = indexOfMethodRelative<0>(&m, name, argc, types);
@@ -910,7 +910,7 @@ int QMetaObjectPrivate::indexOfMethod(const QMetaObject *m, const QByteArray &na
return i;
}
-int QMetaObjectPrivate::indexOfConstructor(const QMetaObject *m, const QByteArray &name,
+int QMetaObjectPrivate::indexOfConstructor(const QMetaObject *m, QByteArrayView name,
int argc, const QArgumentType *types)
{
for (int i = priv(m->d.data)->constructorCount-1; i >= 0; --i) {