QMetaObject: change typeNameFromTypeInfo() to return a QBAV

typeNameFromTypeInfo() returned a QByteArray, the first if branch used
stringData() which uses QByteArray::fromRawData() so not too bad, but
the second if branch allocated a new QByteArray. Making it return a QBAV
is less confusing and avoids a potential QByteArray allocation.

Also remove rawTypeNameFromTypeInfo(), and use typeNameFromTypeInfo()
instead.

Change-Id: I0c51a093aa47d2691a8f1ac45421ede7bce0a871
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bb10
Ahmad Samir 2023-07-29 00:24:58 +03:00
parent 4ecbe42ff4
commit 336f6340fd
1 changed files with 14 additions and 22 deletions

View File

@ -145,22 +145,12 @@ static inline QByteArray stringData(const QMetaObject *mo, int index)
return QByteArray::fromRawData(view.data(), view.size());
}
static inline const char *rawTypeNameFromTypeInfo(const QMetaObject *mo, uint typeInfo)
static inline QByteArrayView typeNameFromTypeInfo(const QMetaObject *mo, uint typeInfo)
{
if (typeInfo & IsUnresolvedType) {
return rawStringData(mo, typeInfo & TypeNameIndexMask);
} else {
return QMetaType(typeInfo).name();
}
}
static inline QByteArray typeNameFromTypeInfo(const QMetaObject *mo, uint typeInfo)
{
if (typeInfo & IsUnresolvedType) {
return stringData(mo, typeInfo & TypeNameIndexMask);
} else {
return QMetaType(typeInfo).name();
}
if (typeInfo & IsUnresolvedType)
return stringDataView(mo, typeInfo & TypeNameIndexMask);
else
return QByteArrayView(QMetaType(typeInfo).name());
}
static inline int typeFromTypeInfo(const QMetaObject *mo, uint typeInfo)
@ -1018,8 +1008,8 @@ bool QMetaObjectPrivate::checkConnectArgs(const QMetaMethodPrivate *signal,
uint targetTypeInfo = method->parameterTypeInfo(i);
if ((sourceTypeInfo & IsUnresolvedType)
|| (targetTypeInfo & IsUnresolvedType)) {
QByteArray sourceName = typeNameFromTypeInfo(smeta, sourceTypeInfo);
QByteArray targetName = typeNameFromTypeInfo(rmeta, targetTypeInfo);
QByteArrayView sourceName = typeNameFromTypeInfo(smeta, sourceTypeInfo);
QByteArrayView targetName = typeNameFromTypeInfo(rmeta, targetTypeInfo);
if (sourceName != targetName)
return false;
} else {
@ -2022,7 +2012,7 @@ void QMetaMethodPrivate::getParameterTypes(int *types) const
QByteArray QMetaMethodPrivate::parameterTypeName(int index) const
{
int paramsIndex = parametersDataIndex();
return typeNameFromTypeInfo(mobj, mobj->d.data[paramsIndex + index]);
return typeNameFromTypeInfo(mobj, mobj->d.data[paramsIndex + index]).toByteArray();
}
QList<QByteArray> QMetaMethodPrivate::parameterTypes() const
@ -2032,8 +2022,10 @@ QList<QByteArray> QMetaMethodPrivate::parameterTypes() const
QList<QByteArray> list;
list.reserve(argc);
int paramsIndex = parametersDataIndex();
for (int i = 0; i < argc; ++i)
list += typeNameFromTypeInfo(mobj, mobj->d.data[paramsIndex + i]);
for (int i = 0; i < argc; ++i) {
QByteArrayView name = typeNameFromTypeInfo(mobj, mobj->d.data[paramsIndex + i]);
list.emplace_back(name.toByteArray());
}
return list;
}
@ -3445,7 +3437,7 @@ const char *QMetaProperty::typeName() const
// TODO: can the metatype be invalid for dynamic metaobjects?
if (const auto mt = metaType(); mt.isValid())
return mt.name();
return rawTypeNameFromTypeInfo(mobj, data.type());
return typeNameFromTypeInfo(mobj, data.type()).constData();
}
/*! \fn QVariant::Type QMetaProperty::type() const
@ -3601,7 +3593,7 @@ QMetaProperty::QMetaProperty(const QMetaObject *mobj, int index)
if (!(data.flags() & EnumOrFlag))
return;
const char *type = rawTypeNameFromTypeInfo(mobj, data.type());
const char *type = typeNameFromTypeInfo(mobj, data.type()).constData();
menum = mobj->enumerator(mobj->indexOfEnumerator(type));
if (menum.isValid())
return;