From bd1a4717be131c7850848e4995bc75b600f6cabe Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Tue, 24 Jan 2023 09:36:19 +0200 Subject: Optimize QString::split usage To increase efficiency QString::split is performed only to strings which are not empty. Task-number: QTIFW-2805 Change-Id: Ieed887a3e6f415395497dcdf05c118b32c72d9ee Reviewed-by: Arttu Tarkiainen --- src/libs/installer/component.cpp | 16 ++++++++-------- src/libs/installer/globals.cpp | 8 +++++++- src/libs/installer/globals.h | 7 ++++++- src/libs/installer/packagemanagercore.cpp | 4 +--- 4 files changed, 22 insertions(+), 13 deletions(-) (limited to 'src/libs') diff --git a/src/libs/installer/component.cpp b/src/libs/installer/component.cpp index 32f3fefc6..f5958cc65 100644 --- a/src/libs/installer/component.cpp +++ b/src/libs/installer/component.cpp @@ -367,13 +367,13 @@ void Component::loadDataFromPackage(const Package &package) return; setLocalTempPath(QInstaller::pathFromUrl(package.packageSource().url)); - const QStringList uis = package.data(QLatin1String("UserInterfaces")).toString() - .split(QInstaller::commaRegExp(), Qt::SkipEmptyParts); - if (!uis.isEmpty()) - loadUserInterfaces(QDir(QString::fromLatin1("%1/%2").arg(localTempPath(), name())), uis); + + const QStringList uiList = QInstaller::splitStringWithComma(package.data(QLatin1String("UserInterfaces")).toString()); + if (!uiList.isEmpty()) + loadUserInterfaces(QDir(QString::fromLatin1("%1/%2").arg(localTempPath(), name())), uiList); + #ifndef IFW_DISABLE_TRANSLATIONS - const QStringList qms = package.data(QLatin1String("Translations")).toString() - .split(QInstaller::commaRegExp(), Qt::SkipEmptyParts); + const QStringList qms = QInstaller::splitStringWithComma(package.data(QLatin1String("Translations")).toString()); if (!qms.isEmpty()) loadTranslations(QDir(QString::fromLatin1("%1/%2").arg(localTempPath(), name())), qms); #endif @@ -1417,7 +1417,7 @@ void Component::addDependency(const QString &newDependency) */ QStringList Component::dependencies() const { - return d->m_vars.value(scDependencies).split(QInstaller::commaRegExp(), Qt::SkipEmptyParts); + return QInstaller::splitStringWithComma(d->m_vars.value(scDependencies)); } /*! @@ -1425,7 +1425,7 @@ QStringList Component::dependencies() const */ QStringList Component::localDependencies() const { - return d->m_vars.value(scLocalDependencies).split(QInstaller::commaRegExp(), Qt::SkipEmptyParts); + return QInstaller::splitStringWithComma(d->m_vars.value(scLocalDependencies)); } /*! diff --git a/src/libs/installer/globals.cpp b/src/libs/installer/globals.cpp index bea299696..5240138c4 100644 --- a/src/libs/installer/globals.cpp +++ b/src/libs/installer/globals.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2023 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -60,6 +60,12 @@ namespace QInstaller \internal */ +/*! + \fn inline QInstaller::splitStringWithComma(const QString &value()) + Splits \a value into substrings wherever comma occurs, and returns the list of those strings. + \internal +*/ + Q_LOGGING_CATEGORY(lcServer, IFW_SERVER) Q_LOGGING_CATEGORY(lcInstallerInstallLog, IFW_INSTALLER_INSTALLLOG) Q_LOGGING_CATEGORY(lcProgressIndicator, IFW_PROGRESS_INDICATOR) diff --git a/src/libs/installer/globals.h b/src/libs/installer/globals.h index 3450c0dad..3b3f4e3ab 100644 --- a/src/libs/installer/globals.h +++ b/src/libs/installer/globals.h @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2022 The Qt Company Ltd. +** Copyright (C) 2023 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -44,6 +44,11 @@ INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcDeveloperBuild) QStringList INSTALLER_EXPORT loggingCategories(); QRegularExpression INSTALLER_EXPORT commaRegExp(); +inline QStringList splitStringWithComma(const QString &value) { + if (!value.isEmpty()) + return value.split(QInstaller::commaRegExp(), Qt::SkipEmptyParts); + return QStringList(); +} QString htmlToString(const QString &html); QString enumToString(const QMetaObject& metaObject, const char *enumerator, int key); diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index 2f69c20c8..d5758438d 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -4021,9 +4021,7 @@ bool PackageManagerCore::updateComponentData(struct Data &data, Component *compo if (component->isFromOnlineRepository()) component->addDownloadableArchives(data.package->data(scDownloadableArchives).toString()); - const QStringList componentsToReplace = data.package->data(scReplaces).toString() - .split(QInstaller::commaRegExp(), Qt::SkipEmptyParts); - + const QStringList componentsToReplace = QInstaller::splitStringWithComma(data.package->data(scReplaces).toString()); if (!componentsToReplace.isEmpty()) { // Store the component (this is a component that replaces others) and all components that // this one will replace. -- cgit v1.2.3