From 3449618a85c6885b56f5fff3b5d3877accb9dd0f Mon Sep 17 00:00:00 2001 From: Igor Sidorov Date: Fri, 31 Jan 2020 01:07:39 +0300 Subject: Change recursive to loop in allIncludesForDocument Change-Id: I110294efa506b5a038cfc7f4202fab001e3eefd3 Reviewed-by: David Schulz --- src/libs/cplusplus/CppDocument.cpp | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'src/libs/cplusplus/CppDocument.cpp') diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp index 1aaf2f5217..a0d0ef8362 100644 --- a/src/libs/cplusplus/CppDocument.cpp +++ b/src/libs/cplusplus/CppDocument.cpp @@ -44,6 +44,7 @@ #include #include +#include #include #include #include @@ -834,7 +835,23 @@ Document::Ptr Snapshot::documentFromSource(const QByteArray &preprocessedCode, QSet Snapshot::allIncludesForDocument(const QString &fileName) const { QSet result; - allIncludesForDocument_helper(fileName, result); + + QStack files; + files.push(fileName); + + while (!files.isEmpty()) { + QString file = files.pop(); + if (Document::Ptr doc = document(file)) { + const QStringList includedFiles = doc->includedFiles(); + for (const QString &inc : includedFiles) { + if (!result.contains(inc)) { + result.insert(inc); + files.push(inc); + } + } + } + } + return result; } @@ -868,18 +885,6 @@ bool Snapshot::operator==(const Snapshot &other) const return _documents == other._documents; } -void Snapshot::allIncludesForDocument_helper(const QString &fileName, QSet &result) const -{ - if (Document::Ptr doc = document(fileName)) { - foreach (const QString &inc, doc->includedFiles()) { - if (!result.contains(inc)) { - result.insert(inc); - allIncludesForDocument_helper(inc, result); - } - } - } -} - Document::Ptr Snapshot::document(const Utils::FilePath &fileName) const { return _documents.value(fileName); -- cgit v1.2.1