diff options
author | Anton Kudryavtsev <a.kudryavtsev@netris.ru> | 2016-04-26 13:58:00 +0300 |
---|---|---|
committer | Anton Kudryavtsev <a.kudryavtsev@netris.ru> | 2016-04-29 15:44:30 +0000 |
commit | cd1eff1e1ef3097e5dd1a01f88eb1052ee63022d (patch) | |
tree | 1a722931d6d2f85fd2b9b6e8208f4013a6c0e49b /src/dbus | |
parent | d2304a28ca657634253af26ad803c7f292e6f4cc (diff) |
qDBusInterfaceFromMetaObject: avoid quadratic complexity.
Don't use QString::prepend() in the loop. Just compose
temp string by appending, and then prepend whole temp string.
Change-Id: I6efb2d20e03f6a3526103d3a9494d5d1b0fbbf81
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Edward Welbourne <edward.welbourne@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/dbus')
-rw-r--r-- | src/dbus/qdbusmisc.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/dbus/qdbusmisc.cpp b/src/dbus/qdbusmisc.cpp index 0502bea0ac..930c3bd2da 100644 --- a/src/dbus/qdbusmisc.cpp +++ b/src/dbus/qdbusmisc.cpp @@ -99,9 +99,14 @@ QString qDBusInterfaceFromMetaObject(const QMetaObject *mo) if (domainName.isEmpty()) { interface.prepend(QLatin1String("local.")); } else { - interface.reserve(interface.size() + organizationDomain.size()); - for (const QStringRef &x : domainName) - interface.prepend(QLatin1Char('.')).prepend(x); + QString composedDomain; + // + 1 for additional dot, e.g. organizationDomain equals "example.com", + // then composedDomain will be equal "com.example." + composedDomain.reserve(organizationDomain.size() + 1); + for (auto it = domainName.rbegin(), end = domainName.rend(); it != end; ++it) + composedDomain += *it + QLatin1Char('.'); + + interface.prepend(composedDomain); } } } |