From b6bf2aa567a12a0c4011470e53b0a1740b6eb796 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Thu, 31 Dec 2020 22:06:11 +0100 Subject: Refactoring: replace Doxygen::groupSDict by Doxygen::groupLinkedMap --- src/classdef.cpp | 12 +++--- src/classlist.cpp | 6 +-- src/context.cpp | 54 +++++++++--------------- src/context.h | 20 +++++---- src/definition.cpp | 33 ++++----------- src/definition.h | 4 +- src/definitionimpl.h | 10 ++--- src/docbookgen.cpp | 13 +----- src/docparser.cpp | 2 +- src/dotgroupcollaboration.cpp | 61 +++++++++++---------------- src/doxygen.cpp | 96 +++++++++++++++++-------------------------- src/doxygen.h | 4 +- src/filedef.cpp | 10 ++--- src/groupdef.cpp | 95 ++++++++++++++++-------------------------- src/groupdef.h | 31 ++------------ src/index.cpp | 28 +++++-------- src/latexgen.cpp | 25 ++++------- src/pagedef.cpp | 7 ++-- src/pagedef.h | 2 +- src/perlmodgen.cpp | 13 ++---- src/rtfgen.cpp | 8 +--- src/searchindex.cpp | 8 ++-- src/sqlite3gen.cpp | 39 +++++++----------- src/util.cpp | 11 ++--- src/xmlgen.cpp | 37 ++++++----------- 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 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 DefinitionContextisAnonymous() && cd->isLinkableInProject() && cd->isEmbeddedInOuterScope() && - cd->partOfGroups()==0) + cd->partOfGroups().empty()) { classList->append(ClassContext::alloc(cd)); } @@ -3344,7 +3344,7 @@ class FileContext::Private : public DefinitionContext 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 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 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 sourceRefByDict; std::unordered_map 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 << "" << endl; - GroupSDict::Iterator gli(*Doxygen::groupSDict); - GroupDef *gd; - bool found=FALSE; - for (gli.toFirst();(gd=gli.current()) && !found;++gli) - { - if (!gd->isReference()) - { - t << " 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 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( + 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( + 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(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(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( + 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 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 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 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 it(*m_groupList); - GroupDef *gd; - for (;(gd=it.current());++it) + if (gd->isVisible()) { - if (gd->isVisible()) - { - tagFile << " " << convertToXML(gd->name()) << "" << endl; - } + tagFile << " " << convertToXML(gd->name()) << "" << 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 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 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(" \n"); ol.writeString(" \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 +class GroupLinkedMap : public LinkedMap { - public: - GroupSDict(uint size) : SDict(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 +class GroupList : public std::vector { - 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 -{ - public: - GroupListIterator(const GroupList &l) : QListIterator(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 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 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("
"); } - 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(" | "); } 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 << " getOutputFileBase() - << "\">" << convertToXML(sgd->groupTitle()) - << "" << endl; - } + t << " getOutputFileBase() + << "\">" << convertToXML(sgd->groupTitle()) + << "" << 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) { -- cgit v0.12