summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2020-11-15 12:41:45 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2020-11-15 12:41:45 (GMT)
commitb82f069a2a11f6bc82c81ee2cda8d30725e95313 (patch)
tree347dd8044c109cf4278f7ac0377174d07cb3f42f /src
parentd3ffd31e89c05d0afa3245ccc68604baeae837a4 (diff)
downloadDoxygen-b82f069a2a11f6bc82c81ee2cda8d30725e95313.zip
Doxygen-b82f069a2a11f6bc82c81ee2cda8d30725e95313.tar.gz
Doxygen-b82f069a2a11f6bc82c81ee2cda8d30725e95313.tar.bz2
Refactoring: remove isVisited/setVisited from index
Diffstat (limited to 'src')
-rw-r--r--src/index.cpp34
-rw-r--r--src/util.cpp35
-rw-r--r--src/util.h2
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);