From a5792da8b4bf88a9d93cfd0582cec469747de3b2 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Fri, 20 Nov 2020 21:25:08 +0100 Subject: Refactoring: removing setVisited/isVisited members --- src/classdef.cpp | 10 ------ src/classdef.h | 7 ---- src/doxygen.cpp | 100 ++++++++++----------------------------------------- src/filedef.cpp | 21 +++++------ src/filedef.h | 12 ++++--- src/namespacedef.cpp | 21 ++++------- src/namespacedef.h | 14 +++++--- 7 files changed, 49 insertions(+), 136 deletions(-) diff --git a/src/classdef.cpp b/src/classdef.cpp index 9f04897..572b550 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -212,8 +212,6 @@ class ClassDefImpl : public DefinitionMixin const ClassDef *inheritedFrom,const QCString &inheritId) const; virtual void writeTagFile(FTextStream &); - virtual void setVisited(bool visited) const { m_visited = visited; } - virtual bool isVisited() const { return m_visited; } virtual int countMembersIncludingGrouped(MemberListType lt,const ClassDef *inheritedFrom,bool additional) const; virtual int countInheritanceNodes() const; virtual int countMemberDeclarations(MemberListType lt,const ClassDef *inheritedFrom, @@ -224,7 +222,6 @@ class ClassDefImpl : public DefinitionMixin QPtrDict *visitedClasses=0) const; private: - mutable bool m_visited; void addUsedInterfaceClasses(MemberDef *md,const char *typeStr); void showUsedFiles(OutputList &ol) const; @@ -469,12 +466,6 @@ class ClassDefAliasImpl : public DefinitionAliasMixin virtual void updateBaseClasses(const BaseClassList &) {} virtual void updateSubClasses(const BaseClassList &) {} - - virtual void setVisited(bool visited) const { m_visited = visited; } - virtual bool isVisited() const { return m_visited; } - - private: - mutable bool m_visited = false; }; @@ -729,7 +720,6 @@ ClassDefImpl::ClassDefImpl( bool isSymbol,bool isJavaEnum) : DefinitionMixin(defFileName,defLine,defColumn,removeRedundantWhiteSpace(nm),0,0,isSymbol) { - m_visited=FALSE; setReference(lref); m_impl = new ClassDefImpl::IMPL; m_impl->compType = ct; diff --git a/src/classdef.h b/src/classdef.h index 1cbf7b1..54664e5 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -376,13 +376,6 @@ class ClassDef : public Definition virtual void writeDeclarationLink(OutputList &ol,bool &found, const char *header,bool localNames) const = 0; - //----------------------------------------------------------------------------------- - // --- visiting administration ---- - //----------------------------------------------------------------------------------- - - virtual void setVisited(bool visited) const = 0; - virtual bool isVisited() const = 0; - }; class ClassDefMutable : public DefinitionMutable, public ClassDef diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 6089470..0a8bb0e 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -1149,14 +1149,7 @@ static void buildClassDocList(const Entry *root) static void resolveClassNestingRelations() { ClassSDict::Iterator cli(*Doxygen::classSDict); - for (cli.toFirst();cli.current();++cli) - { - ClassDefMutable *cdm = toClassDefMutable(cli.current()); - if (cdm) - { - cdm->setVisited(FALSE); - } - } + ClassDefSet visitedClasses; bool done=FALSE; int iteration=0; @@ -1167,16 +1160,16 @@ static void resolveClassNestingRelations() ClassDef *icd=0; for (cli.toFirst();(icd=cli.current());++cli) { - ClassDefMutable *cd = toClassDefMutable(icd); - if (cd && !cd->isVisited()) + if (visitedClasses.find(icd)==visitedClasses.end()) { - QCString name = stripAnonymousNamespaceScope(cd->name()); + QCString name = stripAnonymousNamespaceScope(icd->name()); //printf("processing=%s, iteration=%d\n",cd->name().data(),iteration); // also add class to the correct structural context DefinitionMutable *d = findScopeFromQualifiedName(Doxygen::globalScope, - name,cd->getFileDef(),0); + name,icd->getFileDef(),0); if (d) { + ClassDefMutable *cd = toClassDefMutable(icd); //printf("****** adding %s to scope %s in iteration %d\n",cd->name().data(),d->name().data(),iteration); d->addInnerCompound(cd); cd->setOuterScope(toDefinition(d)); @@ -1196,7 +1189,6 @@ static void resolveClassNestingRelations() QCString aliasFullName = toDefinition(d)->qualifiedName()+"::"+aliasCd->localName(); Doxygen::classSDict->append(aliasFullName,aliasCd); //printf("adding %s to %s as %s\n",qPrint(aliasCd->name()),qPrint(d->name()),qPrint(aliasFullName)); - //aliasCd->setVisited(TRUE); // not needed anymore, as aliasCd is not mutable } } else @@ -1205,7 +1197,7 @@ static void resolveClassNestingRelations() } } - cd->setVisited(TRUE); + visitedClasses.insert(icd); done=FALSE; } //else @@ -1221,7 +1213,7 @@ static void resolveClassNestingRelations() for (cli.toFirst();(icd=cli.current());++cli) { ClassDefMutable *cd = toClassDefMutable(icd); - if (cd && !cd->isVisited()) + if (cd && visitedClasses.find(icd)!=visitedClasses.end()) { QCString name = stripAnonymousNamespaceScope(cd->name()); //printf("processing unresolved=%s, iteration=%d\n",cd->name().data(),iteration); @@ -1250,23 +1242,15 @@ void distributeClassGroupRelations() //if (!inlineGroupedClasses) return; //printf("** distributeClassGroupRelations()\n"); + ClassDefSet visitedClasses; ClassSDict::Iterator cli(*Doxygen::classSDict); - for (cli.toFirst();cli.current();++cli) - { - ClassDefMutable *cdm = toClassDefMutable(cli.current()); - if (cdm) - { - cdm->setVisited(FALSE); - } - } - - ClassDef *icd; - for (cli.toFirst();(icd=cli.current());++cli) + ClassDef *cd; + for (cli.toFirst();(cd=cli.current());++cli) { - ClassDefMutable *cd = toClassDefMutable(icd); //printf("Checking %s\n",cd->name().data()); // distribute the group to nested classes as well - if (cd && !cd->isVisited() && cd->partOfGroups()!=0 && cd->getClassSDict()) + if (cd && visitedClasses.find(cd)==visitedClasses.end() && + cd->partOfGroups()!=0 && cd->getClassSDict()) { //printf(" Candidate for merging\n"); ClassSDict::Iterator ncli(*cd->getClassSDict()); @@ -1283,7 +1267,7 @@ void distributeClassGroupRelations() gd->addClass(ncdm); } } - cd->setVisited(TRUE); // only visit every class once + visitedClasses.insert(cd); // only visit every class once } } } @@ -1969,25 +1953,15 @@ static void findUsingDeclImports(const Entry *root) static void findIncludedUsingDirectives() { - // first mark all files as not visited - for (const auto &fn : *Doxygen::inputNameLinkedMap) - { - for (const auto &fd : *fn) - { - fd->setVisited(FALSE); - } - } + FileDefSet visitedFiles; // then recursively add using directives found in #include files // to files that have not been visited. for (const auto &fn : *Doxygen::inputNameLinkedMap) { for (const auto &fd : *fn) { - if (!fd->isVisited()) - { - //printf("----- adding using directives for file %s\n",fd->name().data()); - fd->addIncludedUsingDirectives(); - } + //printf("----- adding using directives for file %s\n",fd->name().data()); + fd->addIncludedUsingDirectives(visitedFiles); } } } @@ -3872,7 +3846,6 @@ static void findUsedClassesForClass(const Entry *root, QDict *templateNames=0 ) { - masterCd->setVisited(TRUE); const ArgumentList &formalArgs = masterCd->templateArguments(); for (auto &mni : masterCd->memberNameInfoLinkedMap()) { @@ -4019,8 +3992,6 @@ static void findBaseClassesForClass( QDict *templateNames=0 ) { - //if (masterCd->visited) return; - masterCd->setVisited(TRUE); // The base class could ofcouse also be a non-nested class const ArgumentList &formalArgs = masterCd->templateArguments(); for (const BaseInfo &bi : root->extends) @@ -4626,14 +4597,7 @@ static QCString extractClassName(const Entry *root) static void findInheritedTemplateInstances() { ClassSDict::Iterator cli(*Doxygen::classSDict); - for (cli.toFirst();cli.current();++cli) - { - ClassDefMutable *cdm = toClassDefMutable(cli.current()); - if (cdm) - { - cdm->setVisited(FALSE); - } - } + ClassDefSet visitedClasses; for (const auto &kv : g_classEntries) { const Entry *root = kv.second; @@ -4655,14 +4619,6 @@ static void findInheritedTemplateInstances() static void findUsedTemplateInstances() { ClassSDict::Iterator cli(*Doxygen::classSDict); - for (cli.toFirst();cli.current();++cli) - { - ClassDefMutable *cdm = toClassDefMutable(cli.current()); - if (cdm) - { - cdm->setVisited(FALSE); - } - } for (const auto &kv : g_classEntries) { const Entry *root = kv.second; @@ -4684,14 +4640,6 @@ static void findUsedTemplateInstances() static void computeClassRelations() { ClassSDict::Iterator cli(*Doxygen::classSDict); - for (cli.toFirst();cli.current();++cli) - { - ClassDefMutable *cdm = toClassDefMutable(cli.current()); - if (cdm) - { - cdm->setVisited(FALSE); - } - } for (const auto &kv : g_classEntries) { const Entry *root = kv.second; @@ -8070,30 +8018,20 @@ static void combineUsingRelations() { for (const auto &fd : *fn) { - fd->setVisited(FALSE); - } - } - for (const auto &fn : *Doxygen::inputNameLinkedMap) - { - for (const auto &fd : *fn) - { fd->combineUsingRelations(); } } // for each namespace + NamespaceDefSet visitedNamespaces; NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict); NamespaceDef *nd; for (nli.toFirst() ; (nd=nli.current()) ; ++nli ) { - nd->setVisited(FALSE); - } - for (nli.toFirst() ; (nd=nli.current()) ; ++nli ) - { NamespaceDefMutable *ndm = toNamespaceDefMutable(nd); if (ndm) { - ndm->combineUsingRelations(); + ndm->combineUsingRelations(visitedNamespaces); } } } diff --git a/src/filedef.cpp b/src/filedef.cpp index 01b5bfd..45dde1f 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -122,13 +122,10 @@ class FileDefImpl : public DefinitionMixin virtual void addMembersToMemberGroup(); virtual void distributeMemberGroupDocumentation(); virtual void findSectionsInDocumentation(); - virtual void addIncludedUsingDirectives(); + virtual void addIncludedUsingDirectives(FileDefSet &visitedFiles); virtual void addListReferences(); - virtual void setVisited(bool v) { m_visited = v; } - virtual bool isVisited() const { return m_visited; } private: - bool m_visited; void acquireFileVersion(); MemberList *createMemberList(MemberListType lt); void addMemberToList(MemberListType lt,MemberDef *md); @@ -244,7 +241,6 @@ FileDefImpl::FileDefImpl(const char *p,const char *nm, m_isSource = guessSection(nm)==Entry::SOURCE_SEC; m_docname = nm; m_dir = 0; - m_visited = FALSE; if (Config_getBool(FULL_PATH_NAMES)) { m_docname.prepend(stripFromPath(m_path.copy())); @@ -1523,10 +1519,10 @@ void FileDefImpl::addIncludeDependency(FileDef *fd,const char *incName,bool loca } } -void FileDefImpl::addIncludedUsingDirectives() +void FileDefImpl::addIncludedUsingDirectives(FileDefSet &visitedFiles) { - if (m_visited) return; - m_visited=TRUE; + if (visitedFiles.find(this)!=visitedFiles.end()) return; // file already processed + visitedFiles.insert(this); //printf("( FileDefImpl::addIncludedUsingDirectives for file %s\n",name().data()); if (m_includeList) // file contains #includes @@ -1536,10 +1532,10 @@ void FileDefImpl::addIncludedUsingDirectives() IncludeInfo *ii; for (iii.toFirst();(ii=iii.current());++iii) // foreach #include... { - if (ii->fileDef && !ii->fileDef->isVisited()) // ...that is a known file + if (ii->fileDef) // ...that is a known file { // recurse into this file - ii->fileDef->addIncludedUsingDirectives(); + ii->fileDef->addIncludedUsingDirectives(visitedFiles); } } } @@ -1890,15 +1886,14 @@ void generateFileTree() void FileDefImpl::combineUsingRelations() { - if (m_visited) return; // already done - m_visited=TRUE; LinkedRefMap usingDirList = m_usingDirList; + NamespaceDefSet visitedNamespaces; for (auto &nd : usingDirList) { NamespaceDefMutable *ndm = toNamespaceDefMutable(nd); if (ndm) { - ndm->combineUsingRelations(); + ndm->combineUsingRelations(visitedNamespaces); } } diff --git a/src/filedef.h b/src/filedef.h index e3333dc..ac3d729 100644 --- a/src/filedef.h +++ b/src/filedef.h @@ -18,6 +18,8 @@ #ifndef FILEDEF_H #define FILEDEF_H +#include + #include "index.h" #include #include @@ -44,6 +46,10 @@ class DirDef; class FTextStream; class ClangTUParser; +// --- Set of files + +using FileDefSet = std::set; + /** Class representing the data associated with a \#include statement. */ struct IncludeInfo { @@ -178,18 +184,14 @@ class FileDef : public DefinitionMutable, public Definition virtual void addMembersToMemberGroup() = 0; virtual void distributeMemberGroupDocumentation() = 0; virtual void findSectionsInDocumentation() = 0; - virtual void addIncludedUsingDirectives() = 0; + virtual void addIncludedUsingDirectives(FileDefSet &visitedFiles) = 0; virtual void addListReferences() = 0; - - virtual void setVisited(bool v) = 0; - virtual bool isVisited() const = 0; }; FileDef *createFileDef(const char *p,const char *n,const char *ref=0,const char *dn=0); - // --- Cast functions FileDef *toFileDef(Definition *d); diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index f0a63d2..cef836a 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -61,7 +61,7 @@ class NamespaceDefImpl : public DefinitionMixin virtual LinkedRefMap getUsedNamespaces() const { return m_usingDirList; } virtual void addUsingDeclaration(const ClassDef *cd); virtual LinkedRefMap getUsedClasses() const { return m_usingDeclList; } - virtual void combineUsingRelations(); + virtual void combineUsingRelations(NamespaceDefSet &visitedNamespace); virtual QCString displayName(bool=TRUE) const; virtual QCString localName() const; virtual void setInline(bool isInline) { m_inline = isInline; } @@ -95,11 +95,8 @@ class NamespaceDefImpl : public DefinitionMixin virtual QCString compoundTypeString() const; virtual void setMetaData(const QCString &m); - void setVisited(bool v) { m_visited = v; } - bool isVisited() const { return m_visited; } private: - bool m_visited; MemberList *createMemberList(MemberListType lt); void addMemberToList(MemberListType lt,MemberDef *md); void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title); @@ -218,12 +215,6 @@ class NamespaceDefAliasImpl : public DefinitionAliasMixin { return getNSAlias()->title(); } virtual QCString compoundTypeString() const { return getNSAlias()->compoundTypeString(); } - - void setVisited(bool v) { m_visited = v; } - bool isVisited() const { return m_visited; } - - private: - bool m_visited = false; }; NamespaceDef *createNamespaceDefAlias(const Definition *newScope,const NamespaceDef *nd) @@ -265,7 +256,6 @@ NamespaceDefImpl::NamespaceDefImpl(const char *df,int dl,int dc, setReference(lref); memberGroupSDict = new MemberGroupSDict; memberGroupSDict->setAutoDelete(TRUE); - m_visited=FALSE; m_inline=FALSE; m_subGrouping=Config_getBool(SUBGROUPING); if (type && !strcmp("module", type)) @@ -1284,17 +1274,18 @@ QCString NamespaceDefImpl::localName() const return result; } -void NamespaceDefImpl::combineUsingRelations() +void NamespaceDefImpl::combineUsingRelations(NamespaceDefSet &visitedNamespaces) { - if (m_visited) return; // already done - m_visited=TRUE; + if (visitedNamespaces.find(this)!=visitedNamespaces.end()) return; // already processed + visitedNamespaces.insert(this); + LinkedRefMap usingDirList = m_usingDirList; for (auto &nd : usingDirList) { NamespaceDefMutable *ndm = toNamespaceDefMutable(nd); if (ndm) { - ndm->combineUsingRelations(); + ndm->combineUsingRelations(visitedNamespaces); } } diff --git a/src/namespacedef.h b/src/namespacedef.h index 730d68e..18171f7 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -16,6 +16,8 @@ #ifndef NAMESPACEDEF_H #define NAMESPACEDEF_H +#include + #include #include #include "sortdict.h" @@ -31,8 +33,14 @@ class MemberDef; class MemberGroupSDict; class NamespaceSDict; class FTextStream; +class NamespaceDef; class NamespaceDefMutable; +// --- Set of namespaces + +using NamespaceDefSet = std::set; + + /** An abstract interface of a namespace symbol. */ class NamespaceDef : public Definition { @@ -81,10 +89,6 @@ class NamespaceDef : public Definition virtual QCString title() const = 0; virtual QCString compoundTypeString() const = 0; - - // --- visited administration - virtual void setVisited(bool v) = 0; - virtual bool isVisited() const = 0; }; class NamespaceDefMutable : public DefinitionMutable, public NamespaceDef @@ -110,7 +114,7 @@ class NamespaceDefMutable : public DefinitionMutable, public NamespaceDef virtual void addInnerCompound(const Definition *d) = 0; virtual void addListReferences() = 0; virtual void setFileName(const QCString &fn) = 0; - virtual void combineUsingRelations() = 0; + virtual void combineUsingRelations(NamespaceDefSet &visitedNamespace) = 0; virtual void addUsingDirective(const NamespaceDef *nd) = 0; virtual void addUsingDeclaration(const ClassDef *cd) = 0; virtual void setInline(bool isInline) = 0; -- cgit v0.12