summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2020-12-31 21:06:11 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2020-12-31 21:06:11 (GMT)
commitb6bf2aa567a12a0c4011470e53b0a1740b6eb796 (patch)
treee5ab649cfa1c8f00107c7bfbc789aa5763c33d02
parent6675be21d5085d97b2167959573bc71e42dd93b8 (diff)
downloadDoxygen-b6bf2aa567a12a0c4011470e53b0a1740b6eb796.zip
Doxygen-b6bf2aa567a12a0c4011470e53b0a1740b6eb796.tar.gz
Doxygen-b6bf2aa567a12a0c4011470e53b0a1740b6eb796.tar.bz2
Refactoring: replace Doxygen::groupSDict by Doxygen::groupLinkedMap
-rw-r--r--src/classdef.cpp12
-rw-r--r--src/classlist.cpp6
-rw-r--r--src/context.cpp54
-rw-r--r--src/context.h20
-rw-r--r--src/definition.cpp33
-rw-r--r--src/definition.h4
-rw-r--r--src/definitionimpl.h10
-rw-r--r--src/docbookgen.cpp13
-rw-r--r--src/docparser.cpp2
-rw-r--r--src/dotgroupcollaboration.cpp61
-rw-r--r--src/doxygen.cpp96
-rw-r--r--src/doxygen.h4
-rw-r--r--src/filedef.cpp10
-rw-r--r--src/groupdef.cpp95
-rw-r--r--src/groupdef.h31
-rw-r--r--src/index.cpp28
-rw-r--r--src/latexgen.cpp25
-rw-r--r--src/pagedef.cpp7
-rw-r--r--src/pagedef.h2
-rw-r--r--src/perlmodgen.cpp13
-rw-r--r--src/rtfgen.cpp8
-rw-r--r--src/searchindex.cpp8
-rw-r--r--src/sqlite3gen.cpp39
-rw-r--r--src/util.cpp11
-rw-r--r--src/xmlgen.cpp37
25 files changed, 226 insertions, 403 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 4492f3e..c573d27 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -3903,15 +3903,15 @@ QCString ClassDefImpl::getOutputFileBase() const
if (!Doxygen::generatingXmlOutput)
{
Definition *scope=0;
- if (inlineGroupedClasses && partOfGroups()!=0)
+ if (inlineGroupedClasses && !partOfGroups().empty())
{
// point to the group that embeds this class
- return partOfGroups()->at(0)->getOutputFileBase();
+ return partOfGroups().front()->getOutputFileBase();
}
- else if (inlineSimpleClasses && m_impl->isSimple && partOfGroups()!=0)
+ else if (inlineSimpleClasses && m_impl->isSimple && !partOfGroups().empty())
{
// point to simple struct inside a group
- return partOfGroups()->at(0)->getOutputFileBase();
+ return partOfGroups().front()->getOutputFileBase();
}
else if (inlineSimpleClasses && m_impl->isSimple && (scope=getOuterScope()))
{
@@ -4940,11 +4940,11 @@ bool ClassDefImpl::isEmbeddedInOuterScope() const
);
// inline because of INLINE_GROUPED_CLASSES=YES ?
- bool b1 = (inlineGroupedClasses && partOfGroups()!=0); // a grouped class
+ bool b1 = (inlineGroupedClasses && !partOfGroups().empty()); // a grouped class
// inline because of INLINE_SIMPLE_STRUCTS=YES ?
bool b2 = (inlineSimpleClasses && m_impl->isSimple && // a simple class
(containerLinkable || // in a documented container
- partOfGroups()!=0 // or part of a group
+ !partOfGroups().empty() // or part of a group
)
);
//printf("%s::isEmbeddedInOuterScope(): inlineGroupedClasses=%d "
diff --git a/src/classlist.cpp b/src/classlist.cpp
index 2998ac4..5351cde 100644
--- a/src/classlist.cpp
+++ b/src/classlist.cpp
@@ -116,15 +116,15 @@ void ClassLinkedRefMap::writeDocumentation(OutputList &ol,const Definition * con
for (const auto &cd : *this)
{
- //printf("%s:writeDocumentation() %p linkable=%d embedded=%d container=%p partOfGroups=%d\n",
+ //printf("%s:writeDocumentation() %p linkable=%d embedded=%d container=%p partOfGroups=%zu\n",
// cd->name().data(),cd->getOuterScope(),cd->isLinkableInProject(),cd->isEmbeddedInOuterScope(),
- // container,cd->partOfGroups() ? cd->partOfGroups()->count() : 0);
+ // container,cd->partOfGroups()->size());
if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
!cd->isAlias() &&
- (container==0 || cd->partOfGroups()==0) // if container==0 -> show as part of the group docs, otherwise only show if not part of a group
+ (container==0 || cd->partOfGroups().empty()) // if container==0 -> show as part of the group docs, otherwise only show if not part of a group
)
{
//printf(" showing class %s\n",cd->name().data());
diff --git a/src/context.cpp b/src/context.cpp
index 8e28077..f597200 100644
--- a/src/context.cpp
+++ b/src/context.cpp
@@ -2339,7 +2339,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
- cd->partOfGroups()==0
+ cd->partOfGroups().empty()
)
{
classList->append(ClassContext::alloc(cd));
@@ -2900,7 +2900,7 @@ class NamespaceContext::Private : public DefinitionContext<NamespaceContext::Pri
if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
- cd->partOfGroups()==0)
+ cd->partOfGroups().empty())
{
classList->append(ClassContext::alloc(cd));
}
@@ -3344,7 +3344,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
- cd->partOfGroups()==0)
+ cd->partOfGroups().empty())
{
classList->append(ClassContext::alloc(cd));
}
@@ -5366,16 +5366,11 @@ class ModuleContext::Private : public DefinitionContext<ModuleContext::Private>
if (!cache.modules)
{
TemplateList *moduleList = TemplateList::alloc();
- if (m_groupDef->getSubGroups())
+ for (const auto &gd : m_groupDef->getSubGroups())
{
- GroupListIterator gli(*m_groupDef->getSubGroups());
- const GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ if (gd->isVisible())
{
- if (gd->isVisible())
- {
- moduleList->append(ModuleContext::alloc(gd));
- }
+ moduleList->append(ModuleContext::alloc(gd));
}
}
cache.modules.reset(moduleList);
@@ -5655,7 +5650,7 @@ class ModuleContext::Private : public DefinitionContext<ModuleContext::Private>
if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
- cd->partOfGroups()==0)
+ cd->partOfGroups().empty())
{
classList->append(ClassContext::alloc(cd));
}
@@ -6395,9 +6390,9 @@ class NestingNodeContext::Private
void addModules(ClassDefSet &visitedClasses)
{
const GroupDef *gd = toGroupDef(m_def);
- if (gd && gd->getSubGroups())
+ if (gd && !gd->getSubGroups().empty())
{
- m_children->addModules(*gd->getSubGroups(),visitedClasses);
+ m_children->addModules(gd->getSubGroups(),visitedClasses);
}
}
private:
@@ -6591,27 +6586,23 @@ class NestingContext::Private : public GenericNodeListContext
addPage(pd,rootOnly,visitedClasses);
}
}
- void addModules(const GroupSDict &groups,ClassDefSet &visitedClasses)
+ void addModules(const GroupLinkedMap &groups,ClassDefSet &visitedClasses)
{
- GroupSDict::Iterator gli(groups);
- const GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : groups)
{
- static bool externalGroups = Config_getBool(EXTERNAL_GROUPS);
+ bool externalGroups = Config_getBool(EXTERNAL_GROUPS);
if (!gd->isASubGroup() && gd->isVisible() &&
- (!gd->isReference() || externalGroups)
+ (!gd->isReference() || externalGroups)
)
{
- append(NestingNodeContext::alloc(m_parent,gd,m_index,m_level,FALSE,FALSE,FALSE,visitedClasses));
+ append(NestingNodeContext::alloc(m_parent,gd.get(),m_index,m_level,FALSE,FALSE,FALSE,visitedClasses));
m_index++;
}
}
}
- void addModules(const GroupList &list,ClassDefSet &visitedClasses)
+ void addModules(const GroupList &groups,ClassDefSet &visitedClasses)
{
- GroupListIterator gli(list);
- const GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : groups)
{
if (gd->isVisible())
{
@@ -6760,7 +6751,7 @@ void NestingContext::addPages(const PageLinkedRefMap &pages,bool rootOnly,ClassD
p->addPages(pages,rootOnly,visitedClasses);
}
-void NestingContext::addModules(const GroupSDict &modules,ClassDefSet &visitedClasses)
+void NestingContext::addModules(const GroupLinkedMap &modules,ClassDefSet &visitedClasses)
{
p->addModules(modules,visitedClasses);
}
@@ -7533,13 +7524,11 @@ class ModuleListContext::Private : public GenericNodeListContext
public:
void addModules()
{
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- const GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
if (!gd->isReference())
{
- append(ModuleContext::alloc(gd));
+ append(ModuleContext::alloc(gd.get()));
}
}
}
@@ -7584,10 +7573,7 @@ class ModuleTreeContext::Private
m_moduleTree.reset(NestingContext::alloc(0,0));
ClassDefSet visitedClasses;
// Add modules
- if (Doxygen::groupSDict)
- {
- m_moduleTree->addModules(*Doxygen::groupSDict,visitedClasses);
- }
+ m_moduleTree->addModules(*Doxygen::groupLinkedMap,visitedClasses);
//%% ModuleList tree:
static bool init=FALSE;
diff --git a/src/context.h b/src/context.h
index 885b811..4baa164 100644
--- a/src/context.h
+++ b/src/context.h
@@ -26,29 +26,33 @@
#include "membergroup.h"
class Definition;
+
class PageDef;
class PageLinkedMap;
class PageLinkedRefMap;
+
class GroupDef;
+class GroupLinkedMap;
+class GroupList;
+
class NamespaceDef;
class NamespaceLinkedMap;
class NamespaceLinkedRefMap;
-class FileDef;
-class FileList;
+
class FileNameLinkedMap;
class ClassLinkedMap;
+class MemberNameInfoLinkedMap;
+
+class FileDef;
+class FileList;
class DirSDict;
class DirDef;
-class GroupSDict;
-class GroupDef;
-class GroupList;
struct IncludeInfo;
class MemberList;
class MemberSDict;
class MemberDef;
struct Argument;
class ArgumentList;
-class MemberNameInfoLinkedMap;
class MemberInfo;
class DotNode;
class DotGfxHierarchyTable;
@@ -552,7 +556,7 @@ class NestingContext : public RefCountedContext, public TemplateListIntf
void addFiles(const FileList &,ClassDefSet &visitedClasses);
void addPages(const PageLinkedMap &pages,bool rootOnly,ClassDefSet &visitedClasses);
void addPages(const PageLinkedRefMap &pages,bool rootOnly,ClassDefSet &visitedClasses);
- void addModules(const GroupSDict &modules,ClassDefSet &visitedClasses);
+ void addModules(const GroupLinkedMap &modules,ClassDefSet &visitedClasses);
void addModules(const GroupList &modules,ClassDefSet &visitedClasses);
void addClassHierarchy(const ClassLinkedMap &clLinkedMap,ClassDefSet &visitedClasses);
void addDerivedClasses(const BaseClassList &bcl,bool hideSuper,ClassDefSet &visitedClasses);
@@ -759,7 +763,7 @@ class ModuleListContext : public RefCountedContext, public TemplateListIntf
virtual int addRef() { return RefCountedContext::addRef(); }
virtual int release() { return RefCountedContext::release(); }
- void addModules(const GroupSDict &);
+ void addModules(const GroupLinkedMap &);
void addModules(const GroupList &);
private:
diff --git a/src/definition.cpp b/src/definition.cpp
index b719388..fa3d521 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -68,7 +68,7 @@ class DefinitionImpl::IMPL
std::unordered_map<std::string,const MemberDef *> sourceRefByDict;
std::unordered_map<std::string,const MemberDef *> sourceRefsDict;
RefItemVector xrefListItems;
- GroupList *partOfGroups = 0;
+ GroupList partOfGroups;
DocInfo *details = 0; // not exported
DocInfo *inbodyDocs = 0; // not exported
@@ -107,7 +107,6 @@ class DefinitionImpl::IMPL
DefinitionImpl::IMPL::~IMPL()
{
- delete partOfGroups;
delete brief;
delete details;
delete body;
@@ -146,7 +145,6 @@ void DefinitionImpl::IMPL::init(const char *df, const char *n)
sourceRefByDict.clear();
sourceRefsDict.clear();
outerScope = Doxygen::globalScope;
- partOfGroups = 0;
hidden = FALSE;
isArtificial = FALSE;
lang = SrcLangExt_Unknown;
@@ -263,20 +261,10 @@ DefinitionImpl::DefinitionImpl(const DefinitionImpl &d)
{
m_impl = new DefinitionImpl::IMPL;
*m_impl = *d.m_impl;
- m_impl->partOfGroups = 0;
m_impl->brief = 0;
m_impl->details = 0;
m_impl->body = 0;
m_impl->inbodyDocs = 0;
- if (d.m_impl->partOfGroups)
- {
- GroupListIterator it(*d.m_impl->partOfGroups);
- GroupDef *gd;
- for (it.toFirst();(gd=it.current());++it)
- {
- makePartOfGroup(gd);
- }
- }
if (d.m_impl->brief)
{
m_impl->brief = new BriefInfo(*d.m_impl->brief);
@@ -1506,10 +1494,9 @@ QCString DefinitionImpl::localName() const
return m_impl->localName;
}
-void DefinitionImpl::makePartOfGroup(GroupDef *gd)
+void DefinitionImpl::makePartOfGroup(const GroupDef *gd)
{
- if (m_impl->partOfGroups==0) m_impl->partOfGroups = new GroupList;
- m_impl->partOfGroups->append(gd);
+ m_impl->partOfGroups.push_back(gd);
}
void DefinitionImpl::setRefItems(const RefItemVector &sli)
@@ -2000,24 +1987,18 @@ FileDef *DefinitionImpl::getBodyDef() const
return m_impl->body ? m_impl->body->fileDef : 0;
}
-GroupList *DefinitionImpl::partOfGroups() const
+const GroupList &DefinitionImpl::partOfGroups() const
{
return m_impl->partOfGroups;
}
bool DefinitionImpl::isLinkableViaGroup() const
{
- GroupList *gl = partOfGroups();
- if (gl)
+ for (const auto &gd : partOfGroups())
{
- GroupListIterator gli(*gl);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- if (gd->isLinkable()) return TRUE;
- }
+ if (gd->isLinkable()) return true;
}
- return FALSE;
+ return false;
}
Definition *DefinitionImpl::getOuterScope() const
diff --git a/src/definition.h b/src/definition.h
index 204e6f6..eb4c42a 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -261,7 +261,7 @@ class Definition
/** Returns the programming language this definition was written in. */
virtual SrcLangExt getLanguage() const = 0;
- virtual GroupList *partOfGroups() const = 0;
+ virtual const GroupList &partOfGroups() const = 0;
virtual bool isLinkableViaGroup() const = 0;
virtual const RefItemVector &xrefListItems() const = 0;
@@ -361,7 +361,7 @@ class DefinitionMutable
// --- actions ----
//-----------------------------------------------------------------------------------
- virtual void makePartOfGroup(GroupDef *gd) = 0;
+ virtual void makePartOfGroup(const GroupDef *gd) = 0;
/*! Add the list of anchors that mark the sections that are found in the
* documentation.
diff --git a/src/definitionimpl.h b/src/definitionimpl.h
index e455dc4..541e346 100644
--- a/src/definitionimpl.h
+++ b/src/definitionimpl.h
@@ -68,7 +68,7 @@ class DefinitionImpl
int getEndBodyLine() const;
FileDef *getBodyDef() const;
SrcLangExt getLanguage() const;
- GroupList *partOfGroups() const;
+ const GroupList &partOfGroups() const;
bool isLinkableViaGroup() const;
const RefItemVector &xrefListItems() const;
const Definition *findInnerCompound(const char *name) const;
@@ -105,7 +105,7 @@ class DefinitionImpl
void writeInlineCode(OutputList &ol,const char *scopeName) const;
void writeSourceRefs(OutputList &ol,const char *scopeName) const;
void writeSourceReffedBy(OutputList &ol,const char *scopeName) const;
- void makePartOfGroup(GroupDef *gd);
+ void makePartOfGroup(const GroupDef *gd);
void writeNavigationPath(OutputList &ol) const;
QCString navigationPathAsString() const;
void writeQuickMemberLinks(OutputList &,const MemberDef *) const;
@@ -187,7 +187,7 @@ class DefinitionMixin : public Base
virtual int getEndBodyLine() const { return m_impl.getEndBodyLine(); }
virtual FileDef *getBodyDef() const { return m_impl.getBodyDef(); }
virtual SrcLangExt getLanguage() const { return m_impl.getLanguage(); }
- virtual GroupList *partOfGroups() const { return m_impl.partOfGroups(); }
+ virtual const GroupList &partOfGroups() const { return m_impl.partOfGroups(); }
virtual bool isLinkableViaGroup() const { return m_impl.isLinkableViaGroup(); }
virtual const RefItemVector &xrefListItems() const { return m_impl.xrefListItems(); }
virtual const Definition *findInnerCompound(const char *name) const { return m_impl.findInnerCompound(name); }
@@ -249,7 +249,7 @@ class DefinitionMixin : public Base
{ m_impl.writeSourceRefs(ol,scopeName); }
virtual void writeSourceReffedBy(OutputList &ol,const char *scopeName) const
{ m_impl.writeSourceReffedBy(ol,scopeName); }
- virtual void makePartOfGroup(GroupDef *gd)
+ virtual void makePartOfGroup(const GroupDef *gd)
{ m_impl.makePartOfGroup(gd); }
virtual void writeNavigationPath(OutputList &ol) const
{ m_impl.writeNavigationPath(ol); }
@@ -393,7 +393,7 @@ class DefinitionAliasMixin : public Base
{ return m_alias->getBodyDef(); }
virtual SrcLangExt getLanguage() const
{ return m_alias->getLanguage(); }
- virtual GroupList *partOfGroups() const
+ virtual const GroupList &partOfGroups() const
{ return m_alias->partOfGroups(); }
virtual bool isLinkableViaGroup() const
{ return m_alias->isLinkableViaGroup(); }
diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp
index f0749be..f810d7b 100644
--- a/src/docbookgen.cpp
+++ b/src/docbookgen.cpp
@@ -484,18 +484,7 @@ DB_GEN_C2("IndexSections " << is)
case isModuleDocumentation:
{
t << "</title>" << endl;
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- bool found=FALSE;
- for (gli.toFirst();(gd=gli.current()) && !found;++gli)
- {
- if (!gd->isReference())
- {
- t << " <xi:include href=\"" << gd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl;
- found=TRUE;
- }
- }
- for (;(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
if (!gd->isReference())
{
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 61326b4..33faf54 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -685,7 +685,7 @@ static bool findDocsForMemberOrCompound(const char *commandName,
const FileDef *fd=0;
const GroupDef *gd=0;
const PageDef *pd=0;
- gd = Doxygen::groupSDict->find(cmdArg);
+ gd = Doxygen::groupLinkedMap->find(cmdArg);
if (gd) // group
{
*pDoc=gd->documentation();
diff --git a/src/dotgroupcollaboration.cpp b/src/dotgroupcollaboration.cpp
index 33ac397..1b632ce 100644
--- a/src/dotgroupcollaboration.cpp
+++ b/src/dotgroupcollaboration.cpp
@@ -60,46 +60,35 @@ void DotGroupCollaboration::buildGraph(const GroupDef* gd)
// hierarchy.
// Write parents
- const GroupList *groups = gd->partOfGroups();
- if ( groups )
+ for (const auto &d : gd->partOfGroups())
{
- GroupListIterator gli(*groups);
- const GroupDef *d;
- for (gli.toFirst();(d=gli.current());++gli)
- {
- DotNode* nnode = m_usedNodes->find(d->name());
- if ( !nnode )
- { // add node
- tmp_url = d->getReference()+"$"+d->getOutputFileBase();
- QCString tooltip = d->briefDescriptionAsTooltip();
- nnode = new DotNode(getNextNodeNumber(), d->groupTitle(), tooltip, tmp_url );
- nnode->markAsVisible();
- m_usedNodes->insert(d->name(), nnode );
- }
- tmp_url = "";
- addEdge( nnode, m_rootNode, DotGroupCollaboration::thierarchy, tmp_url, tmp_url );
+ DotNode* nnode = m_usedNodes->find(d->name());
+ if ( !nnode )
+ { // add node
+ tmp_url = d->getReference()+"$"+d->getOutputFileBase();
+ QCString tooltip = d->briefDescriptionAsTooltip();
+ nnode = new DotNode(getNextNodeNumber(), d->groupTitle(), tooltip, tmp_url );
+ nnode->markAsVisible();
+ m_usedNodes->insert(d->name(), nnode );
}
+ tmp_url = "";
+ addEdge( nnode, m_rootNode, DotGroupCollaboration::thierarchy, tmp_url, tmp_url );
}
// Add subgroups
- if ( gd->getSubGroups() && gd->getSubGroups()->count() )
+ for (const auto &def : gd->getSubGroups())
{
- QListIterator<GroupDef> defli(*gd->getSubGroups());
- const GroupDef *def;
- for (;(def=defli.current());++defli)
- {
- DotNode* nnode = m_usedNodes->find(def->name());
- if ( !nnode )
- { // add node
- tmp_url = def->getReference()+"$"+def->getOutputFileBase();
- QCString tooltip = def->briefDescriptionAsTooltip();
- nnode = new DotNode(getNextNodeNumber(), def->groupTitle(), tooltip, tmp_url );
- nnode->markAsVisible();
- m_usedNodes->insert(def->name(), nnode );
- }
- tmp_url = "";
- addEdge( m_rootNode, nnode, DotGroupCollaboration::thierarchy, tmp_url, tmp_url );
+ DotNode* nnode = m_usedNodes->find(def->name());
+ if ( !nnode )
+ { // add node
+ tmp_url = def->getReference()+"$"+def->getOutputFileBase();
+ QCString tooltip = def->briefDescriptionAsTooltip();
+ nnode = new DotNode(getNextNodeNumber(), def->groupTitle(), tooltip, tmp_url );
+ nnode->markAsVisible();
+ m_usedNodes->insert(def->name(), nnode );
}
+ tmp_url = "";
+ addEdge( m_rootNode, nnode, DotGroupCollaboration::thierarchy, tmp_url, tmp_url );
}
//=======================
@@ -204,12 +193,8 @@ void DotGroupCollaboration::addCollaborationMember(
const Definition* def, QCString& url, EdgeType eType )
{
// Create group nodes
- if ( !def->partOfGroups() )
- return;
- GroupListIterator gli(*def->partOfGroups());
- GroupDef *d;
QCString tmp_str;
- for (;(d=gli.current());++gli)
+ for (const auto &d : def->partOfGroups())
{
DotNode* nnode = m_usedNodes->find(d->name());
if ( nnode != m_rootNode )
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index b438cfa..3a4c5a3 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -123,7 +123,7 @@ NamespaceLinkedMap *Doxygen::namespaceLinkedMap = 0;
MemberNameLinkedMap *Doxygen::memberNameLinkedMap = 0;
MemberNameLinkedMap *Doxygen::functionNameLinkedMap = 0;
FileNameLinkedMap *Doxygen::inputNameLinkedMap = 0;
-GroupSDict *Doxygen::groupSDict = 0;
+GroupLinkedMap *Doxygen::groupLinkedMap = 0;
PageLinkedMap *Doxygen::pageLinkedMap = 0;
PageLinkedMap *Doxygen::exampleLinkedMap = 0;
StringDict Doxygen::aliasDict(257); // aliases
@@ -334,7 +334,7 @@ static void addRelatedPage(Entry *root)
GroupDef *gd=0;
for (const Grouping &g : root->groups)
{
- if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname))) break;
+ if (!g.groupname.isEmpty() && (gd=Doxygen::groupLinkedMap->find(g.groupname))) break;
}
//printf("---> addRelatedPage() %s gd=%p\n",root->name.data(),gd);
QCString doc;
@@ -375,7 +375,7 @@ static void buildGroupListFiltered(const Entry *root,bool additional, bool inclu
if ((root->groupDocType==Entry::GROUPDOC_NORMAL && !additional) ||
(root->groupDocType!=Entry::GROUPDOC_NORMAL && additional))
{
- GroupDef *gd = Doxygen::groupSDict->find(root->name);
+ GroupDef *gd = Doxygen::groupLinkedMap->find(root->name);
//printf("Processing group '%s':'%s' add=%d ext=%d gd=%p\n",
// root->type.data(),root->name.data(),additional,includeExternal,gd);
@@ -402,19 +402,22 @@ static void buildGroupListFiltered(const Entry *root,bool additional, bool inclu
{
if (root->tagInfo())
{
- gd = createGroupDef(root->fileName,root->startLine,root->name,root->type,root->tagInfo()->fileName);
+ gd = Doxygen::groupLinkedMap->add(root->name,
+ std::unique_ptr<GroupDef>(
+ createGroupDef(root->fileName,root->startLine,root->name,root->type,root->tagInfo()->fileName)));
gd->setReference(root->tagInfo()->tagName);
}
else
{
- gd = createGroupDef(root->fileName,root->startLine,root->name,root->type);
+ gd = Doxygen::groupLinkedMap->add(root->name,
+ std::unique_ptr<GroupDef>(
+ createGroupDef(root->fileName,root->startLine,root->name,root->type)));
}
gd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
// allow empty docs for group
gd->setDocumentation(!root->doc.isEmpty() ? root->doc : QCString(" "),root->docFile,root->docLine,FALSE);
gd->setInbodyDocumentation( root->inbodyDocs, root->inbodyFile, root->inbodyLine );
gd->addSectionsToDefinition(root->anchors);
- Doxygen::groupSDict->append(root->name,gd);
gd->setRefItems(root->sli);
gd->setLanguage(root->lang);
}
@@ -444,7 +447,7 @@ static void findGroupScope(const Entry *root)
root->parent() && !root->parent()->name.isEmpty())
{
GroupDef *gd;
- if ((gd=Doxygen::groupSDict->find(root->name)))
+ if ((gd=Doxygen::groupLinkedMap->find(root->name)))
{
QCString scope = root->parent()->name;
if (root->parent()->section==Entry::PACKAGEDOC_SEC)
@@ -471,7 +474,7 @@ static void organizeSubGroupsFiltered(const Entry *root,bool additional)
(root->groupDocType!=Entry::GROUPDOC_NORMAL && additional))
{
GroupDef *gd;
- if ((gd=Doxygen::groupSDict->find(root->name)))
+ if ((gd=Doxygen::groupLinkedMap->find(root->name)))
{
//printf("adding %s to group %s\n",root->name.data(),gd->name().data());
addGroupToGroups(root,gd);
@@ -526,7 +529,7 @@ static void buildFileList(const Entry *root)
for (const Grouping &g : root->groups)
{
GroupDef *gd=0;
- if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname)))
+ if (!g.groupname.isEmpty() && (gd=Doxygen::groupLinkedMap->find(g.groupname)))
{
gd->addFile(fd);
fd->makePartOfGroup(gd);
@@ -1301,19 +1304,19 @@ void distributeClassGroupRelations()
{
//printf("Checking %s\n",cd->name().data());
// distribute the group to nested classes as well
- if (visitedClasses.find(cd.get())==visitedClasses.end() && cd->partOfGroups()!=0)
+ if (visitedClasses.find(cd.get())==visitedClasses.end() && !cd->partOfGroups().empty())
{
//printf(" Candidate for merging\n");
- GroupDef *gd = cd->partOfGroups()->at(0);
+ const GroupDef *gd = cd->partOfGroups().front();
for (const auto &ncd : cd->getClasses())
{
ClassDefMutable *ncdm = toClassDefMutable(ncd);
- if (ncdm && ncdm->partOfGroups()==0)
+ if (ncdm && ncdm->partOfGroups().empty())
{
//printf(" Adding %s to group '%s'\n",ncd->name().data(),
// gd->groupTitle());
ncdm->makePartOfGroup(gd);
- gd->addClass(ncdm);
+ const_cast<GroupDef*>(gd)->addClass(ncdm);
}
}
visitedClasses.insert(cd.get()); // only visit every class once
@@ -1362,16 +1365,10 @@ static ClassDefMutable *createTagLessInstance(const ClassDef *rootCd,const Class
cd->setFileDef(fd);
fd->insertClass(cd);
}
- GroupList *groups = rootCd->partOfGroups();
- if ( groups!=0 )
+ for (const auto &gd : rootCd->partOfGroups())
{
- GroupListIterator gli(*groups);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- cd->makePartOfGroup(gd);
- gd->addClass(cd);
- }
+ cd->makePartOfGroup(gd);
+ const_cast<GroupDef*>(gd)->addClass(cd);
}
MemberList *ml = templ->getMemberList(MemberListType_pubAttribs);
@@ -1813,7 +1810,7 @@ static void findUsingDirectives(const Entry *root)
for (const Grouping &g : root->groups)
{
GroupDef *gd=0;
- if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname)))
+ if (!g.groupname.isEmpty() && (gd=Doxygen::groupLinkedMap->find(g.groupname)))
gd->addNamespace(nd);
}
@@ -3504,7 +3501,7 @@ static void buildFunctionList(const Entry *root)
GroupDef *gd=0;
if (!root->groups.empty() && !root->groups.front().groupname.isEmpty())
{
- gd = Doxygen::groupSDict->find(root->groups.front().groupname);
+ gd = Doxygen::groupLinkedMap->find(root->groups.front().groupname);
}
//printf("match!\n");
//printf("mnd=%p rnd=%p nsName=%s rnsName=%s\n",mnd,rnd,nsName.data(),rnsName.data());
@@ -4904,9 +4901,7 @@ static void computeMemberReferences()
ndm->computeAnchors();
}
}
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
gd->computeAnchors();
}
@@ -4942,9 +4937,7 @@ static void addListReferences()
}
}
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
gd->addListReferences();
}
@@ -8038,9 +8031,7 @@ static void sortMemberLists()
}
// sort group member lists
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
gd->sortMemberLists();
}
@@ -8111,9 +8102,7 @@ static void countMembers()
}
}
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
gd->countMembers();
}
@@ -8248,9 +8237,7 @@ static void addMembersToMemberGroup()
}
}
// for each group
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
gd->addMembersToMemberGroup();
}
@@ -8287,9 +8274,7 @@ static void distributeMemberGroupDocumentation()
}
}
// for each group
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
gd->distributeMemberGroupDocumentation();
}
@@ -8326,9 +8311,7 @@ static void findSectionsInDocumentation()
}
}
// for each group
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
gd->findSectionsInDocumentation();
}
@@ -8966,9 +8949,7 @@ static void generateExampleDocs()
static void generateGroupDocs()
{
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
if (!gd->isReference())
{
@@ -10170,8 +10151,7 @@ void initDoxygen()
#endif
Doxygen::memberNameLinkedMap = new MemberNameLinkedMap;
Doxygen::functionNameLinkedMap = new MemberNameLinkedMap;
- Doxygen::groupSDict = new GroupSDict(17);
- Doxygen::groupSDict->setAutoDelete(TRUE);
+ Doxygen::groupLinkedMap = new GroupLinkedMap;
Doxygen::namespaceLinkedMap = new NamespaceLinkedMap;
Doxygen::classLinkedMap = new ClassLinkedMap;
Doxygen::hiddenClassLinkedMap = new ClassLinkedMap;
@@ -10231,7 +10211,7 @@ void cleanUpDoxygen()
delete Doxygen::memberNameLinkedMap;
delete Doxygen::functionNameLinkedMap;
- delete Doxygen::groupSDict;
+ delete Doxygen::groupLinkedMap;
delete Doxygen::namespaceLinkedMap;
delete Doxygen::directories;
@@ -10793,9 +10773,7 @@ static void writeTagFile()
}
}
// for each group
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
if (gd->isLinkableInProject()) gd->writeTagFile(tagFile);
}
@@ -11642,10 +11620,12 @@ void parseInput()
if (Config_getBool(SORT_GROUP_NAMES))
{
- Doxygen::groupSDict->sort();
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ std::sort(Doxygen::groupLinkedMap->begin(),
+ Doxygen::groupLinkedMap->end(),
+ [](const auto &g1,const auto &g2)
+ { return qstrcmp(g1->groupTitle(),g2->groupTitle())<0; });
+
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
gd->sortSubGroups();
}
diff --git a/src/doxygen.h b/src/doxygen.h
index 7fd5180..dc1b7bb 100644
--- a/src/doxygen.h
+++ b/src/doxygen.h
@@ -45,7 +45,7 @@ class BufStr;
class CiteDict;
class MemberDef;
class GroupDef;
-class GroupSDict;
+class GroupLinkedMap;
class FileDef;
class ClassDef;
class ClassLinkedMap;
@@ -113,7 +113,7 @@ class Doxygen
static MemberNameLinkedMap *memberNameLinkedMap;
static MemberNameLinkedMap *functionNameLinkedMap;
static StringUnorderedMap namespaceAliasMap;
- static GroupSDict *groupSDict;
+ static GroupLinkedMap *groupLinkedMap;
static NamespaceLinkedMap *namespaceLinkedMap;
static StringDict tagDestinationDict;
static StringDict aliasDict;
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 49fb4d9..3fd542f 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -1758,20 +1758,18 @@ static void addDirsAsGroups(Directory *root,GroupDef *parent,int level)
GroupDef *gd=0;
if (root->kind()==DirEntry::Dir)
{
- gd = createGroupDef("[generated]",
+ gd = Doxygen::groupLinkedMap->add(root->path(),
+ std::unique_ptr<GroupDef>(
+ createGroupDef("[generated]",
1,
root->path(), // name
root->name() // title
- );
+ )));
if (parent)
{
parent->addGroup(gd);
gd->makePartOfGroup(parent);
}
- else
- {
- Doxygen::groupSDict->append(root->path(),gd);
- }
}
QListIterator<DirEntry> dli(root->children());
DirEntry *de;
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index df9b6eb..2d6663f 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -103,7 +103,7 @@ class GroupDefImpl : public DefinitionMixin<GroupDef>
virtual FileList * getFiles() const { return m_fileList; }
virtual const ClassLinkedRefMap &getClasses() const { return m_classes; }
virtual const NamespaceLinkedRefMap &getNamespaces() const { return m_namespaces; }
- virtual GroupList * getSubGroups() const { return m_groupList; }
+ virtual const GroupList &getSubGroups() const { return m_groups; }
virtual const PageLinkedRefMap &getPages() const { return m_pages; }
virtual const DirList & getDirs() const { return m_dirList; }
virtual const PageLinkedRefMap &getExamples() const { return m_examples; }
@@ -142,7 +142,7 @@ class GroupDefImpl : public DefinitionMixin<GroupDef>
FileList * m_fileList; // list of files in the group
ClassLinkedRefMap m_classes; // list of classes in the group
NamespaceLinkedRefMap m_namespaces; // list of namespaces in the group
- GroupList * m_groupList; // list of sub groups.
+ GroupList m_groups; // list of sub groups.
PageLinkedRefMap m_pages; // list of pages in the group
PageLinkedRefMap m_examples; // list of examples in the group
DirList m_dirList; // list of directories in the group
@@ -168,7 +168,6 @@ GroupDefImpl::GroupDefImpl(const char *df,int dl,const char *na,const char *t,
const char *refFileName) : DefinitionMixin(df,dl,1,na)
{
m_fileList = new FileList;
- m_groupList = new GroupList;
if (refFileName)
{
m_fileName=stripExtension(refFileName);
@@ -189,7 +188,6 @@ GroupDefImpl::GroupDefImpl(const char *df,int dl,const char *na,const char *t,
GroupDefImpl::~GroupDefImpl()
{
delete m_fileList;
- delete m_groupList;
delete m_allMemberList;
}
@@ -548,16 +546,11 @@ bool GroupDefImpl::findGroup(const GroupDef *def) const
{
return TRUE;
}
- else if (m_groupList)
+ for (const auto &gd : m_groups)
{
- GroupListIterator it(*m_groupList);
- GroupDef *gd;
- for (;(gd=it.current());++it)
+ if (gd->findGroup(def))
{
- if (gd->findGroup(def))
- {
- return TRUE;
- }
+ return TRUE;
}
}
return FALSE;
@@ -569,13 +562,12 @@ void GroupDefImpl::addGroup(const GroupDef *def)
//if (Config_getBool(SORT_MEMBER_DOCS))
// groupList->inSort(def);
//else
- m_groupList->append(def);
+ m_groups.push_back(def);
}
bool GroupDefImpl::isASubGroup() const
{
- GroupList *groups = partOfGroups();
- return groups!=0 && groups->count()!=0;
+ return !partOfGroups().empty();
}
void GroupDefImpl::countMembers()
@@ -599,7 +591,7 @@ size_t GroupDefImpl::numDocMembers() const
return m_fileList->count()+
m_classes.size()+
m_namespaces.size()+
- m_groupList->count()+
+ m_groups.size()+
m_allMemberList->count()+
m_pages.size()+
m_examples.size();
@@ -679,7 +671,7 @@ void GroupDefImpl::writeTagFile(FTextStream &tagFile)
break;
case LayoutDocEntry::GroupDirs:
{
- for(const auto &dd : m_dirList)
+ for (const auto &dd : m_dirList)
{
if (dd->isLinkableInProject())
{
@@ -690,16 +682,11 @@ void GroupDefImpl::writeTagFile(FTextStream &tagFile)
break;
case LayoutDocEntry::GroupNestedGroups:
{
- if (m_groupList)
+ for (const auto &gd : m_groups)
{
- QListIterator<GroupDef> it(*m_groupList);
- GroupDef *gd;
- for (;(gd=it.current());++it)
+ if (gd->isVisible())
{
- if (gd->isVisible())
- {
- tagFile << " <subgroup>" << convertToXML(gd->name()) << "</subgroup>" << endl;
- }
+ tagFile << " <subgroup>" << convertToXML(gd->name()) << "</subgroup>" << endl;
}
}
}
@@ -892,14 +879,9 @@ void GroupDefImpl::writeNestedGroups(OutputList &ol,const QCString &title)
{
// write list of groups
int count=0;
- if (m_groupList->count()>0)
+ for (const auto &gd : m_groups)
{
- QListIterator<GroupDef> it(*m_groupList);
- GroupDef *gd;
- for (;(gd=it.current());++it)
- {
- if (gd->isVisible()) count++;
- }
+ if (gd->isVisible()) count++;
}
if (count>0)
{
@@ -907,13 +889,7 @@ void GroupDefImpl::writeNestedGroups(OutputList &ol,const QCString &title)
ol.parseText(title);
ol.endMemberHeader();
ol.startMemberList();
- if (Config_getBool(SORT_GROUP_NAMES))
- {
- m_groupList->sort();
- }
- QListIterator<GroupDef> it(*m_groupList);
- GroupDef *gd;
- for (;(gd=it.current());++it)
+ for (const auto &gd : m_groups)
{
if (gd->isVisible())
{
@@ -1070,7 +1046,7 @@ void GroupDefImpl::writeSummaryLinks(OutputList &ol) const
if ((lde->kind()==LayoutDocEntry::GroupClasses && m_classes.declVisible()) ||
(lde->kind()==LayoutDocEntry::GroupNamespaces && m_namespaces.declVisible()) ||
(lde->kind()==LayoutDocEntry::GroupFiles && m_fileList->count()>0) ||
- (lde->kind()==LayoutDocEntry::GroupNestedGroups && m_groupList->count()>0) ||
+ (lde->kind()==LayoutDocEntry::GroupNestedGroups && !m_groups.empty()>0) ||
(lde->kind()==LayoutDocEntry::GroupDirs && !m_dirList.empty())
)
{
@@ -1335,7 +1311,6 @@ void GroupDefImpl::writeQuickMemberLinks(OutputList &ol,const MemberDef *current
}
}
}
-
ol.writeString(" </table>\n");
ol.writeString(" </div>\n");
}
@@ -1348,11 +1323,11 @@ void addClassToGroups(const Entry *root,ClassDef *cd)
{
for (const Grouping &g : root->groups)
{
- GroupDef *gd=0;
- if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname)))
+ GroupDef *gd = Doxygen::groupLinkedMap->find(g.groupname);
+ if (gd && gd->addClass(cd))
{
ClassDefMutable *cdm = toClassDefMutable(cd);
- if (cdm && gd->addClass(cdm))
+ if (cdm)
{
cdm->makePartOfGroup(gd);
}
@@ -1366,17 +1341,14 @@ void addNamespaceToGroups(const Entry *root,NamespaceDef *nd)
//printf("root->groups.size()=%d\n",root->groups.size());
for (const Grouping &g : root->groups)
{
- GroupDef *gd=0;
+ GroupDef *gd = Doxygen::groupLinkedMap->find(g.groupname);
//printf("group '%s'\n",s->data());
- if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname)))
+ if (gd && gd->addNamespace(nd))
{
- if (gd->addNamespace(nd))
+ NamespaceDefMutable *ndm = toNamespaceDefMutable(nd);
+ if (ndm)
{
- NamespaceDefMutable *ndm = toNamespaceDefMutable(nd);
- if (ndm)
- {
- ndm->makePartOfGroup(gd);
- }
+ ndm->makePartOfGroup(gd);
}
//printf("Namespace %s: in group %s\n",nd->name().data(),s->data());
}
@@ -1388,9 +1360,9 @@ void addDirToGroups(const Entry *root,DirDef *dd)
//printf("*** root->groups.size()=%d\n",root->groups.size());
for (const Grouping &g : root->groups)
{
- GroupDef *gd=0;
+ GroupDef *gd = Doxygen::groupLinkedMap->find(g.groupname);
//printf("group '%s'\n",g->groupname.data());
- if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname)))
+ if (gd)
{
gd->addDir(dd);
dd->makePartOfGroup(gd);
@@ -1404,8 +1376,8 @@ void addGroupToGroups(const Entry *root,GroupDef *subGroup)
//printf("addGroupToGroups for %s groups=%d\n",root->name.data(),root->groups.size());
for (const Grouping &g : root->groups)
{
- GroupDef *gd=0;
- if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname)))
+ GroupDef *gd = Doxygen::groupLinkedMap->find(g.groupname);
+ if (gd)
{
if (gd==subGroup)
{
@@ -1439,7 +1411,7 @@ void addMemberToGroups(const Entry *root,MemberDef *md)
{
GroupDef *gd=0;
if (!g.groupname.isEmpty() &&
- (gd=Doxygen::groupSDict->find(g.groupname)) &&
+ (gd=Doxygen::groupLinkedMap->find(g.groupname)) &&
g.pri >= pri)
{
if (fgd && gd!=fgd && g.pri==pri)
@@ -1538,8 +1510,8 @@ void addExampleToGroups(const Entry *root,PageDef *eg)
{
for (const Grouping &g : root->groups)
{
- GroupDef *gd=0;
- if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname)))
+ GroupDef *gd = Doxygen::groupLinkedMap->find(g.groupname);
+ if (gd)
{
gd->addExample(eg);
eg->makePartOfGroup(gd);
@@ -1749,7 +1721,10 @@ void GroupDefImpl::removeMemberFromList(MemberListType lt,MemberDef *md)
void GroupDefImpl::sortSubGroups()
{
- m_groupList->sort();
+ std::sort(m_groups.begin(),
+ m_groups.end(),
+ [](const auto &g1,const auto &g2)
+ { return qstrcmp(g1->groupTitle(),g2->groupTitle())<0; });
}
bool GroupDefImpl::isLinkableInProject() const
diff --git a/src/groupdef.h b/src/groupdef.h
index 98a40f1..2ab8231 100644
--- a/src/groupdef.h
+++ b/src/groupdef.h
@@ -25,6 +25,7 @@
#include "dirdef.h"
#include "layout.h"
#include "membergroup.h"
+#include "linkedmap.h"
class MemberList;
class FileList;
@@ -98,7 +99,7 @@ class GroupDef : public DefinitionMutable, public Definition
virtual FileList * getFiles() const = 0;
virtual const ClassLinkedRefMap &getClasses() const = 0;
virtual const NamespaceLinkedRefMap &getNamespaces() const = 0;
- virtual GroupList * getSubGroups() const = 0;
+ virtual const GroupList &getSubGroups() const = 0;
virtual const PageLinkedRefMap &getPages() const = 0;
virtual const DirList & getDirs() const = 0;
virtual const PageLinkedRefMap &getExamples() const = 0;
@@ -117,36 +118,12 @@ const GroupDef *toGroupDef(const Definition *d);
// ------------------
-
-/** A sorted dictionary of GroupDef objects. */
-class GroupSDict : public SDict<GroupDef>
+class GroupLinkedMap : public LinkedMap<GroupDef>
{
- public:
- GroupSDict(uint size) : SDict<GroupDef>(size) {}
- virtual ~GroupSDict() {}
- private:
- int compareValues(const GroupDef *item1,const GroupDef *item2) const
- {
- return qstrcmp(item1->groupTitle(),item2->groupTitle());
- }
};
-/** A list of GroupDef objects. */
-class GroupList : public QList<GroupDef>
+class GroupList : public std::vector<const GroupDef *>
{
- public:
- int compareValues(const GroupDef *item1,const GroupDef *item2) const
- {
- return qstrcmp(item1->groupTitle(),item2->groupTitle());
- }
-};
-
-/** An iterator for GroupDef objects in a GroupList. */
-class GroupListIterator : public QListIterator<GroupDef>
-{
- public:
- GroupListIterator(const GroupList &l) : QListIterator<GroupDef>(l) {}
- virtual ~GroupListIterator() {}
};
void addClassToGroups (const Entry *root,ClassDef *cd);
diff --git a/src/index.cpp b/src/index.cpp
index 3d3448d..f8ee056 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -398,7 +398,7 @@ void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part,
{
for (const auto &cd : def->getClasses())
{
- if (cd->isLinkable() && (cd->partOfGroups()==0 || def->definitionType()==Definition::TypeGroup))
+ if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==Definition::TypeGroup))
{
static bool inlineSimpleStructs = Config_getBool(INLINE_SIMPLE_STRUCTS);
bool isNestedClass = def->definitionType()==Definition::TypeClass;
@@ -1569,7 +1569,7 @@ static void writeClassTree(const ListType &cl,FTVHelp *ftv,bool addToIndex,bool
addMembersToIndex(cd,LayoutDocManager::Class,
cd->displayName(FALSE),
cd->anchor(),
- addToIndex && cd->partOfGroups()==0 && !cd->isSimple());
+ addToIndex && cd->partOfGroups().empty() && !cd->isSimple());
}
if (count>0)
{
@@ -3654,9 +3654,7 @@ static void writePageIndex(OutputList &ol)
static int countGroups()
{
int count=0;
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
if (!gd->isReference())
{
@@ -3738,7 +3736,7 @@ void writeGraphInfo(OutputList &ol)
/*!
* write groups as hierarchical trees
*/
-static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp* ftv, bool addToIndex)
+static void writeGroupTreeNode(OutputList &ol, const GroupDef *gd, int level, FTVHelp* ftv, bool addToIndex)
{
//bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
//bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
@@ -3760,8 +3758,8 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp*
{
//printf("gd->name()=%s #members=%d\n",gd->name().data(),gd->countMembers());
// write group info
- bool hasSubGroups = gd->getSubGroups()->count()>0;
- bool hasSubPages = !gd->getPages().empty();
+ bool hasSubGroups = !gd->getSubGroups().empty();
+ bool hasSubPages = !gd->getPages().empty();
size_t numSubItems = 0;
if (1 /*Config_getBool(TOC_EXPAND)*/)
{
@@ -3859,7 +3857,7 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp*
{
//bool nestedClassInSameGroup =
// cd->getOuterScope() && cd->getOuterScope()->definitionType()==Definition::TypeClass &&
- // cd->getOuterScope()->partOfGroups()!=0 && cd->getOuterScope()->partOfGroups()->contains(gd);
+ // cd->getOuterScope()->partOfGroups().empty() && cd->getOuterScope()->partOfGroups()->contains(gd);
//printf("===== GroupClasses: %s visible=%d nestedClassInSameGroup=%d\n",cd->name().data(),cd->isVisible(),nestedClassInSameGroup);
if (cd->isVisible() /*&& !nestedClassInSameGroup*/)
{
@@ -3949,12 +3947,10 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp*
}
else if (lde->kind()==LayoutDocEntry::GroupNestedGroups)
{
- if (gd->getSubGroups()->count()>0)
+ if (!gd->getSubGroups().empty())
{
startIndexHierarchy(ol,level+1);
- QListIterator<GroupDef> gli(*gd->getSubGroups());
- GroupDef *subgd = 0;
- for (gli.toFirst();(subgd=gli.current());++gli)
+ for (const auto &subgd : gd->getSubGroups())
{
writeGroupTreeNode(ol,subgd,level+1,ftv,addToIndex);
}
@@ -3985,11 +3981,9 @@ static void writeGroupHierarchy(OutputList &ol, FTVHelp* ftv,bool addToIndex)
ol.disable(OutputGenerator::Html);
}
startIndexHierarchy(ol,0);
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
- writeGroupTreeNode(ol,gd,0,ftv,addToIndex);
+ writeGroupTreeNode(ol,gd.get(),0,ftv,addToIndex);
}
endIndexHierarchy(ol,0);
if (ftv)
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 7db49d9..485b513 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -998,9 +998,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
break;
case isModuleDocumentation:
{
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
if (!gd->isReference())
{
@@ -1144,24 +1142,17 @@ void LatexGenerator::endIndexSection(IndexSections is)
break;
case isModuleDocumentation:
{
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
bool found=FALSE;
- for (gli.toFirst();(gd=gli.current()) && !found;++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
if (!gd->isReference())
{
- t << "}\n\\input{" << gd->getOutputFileBase() << "}\n";
- found=TRUE;
- }
- }
- for (;(gd=gli.current());++gli)
- {
- if (!gd->isReference())
- {
- //if (compactLatex) t << "\\input"; else t << "\\include";
- t << "\\include";
- t << "{" << gd->getOutputFileBase() << "}\n";
+ if (!found)
+ {
+ t << "}\n";
+ found=TRUE;
+ }
+ t << "\\input{" << gd->getOutputFileBase() << "}\n";
}
}
}
diff --git a/src/pagedef.cpp b/src/pagedef.cpp
index 63c0803..d3cf823 100644
--- a/src/pagedef.cpp
+++ b/src/pagedef.cpp
@@ -45,7 +45,7 @@ class PageDefImpl : public DefinitionMixin<PageDef>
virtual QCString anchor() const { return QCString(); }
virtual void findSectionsInDocumentation();
virtual QCString title() const { return m_title; }
- virtual GroupDef * getGroupDef() const;
+ virtual const GroupDef * getGroupDef() const;
virtual const PageLinkedRefMap &getSubPages() const { return m_subPages; }
virtual void addInnerCompound(const Definition *d);
virtual bool visibleInIndex() const;
@@ -101,10 +101,9 @@ void PageDefImpl::findSectionsInDocumentation()
docFindSections(documentation(),this,docFile());
}
-GroupDef *PageDefImpl::getGroupDef() const
+const GroupDef *PageDefImpl::getGroupDef() const
{
- GroupList *groups = partOfGroups();
- return groups!=0 ? groups->getFirst() : 0;
+ return !partOfGroups().empty() ? partOfGroups().front() : 0;
}
QCString PageDefImpl::getOutputFileBase() const
diff --git a/src/pagedef.h b/src/pagedef.h
index d651fa6..c0a7bf0 100644
--- a/src/pagedef.h
+++ b/src/pagedef.h
@@ -42,7 +42,7 @@ class PageDef : public DefinitionMutable, public Definition
virtual QCString anchor() const = 0;
virtual void findSectionsInDocumentation() = 0;
virtual QCString title() const = 0;
- virtual GroupDef * getGroupDef() const = 0;
+ virtual const GroupDef *getGroupDef() const = 0;
virtual const PageLinkedRefMap &getSubPages() const = 0;
virtual void addInnerCompound(const Definition *) = 0;
virtual bool visibleInIndex() const = 0;
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index da9121f..854b3df 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -2131,13 +2131,10 @@ void PerlModGenerator::generatePerlModForGroup(const GroupDef *gd)
m_output.closeList();
}
- GroupList *gl = gd->getSubGroups();
- if (gl)
+ if (!gd->getSubGroups().empty())
{
m_output.openList("groups");
- GroupListIterator gli(*gl);
- const GroupDef *sgd;
- for (gli.toFirst();(sgd=gli.current());++gli)
+ for (const auto &sgd : gd->getSubGroups())
m_output.openHash()
.addFieldQuotedString("title", sgd->groupTitle())
.closeHash();
@@ -2210,11 +2207,9 @@ bool PerlModGenerator::generatePerlModOutput()
m_output.closeList();
m_output.openList("groups");
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- const GroupDef *gd;
- for (;(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
- generatePerlModForGroup(gd);
+ generatePerlModForGroup(gd.get());
}
m_output.closeList();
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index d1c2eaf..a7cb1e3 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -471,9 +471,7 @@ void RTFGenerator::startIndexSection(IndexSections is)
case isModuleDocumentation:
{
//Module Documentation
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
if (!gd->isReference())
{
@@ -741,10 +739,8 @@ void RTFGenerator::endIndexSection(IndexSections is)
break;
case isModuleDocumentation:
{
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
t << "{\\tc \\v " << theTranslator->trModuleDocumentation() << "}"<< endl;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
if (!gd->isReference())
{
diff --git a/src/searchindex.cpp b/src/searchindex.cpp
index 7cb3afa..89f1681 100644
--- a/src/searchindex.cpp
+++ b/src/searchindex.cpp
@@ -837,9 +837,7 @@ void createJavaScriptSearchIndex()
}
// index groups
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
if (gd->isLinkable())
{
@@ -848,8 +846,8 @@ void createJavaScriptSearchIndex()
{
char letter[MAX_UTF8_CHAR_SIZE];
getUtf8Char(title,letter,CaseModifier::ToLower);
- g_searchIndexInfo[SEARCH_INDEX_ALL].add(letter,gd);
- g_searchIndexInfo[SEARCH_INDEX_GROUPS].add(letter,gd);
+ g_searchIndexInfo[SEARCH_INDEX_ALL].add(letter,gd.get());
+ g_searchIndexInfo[SEARCH_INDEX_GROUPS].add(letter,gd.get());
}
}
}
diff --git a/src/sqlite3gen.cpp b/src/sqlite3gen.cpp
index a9b701a..7c7e77b 100644
--- a/src/sqlite3gen.cpp
+++ b/src/sqlite3gen.cpp
@@ -1293,20 +1293,15 @@ static void writeInnerPages(const PageLinkedRefMap &pl, struct Refid outer_refid
}
}
-static void writeInnerGroups(const GroupList *gl, struct Refid outer_refid)
+static void writeInnerGroups(const GroupList &gl, struct Refid outer_refid)
{
- if (gl)
+ for (const auto &sgd : gl)
{
- GroupListIterator gli(*gl);
- const GroupDef *sgd;
- for (gli.toFirst();(sgd=gli.current());++gli)
- {
- struct Refid inner_refid = insertRefid(sgd->getOutputFileBase());
+ struct Refid inner_refid = insertRefid(sgd->getOutputFileBase());
- bindIntParameter(contains_insert,":inner_rowid", inner_refid.rowid);
- bindIntParameter(contains_insert,":outer_rowid", outer_refid.rowid);
- step(contains_insert);
- }
+ bindIntParameter(contains_insert,":inner_rowid", inner_refid.rowid);
+ bindIntParameter(contains_insert,":outer_rowid", outer_refid.rowid);
+ step(contains_insert);
}
}
@@ -2539,21 +2534,17 @@ void generateSqlite3()
}
// + groups
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- const GroupDef *gd;
- for (;(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
msg("Generating Sqlite3 output for group %s\n",gd->name().data());
- generateSqlite3ForGroup(gd);
+ generateSqlite3ForGroup(gd.get());
}
// + page
+ for (const auto &pd : *Doxygen::pageLinkedMap)
{
- for (const auto &pd : *Doxygen::pageLinkedMap)
- {
- msg("Generating Sqlite3 output for page %s\n",pd->name().data());
- generateSqlite3ForPage(pd.get(),FALSE);
- }
+ msg("Generating Sqlite3 output for page %s\n",pd->name().data());
+ generateSqlite3ForPage(pd.get(),FALSE);
}
// + dirs
@@ -2568,12 +2559,10 @@ void generateSqlite3()
}
// + examples
+ for (const auto &pd : *Doxygen::exampleLinkedMap)
{
- for (const auto &pd : *Doxygen::exampleLinkedMap)
- {
- msg("Generating Sqlite3 output for example %s\n",pd->name().data());
- generateSqlite3ForPage(pd.get(),TRUE);
- }
+ msg("Generating Sqlite3 output for example %s\n",pd->name().data());
+ generateSqlite3ForPage(pd.get(),TRUE);
}
// + main page
diff --git a/src/util.cpp b/src/util.cpp
index 0f195c2..b7fedc3 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -3037,7 +3037,7 @@ bool resolveRef(/* in */ const char *scName,
// md->name().data(),md,md->anchor().data(),md->isLinkable(),(*resContext)->name().data());
return TRUE;
}
- else if (inSeeBlock && !nameStr.isEmpty() && (gd=Doxygen::groupSDict->find(nameStr)))
+ else if (inSeeBlock && !nameStr.isEmpty() && (gd=Doxygen::groupLinkedMap->find(nameStr)))
{ // group link
*resContext=gd;
return TRUE;
@@ -3214,7 +3214,7 @@ bool resolveLink(/* in */ const char *scName,
*resContext=pd;
return TRUE;
}
- else if ((gd=Doxygen::groupSDict->find(linkRef))) // link to a group
+ else if ((gd=Doxygen::groupLinkedMap->find(linkRef))) // link to a group
{
*resContext=gd;
return TRUE;
@@ -5034,8 +5034,7 @@ void addRefItem(const RefItemVector &sli,
bool recursivelyAddGroupListToTitle(OutputList &ol,const Definition *d,bool root)
{
- GroupList *groups = d->partOfGroups();
- if (groups) // write list of group to which this definition belongs
+ if (!d->partOfGroups().empty()) // write list of group to which this definition belongs
{
if (root)
{
@@ -5043,10 +5042,8 @@ bool recursivelyAddGroupListToTitle(OutputList &ol,const Definition *d,bool root
ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<div class=\"ingroups\">");
}
- GroupListIterator gli(*groups);
- GroupDef *gd;
bool first=true;
- for (gli.toFirst();(gd=gli.current());++gli)
+ for (const auto &gd : d->partOfGroups())
{
if (!first) { ol.writeString(" &#124; "); } else first=false;
if (recursivelyAddGroupListToTitle(ol, gd, FALSE))
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index c005e03..c6d5bc3 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -1193,18 +1193,13 @@ static void writeInnerPages(const PageLinkedRefMap &pl,FTextStream &t)
}
}
-static void writeInnerGroups(const GroupList *gl,FTextStream &t)
+static void writeInnerGroups(const GroupList &gl,FTextStream &t)
{
- if (gl)
+ for (const auto &sgd : gl)
{
- GroupListIterator gli(*gl);
- const GroupDef *sgd;
- for (gli.toFirst();(sgd=gli.current());++gli)
- {
- t << " <innergroup refid=\"" << sgd->getOutputFileBase()
- << "\">" << convertToXML(sgd->groupTitle())
- << "</innergroup>" << endl;
- }
+ t << " <innergroup refid=\"" << sgd->getOutputFileBase()
+ << "\">" << convertToXML(sgd->groupTitle())
+ << "</innergroup>" << endl;
}
}
@@ -1950,19 +1945,15 @@ void generateXML()
generateXMLForFile(fd.get(),t);
}
}
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- const GroupDef *gd;
- for (;(gd=gli.current());++gli)
+ for (const auto &gd : *Doxygen::groupLinkedMap)
{
msg("Generating XML output for group %s\n",gd->name().data());
- generateXMLForGroup(gd,t);
+ generateXMLForGroup(gd.get(),t);
}
+ for (const auto &pd : *Doxygen::pageLinkedMap)
{
- for (const auto &pd : *Doxygen::pageLinkedMap)
- {
- msg("Generating XML output for page %s\n",pd->name().data());
- generateXMLForPage(pd.get(),t,FALSE);
- }
+ msg("Generating XML output for page %s\n",pd->name().data());
+ generateXMLForPage(pd.get(),t,FALSE);
}
{
DirDef *dir;
@@ -1973,12 +1964,10 @@ void generateXML()
generateXMLForDir(dir,t);
}
}
+ for (const auto &pd : *Doxygen::exampleLinkedMap)
{
- for (const auto &pd : *Doxygen::exampleLinkedMap)
- {
- msg("Generating XML output for example %s\n",pd->name().data());
- generateXMLForPage(pd.get(),t,TRUE);
- }
+ msg("Generating XML output for example %s\n",pd->name().data());
+ generateXMLForPage(pd.get(),t,TRUE);
}
if (Doxygen::mainPage)
{