summaryrefslogtreecommitdiff
path: root/src/libs/utils/filesearch.h
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@theqtcompany.com>2015-03-23 15:19:42 +0100
committerEike Ziller <eike.ziller@theqtcompany.com>2015-04-16 08:36:13 +0000
commit37fb296e722ecb0ca1c69bfd111ab4338f8fcd6d (patch)
tree2492f1961b37f2cc3af0a9c983590409a0b4e439 /src/libs/utils/filesearch.h
parent50fe3585a890fdbb5b6b8598bd8ffe97c036b52d (diff)
downloadqt-creator-37fb296e722ecb0ca1c69bfd111ab4338f8fcd6d.tar.gz
FileSearch: Move FileIterator to std iterator semantics.
We need this when we want to use QtConcurrent::mappedReduced. Change-Id: I4a6a31f4a0cc9a739a263cc148a1d51d7aa5d418 Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
Diffstat (limited to 'src/libs/utils/filesearch.h')
-rw-r--r--src/libs/utils/filesearch.h100
1 files changed, 78 insertions, 22 deletions
diff --git a/src/libs/utils/filesearch.h b/src/libs/utils/filesearch.h
index e77c4887fd..bf827d0c27 100644
--- a/src/libs/utils/filesearch.h
+++ b/src/libs/utils/filesearch.h
@@ -46,24 +46,77 @@ namespace Utils {
class QTCREATOR_UTILS_EXPORT FileIterator
{
public:
- explicit FileIterator(const QStringList &fileList,
- const QList<QTextCodec *> encodings);
- virtual ~FileIterator();
+ class Item
+ {
+ public:
+ Item(const QString &path, QTextCodec *codec)
+ : filePath(path), encoding(codec)
+ {}
+ QString filePath;
+ QTextCodec *encoding;
+ };
+
+ class const_iterator
+ {
+ public:
+ typedef std::forward_iterator_tag iterator_category;
+ typedef Item value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef const value_type *pointer;
+ typedef const value_type &reference;
+
+ const_iterator(FileIterator *parent, Item item, int id)
+ : m_parent(parent), m_item(item), m_index(id)
+ {}
+ const Item operator*() const { return m_item; }
+ const Item *operator->() const { return &m_item; }
+ void operator++() { m_parent->next(this); }
+ bool operator==(const const_iterator &other) const
+ {
+ return m_parent == other.m_parent && m_index == other.m_index;
+ }
+ bool operator!=(const const_iterator &other) const { return !operator==(other); }
+
+ FileIterator *m_parent;
+ Item m_item;
+ int m_index; // -1 == end
+ };
+
+ virtual ~FileIterator() {}
+ void next(const_iterator *it);
+ const_iterator begin();
+ const_iterator end();
+
+ virtual int maxProgress() const = 0;
+ virtual int currentProgress() const = 0;
+
+protected:
+ virtual void update(int requestedIndex) = 0;
+ virtual int currentFileCount() const = 0;
+ virtual QString fileAt(int index) const = 0;
+ virtual QTextCodec *codecAt(int index) const = 0;
+};
- virtual bool hasNext() const;
- virtual QString next();
- virtual QTextCodec *encoding() const;
- virtual int maxProgress() const;
- virtual int currentProgress() const;
+class QTCREATOR_UTILS_EXPORT FileListIterator : public FileIterator
+{
+public:
+ explicit FileListIterator(const QStringList &fileList,
+ const QList<QTextCodec *> encodings);
+
+ int maxProgress() const override;
+ int currentProgress() const override;
protected:
- FileIterator();
+ void update(int requestedIndex) override;
+ int currentFileCount() const override;
+ QString fileAt(int index) const override;
+ QTextCodec *codecAt(int index) const override;
private:
- QStringList m_list;
- QStringListIterator *m_iterator;
+ QTextCodec *encodingAt(int index) const;
+ QStringList m_files;
QList<QTextCodec *> m_encodings;
- int m_index;
+ int m_maxIndex;
};
class QTCREATOR_UTILS_EXPORT SubDirFileIterator : public FileIterator
@@ -72,20 +125,23 @@ public:
SubDirFileIterator(const QStringList &directories, const QStringList &filters,
QTextCodec *encoding = 0);
- bool hasNext() const;
- QString next();
- QTextCodec *encoding() const;
- int maxProgress() const;
- int currentProgress() const;
+ int maxProgress() const override;
+ int currentProgress() const override;
+
+protected:
+ void update(int requestedIndex) override;
+ int currentFileCount() const override;
+ QString fileAt(int index) const override;
+ QTextCodec *codecAt(int index) const override;
private:
QStringList m_filters;
QTextCodec *m_encoding;
- mutable QStack<QDir> m_dirs;
- mutable QStack<qreal> m_progressValues;
- mutable QStack<bool> m_processedValues;
- mutable qreal m_progress;
- mutable QStringList m_currentFiles;
+ QStack<QDir> m_dirs;
+ QStack<qreal> m_progressValues;
+ QStack<bool> m_processedValues;
+ qreal m_progress;
+ QStringList m_files;
};
class QTCREATOR_UTILS_EXPORT FileSearchResult