From 8741494f41c4279d814cb41a9a83f3c29bc8f832 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Wed, 2 Dec 2009 17:05:36 +0100 Subject: [PATCH] Rename dependsOn() in filesDepedingOn() and introduced Snapshot::dependencyTable(). --- src/libs/cplusplus/CppDocument.cpp | 84 +++++++++++++++------- src/libs/cplusplus/CppDocument.h | 8 ++- src/plugins/cpptools/cppfindreferences.cpp | 2 +- 3 files changed, 66 insertions(+), 28 deletions(-) diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp index ba6409280a..472e1f30da 100644 --- a/src/libs/cplusplus/CppDocument.cpp +++ b/src/libs/cplusplus/CppDocument.cpp @@ -474,6 +474,11 @@ QSharedPointer Snapshot::globalNamespaceBinding(Document::Ptr return CPlusPlus::bind(doc, *this); } +Document::Ptr Snapshot::value(const QString &fileName) const +{ + return QMap::value(QDir::cleanPath(fileName)); +} + Snapshot Snapshot::simplified(Document::Ptr doc) const { Snapshot snapshot; @@ -496,20 +501,15 @@ void Snapshot::simplified_helper(Document::Ptr doc, Snapshot *snapshot) const } } -QStringList Snapshot::dependsOn(const QString &fileName) const +QStringList Snapshot::filesDependingOn(const QString &fileName) const { - const int n = size(); - - QVector files(n); + const int N = size(); + QVector files(N); QHash fileIndex; QHash > includes; + QVector includeMap(N); - QMapIterator it(*this); - for (int i = 0; it.hasNext(); ++i) { - it.next(); - files[i] = it.key(); - fileIndex[it.key()] = i; - } + dependency_helper(files, fileIndex, includes, includeMap); int index = fileIndex.value(fileName, -1); if (index == -1) { @@ -517,7 +517,54 @@ QStringList Snapshot::dependsOn(const QString &fileName) const return QStringList(); } - QVector includeMap(files.size()); + QStringList deps; + for (int i = 0; i < files.size(); ++i) { + const QBitArray &bits = includeMap.at(i); + + if (bits.testBit(index)) + deps.append(files.at(i)); + } + + return deps; +} + +QMap Snapshot::dependencyTable() const +{ + const int N = size(); + QVector files(N); + QHash fileIndex; + QHash > includes; + QVector includeMap(N); + + dependency_helper(files, fileIndex, includes, includeMap); + + QMap depMap; + + for (int index = 0; index < files.size(); ++index) { + QStringList deps; + for (int i = 0; i < files.size(); ++i) { + const QBitArray &bits = includeMap.at(i); + + if (bits.testBit(index)) + deps.append(files.at(i)); + } + depMap[files.at(index)] = deps; + } + + return depMap; +} + +void Snapshot::dependency_helper(QVector &files, + QHash &fileIndex, + QHash > &includes, + QVector &includeMap) const +{ + QMapIterator it(*this); + for (int i = 0; it.hasNext(); ++i) { + it.next(); + files[i] = it.key(); + fileIndex[it.key()] = i; + } for (int i = 0; i < files.size(); ++i) { if (Document::Ptr doc = value(files.at(i))) { @@ -559,19 +606,4 @@ QStringList Snapshot::dependsOn(const QString &fileName) const } } } while (changed); - - QStringList deps; - for (int i = 0; i < files.size(); ++i) { - const QBitArray &bits = includeMap.at(i); - - if (bits.testBit(index)) - deps.append(files.at(i)); - } - - return deps; -} - -Document::Ptr Snapshot::value(const QString &fileName) const -{ - return QMap::value(QDir::cleanPath(fileName)); } diff --git a/src/libs/cplusplus/CppDocument.h b/src/libs/cplusplus/CppDocument.h index 0f879b872d..b40cb21e6c 100644 --- a/src/libs/cplusplus/CppDocument.h +++ b/src/libs/cplusplus/CppDocument.h @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -338,7 +339,8 @@ public: QSharedPointer globalNamespaceBinding(Document::Ptr doc) const; - QStringList dependsOn(const QString &fileName) const; + QStringList filesDependingOn(const QString &fileName) const; + QMap dependencyTable() const; void insert(Document::Ptr doc); Document::Ptr value(const QString &fileName) const; @@ -347,6 +349,10 @@ public: private: void simplified_helper(Document::Ptr doc, Snapshot *snapshot) const; + void dependency_helper(QVector &files, + QHash &fileIndex, + QHash > &includes, + QVector &includeMap) const; }; } // end of namespace CPlusPlus diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index 3a83089c4d..20d3281992 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -124,7 +124,7 @@ static void find_helper(QFutureInterface &future, files.append(doc->fileName()); } } else { - files += snapshot.dependsOn(sourceFile); + files += snapshot.filesDependingOn(sourceFile); } files.removeDuplicates(); //qDebug() << "done in:" << tm.elapsed() << "number of files to parse:" << files.size(); -- GitLab