From ef5be2c99caa8e5fbc1cec3ec53e91b2c929f613 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Mon, 4 Jan 2021 14:33:02 +0100 Subject: Refactoring: modernize getMemberLists() --- src/classdef.cpp | 118 +++++++++++++++++---------------------------------- src/classdef.h | 3 +- src/defgen.cpp | 8 ++-- src/filedef.cpp | 97 ++++++++++++++---------------------------- src/filedef.h | 2 +- src/groupdef.cpp | 89 ++++++++++++-------------------------- src/groupdef.h | 3 +- src/index.cpp | 10 ++--- src/memberdef.cpp | 35 +++------------ src/memberdef.h | 2 +- src/memberlist.h | 20 +++++++++ src/namespacedef.cpp | 98 ++++++++++++++---------------------------- src/namespacedef.h | 2 +- src/sqlite3gen.cpp | 32 ++++++-------- src/xmlgen.cpp | 34 ++++++--------- 15 files changed, 195 insertions(+), 358 deletions(-) diff --git a/src/classdef.cpp b/src/classdef.cpp index 99b6c06..5a3c75d 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -222,7 +222,7 @@ class ClassDefImpl : public DefinitionMixin virtual ClassDef *categoryOf() const; virtual QCString className() const; virtual MemberList *getMemberList(MemberListType lt) const; - virtual const QList &getMemberLists() const; + virtual const MemberLists &getMemberLists() const; virtual const MemberGroupList &getMemberGroups() const; virtual QDict *getTemplateBaseClassNames() const; virtual ClassDef *getVariableInstance(const char *templSpec) const; @@ -321,7 +321,6 @@ class ClassDefImpl : public DefinitionMixin void writeDocumentationContents(OutputList &ol,const QCString &pageTitle) const; void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList); void addMemberToList(MemberListType lt,MemberDef *md,bool isBrief); - MemberList *createMemberList(MemberListType lt); void writeInheritedMemberDeclarations(OutputList &ol,MemberListType lt,int lt2,const QCString &title, const ClassDef *inheritedFrom,bool invert, bool showAlways,QPtrDict *visitedClasses) const; @@ -493,7 +492,7 @@ class ClassDefAliasImpl : public DefinitionAliasMixin { return getCdAlias()->className(); } virtual MemberList *getMemberList(MemberListType lt) const { return getCdAlias()->getMemberList(lt); } - virtual const QList &getMemberLists() const + virtual const MemberLists &getMemberLists() const { return getCdAlias()->getMemberLists(); } virtual const MemberGroupList &getMemberGroups() const { return getCdAlias()->getMemberGroups(); } @@ -674,7 +673,7 @@ class ClassDefImpl::IMPL */ ClassDef *categoryOf = 0; - QList memberLists; + MemberLists memberLists; /* user defined member groups */ MemberGroupList memberGroups; @@ -850,13 +849,11 @@ void ClassDefImpl::insertSubClass(ClassDef *cd,Protection p, void ClassDefImpl::addMembersToMemberGroup() { - QListIterator mli(m_impl->memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_impl->memberLists) { - if ((ml->listType()&MemberListType_detailedLists)==0) + if ((ml.listType()&MemberListType_detailedLists)==0) { - ::addMembersToMemberGroup(ml,&m_impl->memberGroups,this); + ::addMembersToMemberGroup(&ml,&m_impl->memberGroups,this); } } @@ -1103,8 +1100,8 @@ void ClassDefImpl::internalInsertMember(MemberDef *md, case MemberType_Function: if (md->isConstructor() || md->isDestructor()) { - MemberList *ml = createMemberList(MemberListType_constructors); - ml->append(md); + MemberList &ml = m_impl->memberLists.get(MemberListType_constructors); + ml.append(md); } else { @@ -1168,16 +1165,11 @@ void ClassDefImpl::insertMember(MemberDef *md) // compute the anchors for all members void ClassDefImpl::computeAnchors() { - //ClassDef *context = Config_getBool(INLINE_INHERITED_MEMB) ? this : 0; - //const char *letters = "abcdefghijklmnopqrstuvwxyz0123456789"; - QListIterator mli(m_impl->memberLists); - MemberList *ml; - //int index = 0; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_impl->memberLists) { - if ((ml->listType()&MemberListType_detailedLists)==0) + if ((ml.listType()&MemberListType_detailedLists)==0) { - ml->setAnchors(); + ml.setAnchors(); } } @@ -1203,13 +1195,11 @@ void ClassDefImpl::findSectionsInDocumentation() { mg->findSectionsInDocumentation(this); } - QListIterator mli(m_impl->memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_impl->memberLists) { - if ((ml->listType()&MemberListType_detailedLists)==0) + if ((ml.listType()&MemberListType_detailedLists)==0) { - ml->findSectionsInDocumentation(this); + ml.findSectionsInDocumentation(this); } } } @@ -2770,13 +2760,11 @@ void ClassDefImpl::writeMemberPages(OutputList &ol) const ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - QListIterator mli(m_impl->memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : m_impl->memberLists) { - if (ml->numDocMembers()>ml->numDocEnumValues() && (ml->listType()&MemberListType_detailedLists)) + if (ml.numDocMembers()>ml.numDocEnumValues() && (ml.listType()&MemberListType_detailedLists)) { - ml->writeDocumentationPage(ol,displayName(),this); + ml.writeDocumentationPage(ol,displayName(),this); } } @@ -4179,13 +4167,11 @@ void ClassDefImpl::addListReferences() { mg->addListReferences(this); } - QListIterator mli(m_impl->memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_impl->memberLists) { - if (ml->listType()&MemberListType_detailedLists) + if (ml.listType()&MemberListType_detailedLists) { - ml->addListReferences(this); + ml.addListReferences(this); } } } @@ -4220,33 +4206,13 @@ bool ClassDefImpl::isAccessibleMember(const MemberDef *md) const return md->getClassDef() && isBaseClass(md->getClassDef(),TRUE); } -MemberList *ClassDefImpl::createMemberList(MemberListType lt) -{ - m_impl->memberLists.setAutoDelete(TRUE); - QListIterator mli(m_impl->memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) - { - if (ml->listType()==lt) - { - return ml; - } - } - // not found, create a new member list - ml = new MemberList(lt); - m_impl->memberLists.append(ml); - return ml; -} - MemberList *ClassDefImpl::getMemberList(MemberListType lt) const { - QListIterator mli(m_impl->memberLists); - MemberList *ml; - for (;(ml=mli.current());++mli) + for (auto &ml : m_impl->memberLists) { - if (ml->listType()==lt) + if (ml.listType()==lt) { - return ml; + return &ml; } } return 0; @@ -4256,28 +4222,26 @@ void ClassDefImpl::addMemberToList(MemberListType lt,MemberDef *md,bool isBrief) { static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS); static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS); - MemberList *ml = createMemberList(lt); - ml->setNeedsSorting((isBrief && sortBriefDocs) || (!isBrief && sortMemberDocs)); - ml->append(md); + MemberList &ml = m_impl->memberLists.get(lt); + ml.setNeedsSorting((isBrief && sortBriefDocs) || (!isBrief && sortMemberDocs)); + ml.append(md); // for members in the declaration lists we set the section, needed for member grouping - if ((ml->listType()&MemberListType_detailedLists)==0) + if ((ml.listType()&MemberListType_detailedLists)==0) { MemberDefMutable *mdm = toMemberDefMutable(md); if (mdm) { - mdm->setSectionList(this,ml); + mdm->setSectionList(this,&ml); } } } void ClassDefImpl::sortMemberLists() { - QListIterator mli(m_impl->memberLists); - MemberList *ml; - for (;(ml=mli.current());++mli) + for (auto &ml : m_impl->memberLists) { - if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); } + if (ml.needsSorting()) { ml.sort(); ml.setNeedsSorting(FALSE); } } std::sort(m_impl->innerClasses.begin(), m_impl->innerClasses.end(), @@ -4355,12 +4319,10 @@ void ClassDefImpl::setAnonymousEnumType() void ClassDefImpl::countMembers() { - QListIterator mli(m_impl->memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_impl->memberLists) { - ml->countDecMembers(); - ml->countDocMembers(); + ml.countDecMembers(); + ml.countDocMembers(); } for (const auto &mg : m_impl->memberGroups) { @@ -4795,7 +4757,7 @@ ClassDef *ClassDefImpl::categoryOf() const return m_impl->categoryOf; } -const QList &ClassDefImpl::getMemberLists() const +const MemberLists &ClassDefImpl::getMemberLists() const { return m_impl->memberLists; } @@ -4873,11 +4835,9 @@ MemberDef *ClassDefImpl::isSmartPointer() const void ClassDefImpl::reclassifyMember(MemberDefMutable *md,MemberType t) { md->setMemberType(t); - QListIterator mli(m_impl->memberLists); - MemberList *ml; - for (;(ml=mli.current());++mli) + for (auto &ml : m_impl->memberLists) { - ml->remove(md); + ml.remove(md); } insertMember(md); } @@ -4942,11 +4902,9 @@ void ClassDefImpl::setTagLessReference(const ClassDef *cd) void ClassDefImpl::removeMemberFromLists(MemberDef *md) { - QListIterator mli(m_impl->memberLists); - MemberList *ml; - for (;(ml=mli.current());++mli) + for (auto &ml : m_impl->memberLists) { - ml->remove(md); + ml.remove(md); } } diff --git a/src/classdef.h b/src/classdef.h index 2a96d22..46e1f7d 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -34,6 +34,7 @@ struct Argument; class MemberDef; class MemberDefMutable; class MemberList; +class MemberLists; class ClassLinkedRefMap; class OutputList; class FileDef; @@ -316,7 +317,7 @@ class ClassDef : public Definition virtual MemberList *getMemberList(MemberListType lt) const = 0; /** Returns the list containing the list of members sorted per type */ - virtual const QList &getMemberLists() const = 0; + virtual const MemberLists &getMemberLists() const = 0; /** Returns the member groups defined for this class */ virtual const MemberGroupList &getMemberGroups() const = 0; diff --git a/src/defgen.cpp b/src/defgen.cpp index a1cd28d..4e2eb88 100644 --- a/src/defgen.cpp +++ b/src/defgen.cpp @@ -392,13 +392,11 @@ void generateDEFForClass(ClassDef *cd,FTextStream &t) } int numMembers = 0; - QListIterator mli(cd->getMemberLists()); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : cd->getMemberLists()) { - if ((ml->listType()&MemberListType_detailedLists)==0) + if ((ml.listType()&MemberListType_detailedLists)==0) { - numMembers+=ml->count(); + numMembers+=ml.count(); } } if (numMembers>0) diff --git a/src/filedef.cpp b/src/filedef.cpp index 6c31940..917af49 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -87,7 +87,7 @@ class FileDefImpl : public DefinitionMixin virtual QList *includedByFileList() const { return m_includedByList; } virtual void getAllIncludeFilesRecursively(StringVector &incFiles) const; virtual MemberList *getMemberList(MemberListType lt) const; - virtual const QList &getMemberLists() const { return m_memberLists; } + virtual const MemberLists &getMemberLists() const { return m_memberLists; } virtual const MemberGroupList &getMemberGroups() const { return m_memberGroups; } virtual NamespaceLinkedRefMap getNamespaces() const { return m_namespaces; } virtual ClassLinkedRefMap getClasses() const { return m_classes; } @@ -130,7 +130,6 @@ class FileDefImpl : public DefinitionMixin private: void acquireFileVersion(); - MemberList *createMemberList(MemberListType lt); void addMemberToList(MemberListType lt,MemberDef *md); void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title); void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title); @@ -171,7 +170,7 @@ class FileDefImpl : public DefinitionMixin QCString m_fileVersion; PackageDef *m_package; DirDef *m_dir; - QList m_memberLists; + MemberLists m_memberLists; MemberGroupList m_memberGroups; NamespaceLinkedRefMap m_namespaces; ClassLinkedRefMap m_classes; @@ -296,13 +295,11 @@ void FileDefImpl::findSectionsInDocumentation() mg->findSectionsInDocumentation(this); } - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->listType()&MemberListType_declarationLists) + if (ml.listType()&MemberListType_declarationLists) { - ml->findSectionsInDocumentation(this); + ml.findSectionsInDocumentation(this); } } } @@ -1044,13 +1041,11 @@ void FileDefImpl::writeMemberPages(OutputList &ol) ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : m_memberLists) { - if (ml->listType()&MemberListType_documentationLists) + if (ml.listType()&MemberListType_documentationLists) { - ml->writeDocumentationPage(ol,name(),this); + ml.writeDocumentationPage(ol,name(),this); } } @@ -1243,13 +1238,11 @@ void FileDefImpl::parseSource(ClangTUParser *clangParser) void FileDefImpl::addMembersToMemberGroup() { - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->listType()&MemberListType_declarationLists) + if (ml.listType()&MemberListType_declarationLists) { - ::addMembersToMemberGroup(ml,&m_memberGroups,this); + ::addMembersToMemberGroup(&ml,&m_memberGroups,this); } } @@ -1278,8 +1271,8 @@ void FileDefImpl::insertMember(MemberDef *md) if (allMemberList==0) { - allMemberList = new MemberList(MemberListType_allMembersList); - m_memberLists.append(allMemberList); + m_memberLists.emplace_back(MemberListType_allMembersList); + allMemberList = &m_memberLists.back(); } allMemberList->append(md); //::addFileMemberNameToIndex(md); @@ -1540,13 +1533,11 @@ void FileDefImpl::addListReferences() { mg->addListReferences(this); } - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->listType()&MemberListType_documentationLists) + if (ml.listType()&MemberListType_documentationLists) { - ml->addListReferences(this); + ml.addListReferences(this); } } } @@ -1886,54 +1877,34 @@ QCString FileDefImpl::includeName() const return getSourceFileBase(); } -MemberList *FileDefImpl::createMemberList(MemberListType lt) -{ - m_memberLists.setAutoDelete(TRUE); - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) - { - if (ml->listType()==lt) - { - return ml; - } - } - // not found, create a new member list - ml = new MemberList(lt); - m_memberLists.append(ml); - return ml; -} - void FileDefImpl::addMemberToList(MemberListType lt,MemberDef *md) { static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS); static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS); - MemberList *ml = createMemberList(lt); - ml->setNeedsSorting( - ((ml->listType()&MemberListType_declarationLists) && sortBriefDocs) || - ((ml->listType()&MemberListType_documentationLists) && sortMemberDocs)); - ml->append(md); + MemberList &ml = m_memberLists.get(lt); + ml.setNeedsSorting( + ((ml.listType()&MemberListType_declarationLists) && sortBriefDocs) || + ((ml.listType()&MemberListType_documentationLists) && sortMemberDocs)); + ml.append(md); if (lt&MemberListType_documentationLists) { - ml->setInFile(TRUE); + ml.setInFile(TRUE); } - if (ml->listType()&MemberListType_declarationLists) + if (ml.listType()&MemberListType_declarationLists) { MemberDefMutable *mdm = toMemberDefMutable(md); if (mdm) { - mdm->setSectionList(this,ml); + mdm->setSectionList(this,&ml); } } } void FileDefImpl::sortMemberLists() { - QListIterator mli(m_memberLists); - MemberList *ml; - for (;(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); } + if (ml.needsSorting()) { ml.sort(); ml.setNeedsSorting(FALSE); } } for (const auto &mg : m_memberGroups) @@ -1967,13 +1938,11 @@ void FileDefImpl::sortMemberLists() MemberList *FileDefImpl::getMemberList(MemberListType lt) const { - QListIterator mli(m_memberLists); - MemberList *ml; - for (;(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->listType()==lt) + if (ml.listType()==lt) { - return ml; + return const_cast(&ml); } } return 0; @@ -2058,12 +2027,10 @@ QCString FileDefImpl::includedByDependencyGraphFileName() const void FileDefImpl::countMembers() { - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - ml->countDecMembers(); - ml->countDocMembers(); + ml.countDecMembers(); + ml.countDocMembers(); } for (const auto &mg : m_memberGroups) { diff --git a/src/filedef.h b/src/filedef.h index f27ff6d..ba18c2b 100644 --- a/src/filedef.h +++ b/src/filedef.h @@ -127,7 +127,7 @@ class FileDef : public DefinitionMutable, public Definition virtual void getAllIncludeFilesRecursively(StringVector &incFiles) const = 0; virtual MemberList *getMemberList(MemberListType lt) const = 0; - virtual const QList &getMemberLists() const = 0; + virtual const MemberLists &getMemberLists() const = 0; /* user defined member groups */ virtual const MemberGroupList &getMemberGroups() const = 0; diff --git a/src/groupdef.cpp b/src/groupdef.cpp index d0f47db..53a24f2 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -95,7 +95,7 @@ class GroupDefImpl : public DefinitionMixin virtual Definition *getGroupScope() const { return m_groupScope; } virtual MemberList *getMemberList(MemberListType lt) const; - virtual const QList &getMemberLists() const { return m_memberLists; } + virtual const MemberLists &getMemberLists() const { return m_memberLists; } /* user defined member groups */ virtual const MemberGroupList &getMemberGroups() const { return m_memberGroups; } @@ -112,7 +112,6 @@ class GroupDefImpl : public DefinitionMixin private: void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const); - MemberList *createMemberList(MemberListType lt); void addMemberToList(MemberListType lt,MemberDef *md); void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title); void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title); @@ -149,7 +148,7 @@ class GroupDefImpl : public DefinitionMixin MemberList * m_allMemberList; MemberNameInfoLinkedMap m_allMemberNameInfoLinkedMap; Definition * m_groupScope; - QList m_memberLists; + MemberLists m_memberLists; MemberGroupList m_memberGroups; bool m_subGrouping; @@ -225,13 +224,11 @@ void GroupDefImpl::findSectionsInDocumentation() mg->findSectionsInDocumentation(this); } - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->listType()&MemberListType_declarationLists) + if (ml.listType()&MemberListType_declarationLists) { - ml->findSectionsInDocumentation(this); + ml.findSectionsInDocumentation(this); } } } @@ -295,13 +292,11 @@ void GroupDefImpl::addExample(const PageDef *def) void GroupDefImpl::addMembersToMemberGroup() { - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->listType()&MemberListType_declarationLists) + if (ml.listType()&MemberListType_declarationLists) { - ::addMembersToMemberGroup(ml,&m_memberGroups,this); + ::addMembersToMemberGroup(&ml,&m_memberGroups,this); } } @@ -572,12 +567,10 @@ bool GroupDefImpl::isASubGroup() const void GroupDefImpl::countMembers() { - QListIterator mli(m_memberLists); - MemberList *ml; - for (;(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - ml->countDecMembers(); - ml->countDocMembers(); + ml.countDecMembers(); + ml.countDocMembers(); } for (const auto &mg : m_memberGroups) { @@ -1264,13 +1257,11 @@ void GroupDefImpl::writeMemberPages(OutputList &ol) ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : m_memberLists) { - if (ml->listType()&MemberListType_documentationLists) + if (ml.listType()&MemberListType_documentationLists) { - ml->writeDocumentationPage(ol,name(),this); + ml.writeDocumentationPage(ol,name(),this); } } @@ -1541,45 +1532,25 @@ void GroupDefImpl::addListReferences() { mg->addListReferences(this); } - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->listType()&MemberListType_documentationLists) + if (ml.listType()&MemberListType_documentationLists) { - ml->addListReferences(this); + ml.addListReferences(this); } } } -MemberList *GroupDefImpl::createMemberList(MemberListType lt) -{ - m_memberLists.setAutoDelete(TRUE); - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) - { - if (ml->listType()==lt) - { - return ml; - } - } - // not found, create a new member list - ml = new MemberList(lt); - m_memberLists.append(ml); - ml->setInGroup(TRUE); - return ml; -} - void GroupDefImpl::addMemberToList(MemberListType lt,MemberDef *md) { static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS); static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS); - MemberList *ml = createMemberList(lt); - ml->setNeedsSorting( - ((ml->listType()&MemberListType_declarationLists) && sortBriefDocs) || - ((ml->listType()&MemberListType_documentationLists) && sortMemberDocs)); - ml->append(md); + MemberList &ml = m_memberLists.get(lt); + ml.setInGroup(true); + ml.setNeedsSorting( + ((ml.listType()&MemberListType_declarationLists) && sortBriefDocs) || + ((ml.listType()&MemberListType_documentationLists) && sortMemberDocs)); + ml.append(md); } // performs a partial reordering to group elements together with the same scope @@ -1645,11 +1616,9 @@ static void groupClassesWithSameScope(Vec &vec) void GroupDefImpl::sortMemberLists() { - QListIterator mli(m_memberLists); - MemberList *ml; - for (;(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); } + if (ml.needsSorting()) { ml.sort(); ml.setNeedsSorting(FALSE); } } if (Config_getBool(SORT_BRIEF_DOCS)) { @@ -1679,13 +1648,11 @@ void GroupDefImpl::sortMemberLists() MemberList *GroupDefImpl::getMemberList(MemberListType lt) const { - QListIterator mli(m_memberLists); - MemberList *ml; - for (;(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->listType()==lt) + if (ml.listType()==lt) { - return ml; + return const_cast(&ml); } } return 0; diff --git a/src/groupdef.h b/src/groupdef.h index 2ab8231..624a680 100644 --- a/src/groupdef.h +++ b/src/groupdef.h @@ -28,6 +28,7 @@ #include "linkedmap.h" class MemberList; +class MemberLists; class FileList; class ClassLinkedRefMap; class NamespaceLinkedRefMap; @@ -91,7 +92,7 @@ class GroupDef : public DefinitionMutable, public Definition virtual Definition *getGroupScope() const = 0; virtual MemberList *getMemberList(MemberListType lt) const = 0; - virtual const QList &getMemberLists() const = 0; + virtual const MemberLists &getMemberLists() const = 0; /* user defined member groups */ virtual const MemberGroupList &getMemberGroups() const = 0; diff --git a/src/index.cpp b/src/index.cpp index c54f7a2..7089a0c 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -355,7 +355,7 @@ void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part, const QCString &name,const QCString &anchor, bool addToIndex=TRUE,bool preventSeparateIndex=FALSE) { - bool hasMembers = def->getMemberLists().count()>0 || !def->getMemberGroups().empty(); + bool hasMembers = !def->getMemberLists().empty() || !def->getMemberGroups().empty(); Doxygen::indexList->addContentsItem(hasMembers,name, def->getReference(),def->getOutputFileBase(),anchor, hasMembers && !preventSeparateIndex, @@ -3759,13 +3759,11 @@ static void writeGroupTreeNode(OutputList &ol, const GroupDef *gd, int level, FT size_t numSubItems = 0; if (1 /*Config_getBool(TOC_EXPAND)*/) { - QListIterator mli(gd->getMemberLists()); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : gd->getMemberLists()) { - if (ml->listType()&MemberListType_documentationLists) + if (ml.listType()&MemberListType_documentationLists) { - numSubItems += ml->count(); + numSubItems += ml.count(); } } numSubItems += gd->getNamespaces().size(); diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 5499dc5..8f09347 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -247,7 +247,7 @@ class MemberDefImpl : public DefinitionMixin virtual void setBitfields(const char *s); virtual void setMaxInitLines(int lines); virtual void setMemberClass(const ClassDef *cd); - virtual void setSectionList(const Definition *container,MemberList *sl); + virtual void setSectionList(const Definition *container,const MemberList *sl); virtual void setGroupDef(const GroupDef *gd,Grouping::GroupPri_t pri, const QCString &fileName,int startLine,bool hasDocs, MemberDef *member=0); @@ -1240,7 +1240,7 @@ class MemberDefImpl::IMPL // as its type then this is computed by // getClassDefOfAnonymousType() and // cached here. - SDict *classSectionSDict = 0; // not accessible + std::map sectionMap; const MemberDef *groupAlias = 0; // Member containing the definition int grpId = 0; // group id @@ -1302,7 +1302,6 @@ class MemberDefImpl::IMPL MemberDefImpl::IMPL::IMPL() : enumFields(0), redefinedBy(0), - classSectionSDict(0), category(0), categoryRelation(0), declLine(-1), @@ -1315,7 +1314,6 @@ MemberDefImpl::IMPL::~IMPL() { delete redefinedBy; delete enumFields; - delete classSectionSDict; } void MemberDefImpl::IMPL::init(Definition *d, @@ -1388,7 +1386,6 @@ void MemberDefImpl::IMPL::init(Definition *d, } metaData = meta; templateMaster = 0; - classSectionSDict = 0; docsForDefinition = TRUE; isTypedefValCached = FALSE; cachedTypedefValue = 0; @@ -1460,7 +1457,6 @@ MemberDef *MemberDefImpl::deepCopy() const // clear pointers owned by object result->m_impl->redefinedBy= 0; result->m_impl->enumFields=0; - result->m_impl->classSectionSDict=0; // replace pointers owned by the object by deep copies if (m_impl->redefinedBy) { @@ -1484,16 +1480,6 @@ MemberDef *MemberDefImpl::deepCopy() const result->m_impl->tArgList = m_impl->tArgList; result->m_impl->typeConstraints = m_impl->typeConstraints; result->setDefinitionTemplateParameterLists(m_impl->defTmpArgLists); - if (m_impl->classSectionSDict) - { - result->m_impl->classSectionSDict = new SDict(7); - SDict::IteratorDict it(*m_impl->classSectionSDict); - MemberList *ml; - for (it.toFirst();(ml=it.current());++it) - { - result->m_impl->classSectionSDict->append(it.currentKey(),ml); - } - } result->m_impl->declArgList = m_impl->declArgList; return result; } @@ -4355,23 +4341,14 @@ void MemberDefImpl::addListReference(Definition *) const MemberList *MemberDefImpl::getSectionList(const Definition *container) const { - const Definition *d = container; - char key[20]; - sprintf(key,"%p",(void*)d); - return (d!=0 && m_impl->classSectionSDict) ? m_impl->classSectionSDict->find(key) : 0; + auto it = m_impl->sectionMap.find(container); + return it!=m_impl->sectionMap.end() ? it->second : 0; } -void MemberDefImpl::setSectionList(const Definition *container,MemberList *sl) +void MemberDefImpl::setSectionList(const Definition *container,const MemberList *sl) { //printf("MemberDefImpl::setSectionList(%s,%p) name=%s\n",d->name().data(),sl,name().data()); - const Definition *d= container; - char key[20]; - sprintf(key,"%p",(void*)d); - if (m_impl->classSectionSDict==0) - { - m_impl->classSectionSDict = new SDict(7); - } - m_impl->classSectionSDict->append(key,sl); + m_impl->sectionMap.insert(std::make_pair(container,sl)); } Specifier MemberDefImpl::virtualness(int count) const diff --git a/src/memberdef.h b/src/memberdef.h index 1fbfc27..ff0e300 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -308,7 +308,7 @@ class MemberDefMutable : public DefinitionMutable, public MemberDef virtual void setBitfields(const char *s) = 0; virtual void setMaxInitLines(int lines) = 0; virtual void setMemberClass(const ClassDef *cd) = 0; - virtual void setSectionList(const Definition *container,MemberList *sl) = 0; + virtual void setSectionList(const Definition *container,const MemberList *sl) = 0; virtual void setGroupDef(const GroupDef *gd,Grouping::GroupPri_t pri, const QCString &fileName,int startLine,bool hasDocs, MemberDef *member=0) = 0; diff --git a/src/memberlist.h b/src/memberlist.h index 200767d..d2433f4 100644 --- a/src/memberlist.h +++ b/src/memberlist.h @@ -17,6 +17,7 @@ #define MEMBERLIST_H #include +#include #include #include "memberdef.h" @@ -131,6 +132,25 @@ class MemberLinkedRefMap : public LinkedRefMap { }; +class MemberLists : public std::vector +{ + public: + MemberLists() = default; + MemberList &get(MemberListType lt) + { + // find the list with the given type + auto it = std::find_if(begin(),end(),[<](const auto &ml) { return ml.listType()==lt; }); + if (it!=end()) return *it; + // or create a new list if it is not found + emplace_back(lt); + return back(); + } + + private: + MemberLists(const MemberLists &) = delete; + MemberLists &operator=(const MemberLists &) = delete; +}; + int genericCompareMembers(const MemberDef *c1,const MemberDef *c2); #endif diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 1108653..f1ac814 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -95,7 +95,7 @@ class NamespaceDefImpl : public DefinitionMixin virtual void setFileName(const QCString &fn); virtual bool subGrouping() const { return m_subGrouping; } virtual MemberList *getMemberList(MemberListType lt) const; - virtual const QList &getMemberLists() const { return m_memberLists; } + virtual const MemberLists &getMemberLists() const { return m_memberLists; } virtual const MemberDef *getMemberByName(const QCString &) const; virtual const MemberGroupList &getMemberGroups() const { return m_memberGroups; } virtual ClassLinkedRefMap getClasses() const { return classes; } @@ -110,7 +110,6 @@ class NamespaceDefImpl : public DefinitionMixin virtual void setMetaData(const QCString &m); private: - MemberList *createMemberList(MemberListType lt); void addMemberToList(MemberListType lt,MemberDef *md); void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title); void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title); @@ -139,7 +138,7 @@ class NamespaceDefImpl : public DefinitionMixin SDict *m_innerCompounds = 0; MemberLinkedRefMap m_allMembers; - QList m_memberLists; + MemberLists m_memberLists; MemberGroupList m_memberGroups; ClassLinkedRefMap classes; ClassLinkedRefMap interfaces; @@ -208,7 +207,7 @@ class NamespaceDefAliasImpl : public DefinitionAliasMixin { return getNSAlias()->subGrouping(); } virtual MemberList *getMemberList(MemberListType lt) const { return getNSAlias()->getMemberList(lt); } - virtual const QList &getMemberLists() const + virtual const MemberLists &getMemberLists() const { return getNSAlias()->getMemberLists(); } virtual const MemberDef *getMemberByName(const QCString &name) const { return getNSAlias()->getMemberByName(name); } @@ -318,13 +317,11 @@ void NamespaceDefImpl::findSectionsInDocumentation() { mg->findSectionsInDocumentation(this); } - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->listType()&MemberListType_declarationLists) + if (ml.listType()&MemberListType_declarationLists) { - ml->findSectionsInDocumentation(this); + ml.findSectionsInDocumentation(this); } } } @@ -385,13 +382,11 @@ void NamespaceDefImpl::insertNamespace(const NamespaceDef *nd) void NamespaceDefImpl::addMembersToMemberGroup() { - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->listType()&MemberListType_declarationLists) + if (ml.listType()&MemberListType_declarationLists) { - ::addMembersToMemberGroup(ml,&m_memberGroups,this); + ::addMembersToMemberGroup(&ml,&m_memberGroups,this); } } @@ -449,8 +444,8 @@ void NamespaceDefImpl::insertMember(MemberDef *md) MemberList *allMemberList = getMemberList(MemberListType_allMembersList); if (allMemberList==0) { - allMemberList = new MemberList(MemberListType_allMembersList); - m_memberLists.append(allMemberList); + m_memberLists.emplace_back(MemberListType_allMembersList); + allMemberList = &m_memberLists.back(); } allMemberList->append(md); //printf("%s::m_allMembersDict->append(%s)\n",name().data(),md->localName().data()); @@ -1053,13 +1048,11 @@ void NamespaceDefImpl::writeMemberPages(OutputList &ol) ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : m_memberLists) { - if (ml->listType()&MemberListType_documentationLists) + if (ml.listType()&MemberListType_documentationLists) { - ml->writeDocumentationPage(ol,displayName(),this); + ml.writeDocumentationPage(ol,displayName(),this); } } ol.popGeneratorState(); @@ -1110,12 +1103,10 @@ void NamespaceDefImpl::writeQuickMemberLinks(OutputList &ol,const MemberDef *cur void NamespaceDefImpl::countMembers() { - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - ml->countDecMembers(); - ml->countDocMembers(); + ml.countDecMembers(); + ml.countDocMembers(); } for (const auto &mg : m_memberGroups) { @@ -1183,13 +1174,11 @@ void NamespaceDefImpl::addListReferences() { mg->addListReferences(this); } - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->listType()&MemberListType_documentationLists) + if (ml.listType()&MemberListType_documentationLists) { - ml->addListReferences(this); + ml.addListReferences(this); } } } @@ -1336,54 +1325,33 @@ void NamespaceLinkedRefMap::writeDeclaration(OutputList &ol,const char *title, //------------------------------------------------------------------------------- -MemberList *NamespaceDefImpl::createMemberList(MemberListType lt) -{ - m_memberLists.setAutoDelete(TRUE); - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) - { - if (ml->listType()==lt) - { - return ml; - } - } - // not found, create a new member list - ml = new MemberList(lt); - m_memberLists.append(ml); - return ml; -} - void NamespaceDefImpl::addMemberToList(MemberListType lt,MemberDef *md) { static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS); static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS); - MemberList *ml = createMemberList(lt); - ml->setNeedsSorting( - ((ml->listType()&MemberListType_declarationLists) && sortBriefDocs) || - ((ml->listType()&MemberListType_documentationLists) && sortMemberDocs)); - ml->append(md); + MemberList &ml = m_memberLists.get(lt); + ml.setNeedsSorting( + ((ml.listType()&MemberListType_declarationLists) && sortBriefDocs) || + ((ml.listType()&MemberListType_documentationLists) && sortMemberDocs)); + ml.append(md); - if (ml->listType()&MemberListType_declarationLists) + if (ml.listType()&MemberListType_declarationLists) { MemberDefMutable *mdm = toMemberDefMutable(md); if (mdm) { - mdm->setSectionList(this,ml); + mdm->setSectionList(this,&ml); } } } void NamespaceDefImpl::sortMemberLists() { - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); } + if (ml.needsSorting()) { ml.sort(); ml.setNeedsSorting(FALSE); } } - if (Config_getBool(SORT_BRIEF_DOCS)) { auto classComp = [](const ClassLinkedRefMap::Ptr &c1,const ClassLinkedRefMap::Ptr &c2) @@ -1411,13 +1379,11 @@ void NamespaceDefImpl::sortMemberLists() MemberList *NamespaceDefImpl::getMemberList(MemberListType lt) const { - QListIterator mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { - if (ml->listType()==lt) + if (ml.listType()==lt) { - return ml; + return const_cast(&ml); } } return 0; diff --git a/src/namespacedef.h b/src/namespacedef.h index 6838157..e644a32 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -75,7 +75,7 @@ class NamespaceDef : public Definition virtual const Definition *findInnerCompound(const char *name) const = 0; virtual bool subGrouping() const = 0; virtual MemberList *getMemberList(MemberListType lt) const = 0; - virtual const QList &getMemberLists() const = 0; + virtual const MemberLists &getMemberLists() const = 0; virtual const MemberDef *getMemberByName(const QCString &) const = 0; /*! Returns the user defined member groups */ diff --git a/src/sqlite3gen.cpp b/src/sqlite3gen.cpp index 38654bc..eb5da5e 100644 --- a/src/sqlite3gen.cpp +++ b/src/sqlite3gen.cpp @@ -2012,13 +2012,11 @@ static void generateSqlite3ForClass(const ClassDef *cd) } // this is just a list of *local* members - QListIterator mli(cd->getMemberLists()); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : cd->getMemberLists()) { - if ((ml->listType()&MemberListType_detailedLists)==0) + if ((ml.listType()&MemberListType_detailedLists)==0) { - generateSqlite3Section(cd,ml,refid,"user-defined"); + generateSqlite3Section(cd,&ml,refid,"user-defined"); } } @@ -2071,13 +2069,11 @@ static void generateSqlite3ForNamespace(const NamespaceDef *nd) } // + normal members - QListIterator mli(nd->getMemberLists()); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : nd->getMemberLists()) { - if ((ml->listType()&MemberListType_declarationLists)!=0) + if ((ml.listType()&MemberListType_declarationLists)!=0) { - generateSqlite3Section(nd,ml,refid,"user-defined"); + generateSqlite3Section(nd,&ml,refid,"user-defined"); } } } @@ -2228,13 +2224,11 @@ static void generateSqlite3ForFile(const FileDef *fd) } // + normal members - QListIterator mli(fd->getMemberLists()); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : fd->getMemberLists()) { - if ((ml->listType()&MemberListType_declarationLists)!=0) + if ((ml.listType()&MemberListType_declarationLists)!=0) { - generateSqlite3Section(fd,ml,refid,"user-defined"); + generateSqlite3Section(fd,&ml,refid,"user-defined"); } } } @@ -2297,13 +2291,11 @@ static void generateSqlite3ForGroup(const GroupDef *gd) } // + members - QListIterator mli(gd->getMemberLists()); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : gd->getMemberLists()) { - if ((ml->listType()&MemberListType_declarationLists)!=0) + if ((ml.listType()&MemberListType_declarationLists)!=0) { - generateSqlite3Section(gd,ml,refid,"user-defined"); + generateSqlite3Section(gd,&ml,refid,"user-defined"); } } } diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 350be48..1831a98 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -1054,7 +1054,7 @@ static bool memberVisible(const Definition *d,const MemberDef *md) } static void generateXMLSection(const Definition *d,FTextStream &ti,FTextStream &t, - MemberList *ml,const char *kind,const char *header=0, + const MemberList *ml,const char *kind,const char *header=0, const char *documentation=0) { if (ml==0) return; @@ -1361,13 +1361,11 @@ static void generateXMLForClass(const ClassDef *cd,FTextStream &ti) mg->documentation()); } - QListIterator mli(cd->getMemberLists()); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : cd->getMemberLists()) { - if ((ml->listType()&MemberListType_detailedLists)==0) + if ((ml.listType()&MemberListType_detailedLists)==0) { - generateXMLSection(cd,ti,t,ml,g_xmlSectionMapper.find(ml->listType())); + generateXMLSection(cd,ti,t,&ml,g_xmlSectionMapper.find(ml.listType())); } } @@ -1460,13 +1458,11 @@ static void generateXMLForNamespace(const NamespaceDef *nd,FTextStream &ti) mg->documentation()); } - QListIterator mli(nd->getMemberLists()); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : nd->getMemberLists()) { - if ((ml->listType()&MemberListType_declarationLists)!=0) + if ((ml.listType()&MemberListType_declarationLists)!=0) { - generateXMLSection(nd,ti,t,ml,g_xmlSectionMapper.find(ml->listType())); + generateXMLSection(nd,ti,t,&ml,g_xmlSectionMapper.find(ml.listType())); } } @@ -1586,13 +1582,11 @@ static void generateXMLForFile(FileDef *fd,FTextStream &ti) mg->documentation()); } - QListIterator mli(fd->getMemberLists()); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : fd->getMemberLists()) { - if ((ml->listType()&MemberListType_declarationLists)!=0) + if ((ml.listType()&MemberListType_declarationLists)!=0) { - generateXMLSection(fd,ti,t,ml,g_xmlSectionMapper.find(ml->listType())); + generateXMLSection(fd,ti,t,&ml,g_xmlSectionMapper.find(ml.listType())); } } @@ -1661,13 +1655,11 @@ static void generateXMLForGroup(const GroupDef *gd,FTextStream &ti) mg->documentation()); } - QListIterator mli(gd->getMemberLists()); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : gd->getMemberLists()) { - if ((ml->listType()&MemberListType_declarationLists)!=0) + if ((ml.listType()&MemberListType_declarationLists)!=0) { - generateXMLSection(gd,ti,t,ml,g_xmlSectionMapper.find(ml->listType())); + generateXMLSection(gd,ti,t,&ml,g_xmlSectionMapper.find(ml.listType())); } } -- cgit v0.12