From b82f069a2a11f6bc82c81ee2cda8d30725e95313 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Sun, 15 Nov 2020 13:41:45 +0100 Subject: Refactoring: remove isVisited/setVisited from index --- src/index.cpp | 34 ++++++++++++++++------------------ src/util.cpp | 35 ----------------------------------- src/util.h | 2 -- 3 files changed, 16 insertions(+), 55 deletions(-) diff --git a/src/index.cpp b/src/index.cpp index 3b3c520..dbd9770 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -464,7 +464,7 @@ void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part, //---------------------------------------------------------------------------- /*! Generates HTML Help tree of classes */ -static void writeClassTree(OutputList &ol,const BaseClassList &bcl,bool hideSuper,int level,FTVHelp* ftv,bool addToIndex) +static void writeClassTreeToOutput(OutputList &ol,const BaseClassList &bcl,int level,FTVHelp* ftv,bool addToIndex,ClassDefSet &visitedClasses) { if (bcl.empty()) return; bool started=FALSE; @@ -503,7 +503,8 @@ static void writeClassTree(OutputList &ol,const BaseClassList &bcl,bool hideSupe } ol.startIndexListItem(); //printf("Passed...\n"); - bool hasChildren = !cd->isVisited() && !hideSuper && classHasVisibleChildren(cd); + bool hasChildren = visitedClasses.find(cd)==visitedClasses.end() && + classHasVisibleChildren(cd); //printf("tree4: Has children %s: %d\n",cd->name().data(),hasChildren); if (cd->isLinkable()) { @@ -550,15 +551,14 @@ static void writeClassTree(OutputList &ol,const BaseClassList &bcl,bool hideSupe if (hasChildren) { //printf("Class %s at %p visited=%d\n",cd->name().data(),cd,cd->visited); - bool wasVisited=cd->isVisited(); - cd->setVisited(TRUE); + visitedClasses.insert(cd); if (cd->getLanguage()==SrcLangExt_VHDL) { - writeClassTree(ol,cd->baseClasses(),wasVisited,level+1,ftv,addToIndex); + writeClassTreeToOutput(ol,cd->baseClasses(),level+1,ftv,addToIndex,visitedClasses); } else { - writeClassTree(ol,cd->subClasses(),wasVisited,level+1,ftv,addToIndex); + writeClassTreeToOutput(ol,cd->subClasses(),level+1,ftv,addToIndex,visitedClasses); } } ol.endIndexListItem(); @@ -832,7 +832,7 @@ static void writeDirHierarchy(OutputList &ol, FTVHelp* ftv,bool addToIndex) //---------------------------------------------------------------------------- static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FTVHelp* ftv,bool addToIndex, - ClassDef::CompoundType ct) + ClassDef::CompoundType ct,ClassDefSet &visitedClasses) { static bool sliceOpt = Config_getBool(OPTIMIZE_OUTPUT_SLICE); ClassSDict::Iterator cli(*cl); @@ -876,7 +876,8 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT started=TRUE; } ol.startIndexListItem(); - bool hasChildren = !cd->isVisited() && classHasVisibleChildren(cd); + bool hasChildren = visitedClasses.find(cd)==visitedClasses.end() && + classHasVisibleChildren(cd); //printf("list: Has children %s: %d\n",cd->name().data(),hasChildren); if (cd->isLinkable()) { @@ -917,13 +918,13 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT } if (cd->getLanguage()==SrcLangExt_VHDL && hasChildren) { - writeClassTree(ol,cd->baseClasses(),cd->isVisited(),1,ftv,addToIndex); - cd->setVisited(TRUE); + writeClassTreeToOutput(ol,cd->baseClasses(),1,ftv,addToIndex,visitedClasses); + visitedClasses.insert(cd); } else if (hasChildren) { - writeClassTree(ol,cd->subClasses(),cd->isVisited(),1,ftv,addToIndex); - cd->setVisited(TRUE); + writeClassTreeToOutput(ol,cd->subClasses(),1,ftv,addToIndex,visitedClasses); + visitedClasses.insert(cd); } ol.endIndexListItem(); } @@ -933,16 +934,15 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT static void writeClassHierarchy(OutputList &ol, FTVHelp* ftv,bool addToIndex,ClassDef::CompoundType ct) { - initClassHierarchy(Doxygen::classSDict); - initClassHierarchy(Doxygen::hiddenClasses); + ClassDefSet visitedClasses; if (ftv) { ol.pushGeneratorState(); ol.disable(OutputGenerator::Html); } bool started=FALSE; - writeClassTreeForList(ol,Doxygen::classSDict,started,ftv,addToIndex,ct); - writeClassTreeForList(ol,Doxygen::hiddenClasses,started,ftv,addToIndex,ct); + writeClassTreeForList(ol,Doxygen::classSDict,started,ftv,addToIndex,ct,visitedClasses); + writeClassTreeForList(ol,Doxygen::hiddenClasses,started,ftv,addToIndex,ct,visitedClasses); if (started) { endIndexHierarchy(ol,0); @@ -988,8 +988,6 @@ static int countClassesInTreeList(const ClassSDict &cl, ClassDef::CompoundType c static int countClassHierarchy(ClassDef::CompoundType ct) { int count=0; - initClassHierarchy(Doxygen::classSDict); - initClassHierarchy(Doxygen::hiddenClasses); count+=countClassesInTreeList(*Doxygen::classSDict, ct); count+=countClassesInTreeList(*Doxygen::hiddenClasses, ct); return count; diff --git a/src/util.cpp b/src/util.cpp index c9b20cc..bc0abbd 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -3548,23 +3548,6 @@ int getPrefixIndex(const QCString &name) //---------------------------------------------------------------------------- -static void initBaseClassHierarchy(const BaseClassList &bcl) -{ - for (const auto &bcd : bcl) - { - ClassDefMutable *cd = toClassDefMutable(bcd.classDef); - if (cd) - { - if (cd->baseClasses().empty()) // no base classes => new root - { - initBaseClassHierarchy(cd->baseClasses()); - } - cd->setVisited(FALSE); - } - } -} -//---------------------------------------------------------------------------- - bool classHasVisibleChildren(const ClassDef *cd) { BaseClassList bcl; @@ -3590,24 +3573,6 @@ bool classHasVisibleChildren(const ClassDef *cd) return FALSE; } - -//---------------------------------------------------------------------------- - -void initClassHierarchy(ClassSDict *cl) -{ - ClassSDict::Iterator cli(*cl); - ClassDef *cd; - for ( ; (cd=cli.current()); ++cli) - { - ClassDefMutable *cdm = toClassDefMutable(cd); - if (cdm) - { - cdm->setVisited(FALSE); - initBaseClassHierarchy(cd->baseClasses()); - } - } -} - //---------------------------------------------------------------------------- bool hasVisibleRoot(const BaseClassList &bcl) diff --git a/src/util.h b/src/util.h index 9867d9f..19c30c8 100644 --- a/src/util.h +++ b/src/util.h @@ -257,8 +257,6 @@ QCString removeAnonymousScopes(const QCString &s); QCString replaceAnonymousScopes(const QCString &s,const char *replacement=0); -void initClassHierarchy(ClassSDict *cl); - bool hasVisibleRoot(const BaseClassList &bcl); bool classHasVisibleChildren(const ClassDef *cd); bool namespaceHasNestedNamespace(const NamespaceDef *nd); -- cgit v0.12