diff options
author | Anton Kudryavtsev <a.kudryavtsev@netris.ru> | 2016-03-31 15:03:12 +0300 |
---|---|---|
committer | Anton Kudryavtsev <a.kudryavtsev@netris.ru> | 2016-04-28 16:47:54 +0000 |
commit | c8e4d15004bade8b99aaf74b6f899911b5d66962 (patch) | |
tree | 60b1e412cebe52042e1e2c00302f7f61ee3cb699 /src/dbus/qdbusutil.cpp | |
parent | 6ebe7e8f37731a07ca7b1d5b8b93ccf73fb0273b (diff) |
DBus: use QStringRef to optimize memory allocation
Replace substring functions that return QString with
corresponding functions that return QStringRef where
it's possible.
Create QString from QStringRef only where necessary.
Add overloaded functions with QStringRef arg
in QDBusUtil:
- isValidUniqueConnectionName()
- isValidMemberName()
- isValidPartOfObjectPath()
Change-Id: I4a24a298702728ba7d3a65c39e25c3a9c759e07f
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Diffstat (limited to 'src/dbus/qdbusutil.cpp')
-rw-r--r-- | src/dbus/qdbusutil.cpp | 58 |
1 files changed, 37 insertions, 21 deletions
diff --git a/src/dbus/qdbusutil.cpp b/src/dbus/qdbusutil.cpp index aababd12e9..28341a71a8 100644 --- a/src/dbus/qdbusutil.cpp +++ b/src/dbus/qdbusutil.cpp @@ -42,6 +42,7 @@ #include "qdbus_symbols_p.h" #include <QtCore/qstringlist.h> +#include <QtCore/qvector.h> #include "qdbusargument.h" #include "qdbusunixfiledescriptor.h" @@ -330,10 +331,10 @@ namespace QDBusUtil /*! \internal - \fn bool QDBusUtil::isValidPartOfObjectPath(const QString &part) + \fn bool QDBusUtil::isValidPartOfObjectPath(const QStringRef &part) See QDBusUtil::isValidObjectPath */ - bool isValidPartOfObjectPath(const QString &part) + bool isValidPartOfObjectPath(const QStringRef &part) { if (part.isEmpty()) return false; // can't be valid if it's empty @@ -347,6 +348,13 @@ namespace QDBusUtil } /*! + \internal + \fn bool QDBusUtil::isValidPartOfObjectPath(const QString &part) + + \overload + */ + + /*! \fn bool QDBusUtil::isValidInterfaceName(const QString &ifaceName) Returns \c true if this is \a ifaceName is a valid interface name. @@ -364,36 +372,35 @@ namespace QDBusUtil if (ifaceName.isEmpty() || ifaceName.length() > DBUS_MAXIMUM_NAME_LENGTH) return false; - QStringList parts = ifaceName.split(QLatin1Char('.')); + const auto parts = ifaceName.splitRef(QLatin1Char('.')); if (parts.count() < 2) return false; // at least two parts - for (int i = 0; i < parts.count(); ++i) - if (!isValidMemberName(parts.at(i))) + for (const QStringRef &part : parts) + if (!isValidMemberName(part)) return false; return true; } /*! - \fn bool QDBusUtil::isValidUniqueConnectionName(const QString &connName) + \fn bool QDBusUtil::isValidUniqueConnectionName(const QStringRef &connName) Returns \c true if \a connName is a valid unique connection name. Unique connection names start with a colon (":") and are followed by a list of dot-separated components composed of ASCII letters, digits, the hyphen or the underscore ("_") character. */ - bool isValidUniqueConnectionName(const QString &connName) + bool isValidUniqueConnectionName(const QStringRef &connName) { if (connName.isEmpty() || connName.length() > DBUS_MAXIMUM_NAME_LENGTH || !connName.startsWith(QLatin1Char(':'))) return false; - QStringList parts = connName.mid(1).split(QLatin1Char('.')); + const auto parts = connName.mid(1).split(QLatin1Char('.')); if (parts.count() < 1) return false; - for (int i = 0; i < parts.count(); ++i) { - const QString &part = parts.at(i); + for (const QStringRef &part : parts) { if (part.isEmpty()) return false; @@ -407,6 +414,12 @@ namespace QDBusUtil } /*! + \fn bool QDBusUtil::isValidUniqueConnectionName(const QString &connName) + + \overload + */ + + /*! \fn bool QDBusUtil::isValidBusName(const QString &busName) Returns \c true if \a busName is a valid bus name. @@ -429,12 +442,11 @@ namespace QDBusUtil if (busName.startsWith(QLatin1Char(':'))) return isValidUniqueConnectionName(busName); - QStringList parts = busName.split(QLatin1Char('.')); + const auto parts = busName.splitRef(QLatin1Char('.')); if (parts.count() < 1) return false; - for (int i = 0; i < parts.count(); ++i) { - const QString &part = parts.at(i); + for (const QStringRef &part : parts) { if (part.isEmpty()) return false; @@ -450,12 +462,12 @@ namespace QDBusUtil } /*! - \fn bool QDBusUtil::isValidMemberName(const QString &memberName) + \fn bool QDBusUtil::isValidMemberName(const QStringRef &memberName) Returns \c true if \a memberName is a valid member name. A valid member name does not exceed 255 characters in length, is not empty, is composed only of ASCII letters, digits and underscores, but does not start with a digit. */ - bool isValidMemberName(const QString &memberName) + bool isValidMemberName(const QStringRef &memberName) { if (memberName.isEmpty() || memberName.length() > DBUS_MAXIMUM_NAME_LENGTH) return false; @@ -470,6 +482,12 @@ namespace QDBusUtil } /*! + \fn bool QDBusUtil::isValidMemberName(const QString &memberName) + + \overload + */ + + /*! \fn bool QDBusUtil::isValidErrorName(const QString &errorName) Returns \c true if \a errorName is a valid error name. Valid error names are valid interface names and vice-versa, so this function is actually an alias for isValidInterfaceName. @@ -501,12 +519,10 @@ namespace QDBusUtil path.endsWith(QLatin1Char('/'))) return false; - QStringList parts = path.split(QLatin1Char('/')); - Q_ASSERT(parts.count() >= 1); - parts.removeFirst(); // it starts with /, so we get an empty first part - - for (int i = 0; i < parts.count(); ++i) - if (!isValidPartOfObjectPath(parts.at(i))) + // it starts with /, so we skip the empty first part + const auto parts = path.midRef(1).split(QLatin1Char('/')); + for (const QStringRef &part : parts) + if (!isValidPartOfObjectPath(part)) return false; return true; |