summaryrefslogtreecommitdiffstats
path: root/src/corelib/io
diff options
context:
space:
mode:
authorSamuel Rødal <sroedal@trolltech.com>2009-04-03 12:39:35 (GMT)
committerSamuel Rødal <sroedal@trolltech.com>2009-04-16 07:23:02 (GMT)
commit68045615d311c3cb8bcaaaf84b4c8ca52a0fccd0 (patch)
treed62728159bc920edea0c54c87cd2b7157d2733d3 /src/corelib/io
parentc57b1a8629b7fa79f48a35eea2f09d923b665dc0 (diff)
downloadQt-68045615d311c3cb8bcaaaf84b4c8ca52a0fccd0.zip
Qt-68045615d311c3cb8bcaaaf84b4c8ca52a0fccd0.tar.gz
Qt-68045615d311c3cb8bcaaaf84b4c8ca52a0fccd0.tar.bz2
Reduce the number of calls to cleanPath() in QResourceRoot::findNode
Move the cleanPath call out of the function and outside the loops to avoid doing the same work over and over. Reviewed-by: Gunnar Sletta
Diffstat (limited to 'src/corelib/io')
-rw-r--r--src/corelib/io/qresource.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp
index a1f921e..dd24cde 100644
--- a/src/corelib/io/qresource.cpp
+++ b/src/corelib/io/qresource.cpp
@@ -101,6 +101,16 @@ protected:
}
};
+static QString cleanPath(const QString &_path)
+{
+ QString path = QDir::cleanPath(_path);
+ // QDir::cleanPath does not remove two trailing slashes under _Windows_
+ // due to support for UNC paths. Remove those manually.
+ if (path.startsWith(QLatin1String("//")))
+ path.remove(0, 1);
+ return path;
+}
+
Q_DECLARE_TYPEINFO(QResourceRoot, Q_MOVABLE_TYPE);
Q_GLOBAL_STATIC_WITH_ARGS(QMutex, resourceMutex, (QMutex::Recursive))
@@ -216,9 +226,10 @@ QResourcePrivate::load(const QString &file)
related.clear();
QMutexLocker lock(resourceMutex());
const ResourceList *list = resourceList();
+ QString cleaned = cleanPath(file);
for(int i = 0; i < list->size(); ++i) {
QResourceRoot *res = list->at(i);
- const int node = res->findNode(file);
+ const int node = res->findNode(cleaned);
if(node != -1) {
if(related.isEmpty()) {
container = res->isContainer(node);
@@ -292,6 +303,7 @@ QResourcePrivate::ensureChildren() const
if(path.startsWith(QLatin1Char(':')))
path = path.mid(1);
QSet<QString> kids;
+ QString cleaned = cleanPath(path);
for(int i = 0; i < related.size(); ++i) {
QResourceRoot *res = related.at(i);
if(res->mappingRootSubdir(path, &k) && !k.isEmpty()) {
@@ -300,7 +312,7 @@ QResourcePrivate::ensureChildren() const
kids.insert(k);
}
} else {
- const int node = res->findNode(path);
+ const int node = res->findNode(cleaned);
if(node != -1) {
QStringList related_children = res->children(node);
for(int kid = 0; kid < related_children.size(); ++kid) {
@@ -566,14 +578,10 @@ inline QString QResourceRoot::name(int node) const
ret += QChar(names[name_offset+i+1], names[name_offset+i]);
return ret;
}
+
int QResourceRoot::findNode(const QString &_path, const QLocale &locale) const
{
- QString path = QDir::cleanPath(_path);
- // QDir::cleanPath does not remove two trailing slashes under _Windows_
- // due to support for UNC paths. Remove those manually.
- if (path.startsWith(QLatin1String("//")))
- path.remove(0, 1);
-
+ QString path = _path;
{
QString root = mappingRoot();
if(!root.isEmpty()) {