summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2020-11-20 20:25:08 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2020-11-20 20:25:08 (GMT)
commita5792da8b4bf88a9d93cfd0582cec469747de3b2 (patch)
treefbca47486003fa29ac7b94da94bca88e60d7b8fb /src
parent4211ec287793c0bae93977a9359db9bafef6d2ac (diff)
downloadDoxygen-a5792da8b4bf88a9d93cfd0582cec469747de3b2.zip
Doxygen-a5792da8b4bf88a9d93cfd0582cec469747de3b2.tar.gz
Doxygen-a5792da8b4bf88a9d93cfd0582cec469747de3b2.tar.bz2
Refactoring: removing setVisited/isVisited members
Diffstat (limited to 'src')
-rw-r--r--src/classdef.cpp10
-rw-r--r--src/classdef.h7
-rw-r--r--src/doxygen.cpp100
-rw-r--r--src/filedef.cpp21
-rw-r--r--src/filedef.h12
-rw-r--r--src/namespacedef.cpp21
-rw-r--r--src/namespacedef.h14
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<ClassDefMutable>
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<ClassDefMutable>
QPtrDict<void> *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<ClassDef>
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<int> *templateNames=0
)
{
- masterCd->setVisited(TRUE);
const ArgumentList &formalArgs = masterCd->templateArguments();
for (auto &mni : masterCd->memberNameInfoLinkedMap())
{
@@ -4019,8 +3992,6 @@ static void findBaseClassesForClass(
QDict<int> *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<FileDef>
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<const NamespaceDef> 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 <set>
+
#include "index.h"
#include <qlist.h>
#include <qintdict.h>
@@ -44,6 +46,10 @@ class DirDef;
class FTextStream;
class ClangTUParser;
+// --- Set of files
+
+using FileDefSet = std::set<const FileDef*>;
+
/** 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<NamespaceDefMutable>
virtual LinkedRefMap<const NamespaceDef> getUsedNamespaces() const { return m_usingDirList; }
virtual void addUsingDeclaration(const ClassDef *cd);
virtual LinkedRefMap<const ClassDef> 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<NamespaceDefMutable>
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<NamespaceDef>
{ 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<const NamespaceDef> 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 <set>
+
#include <qstrlist.h>
#include <qdict.h>
#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<const NamespaceDef*>;
+
+
/** 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;