regexps are expensive to create, we ask for packages a lot, cache the re

This commit is contained in:
Aaron Seigo 2013-09-12 15:15:59 +02:00
parent 5735faec03
commit 5903d97966

View File

@ -51,12 +51,18 @@ static PluginLoader *s_pluginLoader = 0;
class PluginLoaderPrivate
{
public:
PluginLoaderPrivate()
: packageRE("[^a-zA-Z0-9\\-_]")
{
}
static QSet<QString> knownCategories();
static QString parentAppConstraint(const QString &parentApp = QString());
static QSet<QString> s_customCategories;
QHash<QString, QWeakPointer<PackageStructure> > structures;
bool isDefaultLoader;
QRegExp packageRE;
};
QSet<QString> PluginLoaderPrivate::s_customCategories;
@ -423,9 +429,8 @@ Package PluginLoader::loadPackage(const QString &packageFormat, const QString &s
}
if (!specialization.isEmpty()) {
QRegExp re("[^a-zA-Z0-9\\-_]");
// check that the provided strings are safe to use in a ServiceType query
if (re.indexIn(specialization) == -1 && re.indexIn(packageFormat) == -1) {
if (d->packageRE.indexIn(specialization) == -1 && d->packageRE.indexIn(packageFormat) == -1) {
// FIXME: The query below is rather spepcific to script engines. generify if possible
const QString component = packageFormat.right(packageFormat.size() - packageFormat.lastIndexOf('/') - 1);
const QString constraint = QString("[X-Plasma-API] == '%1' and " "'%2' in [X-Plasma-ComponentTypes]").arg(specialization, component);