summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRitt Konstantin <ritt.ks@gmail.com>2009-06-10 15:18:20 (GMT)
committerAlexis Menard <alexis.menard@nokia.com>2009-06-10 15:18:32 (GMT)
commit859c0d5f2fe8234e9f1b8f638a3e3c592e7f3224 (patch)
tree06e0dbefa1051f52272687d9eed00ba9f9ba3a35
parent11730b27413218c9e9bf1fc35f5e46a35baad874 (diff)
downloadQt-859c0d5f2fe8234e9f1b8f638a3e3c592e7f3224.zip
Qt-859c0d5f2fe8234e9f1b8f638a3e3c592e7f3224.tar.gz
Qt-859c0d5f2fe8234e9f1b8f638a3e3c592e7f3224.tar.bz2
Optimize QDirPrivate::sortFileList by using a QFileInfoList
directly instead of "constructing" a new one with empty file infos Reviewed-by:alexis Request-url: http://qt.gitorious.org/qt/qt/merge_requests/636 Task-number:253382 Merge-request: 636 Reviewed-by: Alexis Menard <alexis.menard@nokia.com>
-rw-r--r--src/corelib/io/qdir.cpp41
1 files changed, 28 insertions, 13 deletions
diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp
index 7d330e6..1795245 100644
--- a/src/corelib/io/qdir.cpp
+++ b/src/corelib/io/qdir.cpp
@@ -45,6 +45,7 @@
#ifndef QT_NO_DEBUG_STREAM
#include "qdebug.h"
#endif
+#include "qdiriterator.h"
#include "qfsfileengine.h"
#include "qdatetime.h"
#include "qstring.h"
@@ -92,7 +93,7 @@ protected:
QString initFileEngine(const QString &file);
void updateFileLists() const;
- void sortFileList(QDir::SortFlags, QStringList &, QStringList *, QFileInfoList *) const;
+ void sortFileList(QDir::SortFlags, QFileInfoList &, QStringList *, QFileInfoList *) const;
private:
#ifdef QT3_SUPPORT
@@ -268,7 +269,7 @@ bool QDirSortItemComparator::operator()(const QDirSortItem &n1, const QDirSortIt
return r < 0;
}
-inline void QDirPrivate::sortFileList(QDir::SortFlags sort, QStringList &l,
+inline void QDirPrivate::sortFileList(QDir::SortFlags sort, QFileInfoList &l,
QStringList *names, QFileInfoList *infos) const
{
if(names)
@@ -278,16 +279,12 @@ inline void QDirPrivate::sortFileList(QDir::SortFlags sort, QStringList &l,
if(!l.isEmpty()) {
QDirSortItem *si= new QDirSortItem[l.count()];
int i;
- for (i = 0; i < l.size(); ++i) {
- QString path = data->path;
- if (!path.isEmpty() && !path.endsWith(QLatin1Char('/')))
- path += QLatin1Char('/');
- si[i].item = QFileInfo(path + l.at(i));
- }
+ for (i = 0; i < l.size(); ++i)
+ si[i].item = l.at(i);
if ((sort & QDir::SortByMask) != QDir::Unsorted)
- qStableSort(si, si+i, QDirSortItemComparator(sort));
+ qStableSort(si, si + i, QDirSortItemComparator(sort));
// put them back in the list(s)
- for (int j = 0; j<i; j++) {
+ for (int j = 0; j < i; j++) {
if(infos)
infos->append(si[j].item);
if(names)
@@ -300,7 +297,12 @@ inline void QDirPrivate::sortFileList(QDir::SortFlags sort, QStringList &l,
inline void QDirPrivate::updateFileLists() const
{
if(data->listsDirty) {
- QStringList l = data->fileEngine->entryList(data->filters, data->nameFilters);
+ QFileInfoList l;
+ QDirIterator it(data->path, data->nameFilters, data->filters);
+ while (it.hasNext()) {
+ it.next();
+ l.append(it.fileInfo());
+ }
sortFileList(data->sort, l, &data->files, &data->fileInfos);
data->listsDirty = 0;
}
@@ -1346,7 +1348,12 @@ QStringList QDir::entryList(const QStringList &nameFilters, Filters filters,
d->updateFileLists();
return d->data->files;
}
- QStringList l = d->data->fileEngine->entryList(filters, nameFilters);
+ QFileInfoList l;
+ QDirIterator it(d->data->path, nameFilters, filters);
+ while (it.hasNext()) {
+ it.next();
+ l.append(it.fileInfo());
+ }
if ((sort & QDir::SortByMask) == QDir::Unsorted)
return l;
@@ -1389,8 +1396,16 @@ QFileInfoList QDir::entryInfoList(const QStringList &nameFilters, Filters filter
d->updateFileLists();
return d->data->fileInfos;
}
+ QFileInfoList l;
+ QDirIterator it(d->data->path, nameFilters, filters);
+ while (it.hasNext()) {
+ it.next();
+ l.append(it.fileInfo());
+ }
+ if ((sort & QDir::SortByMask) == QDir::Unsorted)
+ return l;
+
QFileInfoList ret;
- QStringList l = d->data->fileEngine->entryList(filters, nameFilters);
d->sortFileList(sort, l, 0, &ret);
return ret;
}