From efa76fb818ff37ed2bde1675a11d36dc852727e5 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Wed, 30 Dec 2020 14:43:03 +0100 Subject: Refactoring: modernise MemberGroupList --- src/context.cpp | 22 ++----- src/context.h | 6 +- src/dotnode.cpp | 14 ++--- src/membergroup.h | 13 +--- src/memberlist.cpp | 174 ++++++++++++++++++----------------------------------- src/memberlist.h | 9 +-- src/vhdldocgen.cpp | 58 +++++++----------- 7 files changed, 99 insertions(+), 197 deletions(-) diff --git a/src/context.cpp b/src/context.cpp index a7eb9a3..0e531b0 100644 --- a/src/context.cpp +++ b/src/context.cpp @@ -8818,7 +8818,7 @@ class MemberGroupInfoContext::Private { if (!m_cache.memberGroups) { - m_cache.memberGroups.reset(MemberGroupListContext::alloc(m_def,m_relPath,0)); + m_cache.memberGroups.reset(MemberGroupListContext::alloc()); } return m_cache.memberGroups.get(); } @@ -8895,17 +8895,12 @@ MemberGroupListContext::MemberGroupListContext() : RefCountedContext("MemberGrou p = new Private; } -MemberGroupListContext::MemberGroupListContext(const Definition *def,const QCString &relPath,const MemberGroupList *list) : RefCountedContext("MemberGroupListContext") +MemberGroupListContext::MemberGroupListContext(const Definition *def,const QCString &relPath,const MemberGroupList &list) : RefCountedContext("MemberGroupListContext") { p = new Private; - if (list) + for (const auto &mg : list) { - MemberGroupListIterator mgli(*list); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - p->addMemberGroup(def,relPath,mg); - } + p->addMemberGroup(def,relPath,mg); } } @@ -9180,14 +9175,9 @@ class InheritedMemberInfoListContext::Private : public GenericNodeListContext if (ml) { addMemberList(inheritedFrom,ml,combinedList); - if (ml->getMemberGroupList()) + for (const auto *mg : ml->getMemberGroupList()) { - MemberGroupListIterator mgli(*ml->getMemberGroupList()); - MemberGroup *mg; - for (mgli.toFirst();(mg=mgli.current());++mgli) - { - addMemberList(inheritedFrom,mg->members(),combinedList); - } + addMemberList(inheritedFrom,mg->members(),combinedList); } } } diff --git a/src/context.h b/src/context.h index 19fa0df..8e3c0fb 100644 --- a/src/context.h +++ b/src/context.h @@ -23,6 +23,7 @@ #include "dirdef.h" #include "classdef.h" #include "searchindex.h" +#include "membergroup.h" class Definition; class PageDef; @@ -50,7 +51,6 @@ class MemberNameInfoLinkedMap; class MemberInfo; class MemberGroup; class MemberGroupSDict; -class MemberGroupList; class DotNode; class DotGfxHierarchyTable; @@ -1006,7 +1006,7 @@ class MemberGroupListContext : public RefCountedContext, public TemplateListIntf public: static MemberGroupListContext *alloc() { return new MemberGroupListContext; } - static MemberGroupListContext *alloc(const Definition *def,const QCString &relPath,const MemberGroupList *list) + static MemberGroupListContext *alloc(const Definition *def,const QCString &relPath,const MemberGroupList &list) { return new MemberGroupListContext(def,relPath,list); } static MemberGroupListContext *alloc(const Definition *def,const QCString &relPath,const MemberGroupSDict *dict,bool subGrouping) { return new MemberGroupListContext(def,relPath,dict,subGrouping); } @@ -1020,7 +1020,7 @@ class MemberGroupListContext : public RefCountedContext, public TemplateListIntf private: MemberGroupListContext(); - MemberGroupListContext(const Definition *def,const QCString &relPath,const MemberGroupList *list); + MemberGroupListContext(const Definition *def,const QCString &relPath,const MemberGroupList &list); MemberGroupListContext(const Definition *def,const QCString &relPath,const MemberGroupSDict *mgDict,bool subGrouping); ~MemberGroupListContext(); class Private; diff --git a/src/dotnode.cpp b/src/dotnode.cpp index 86f99a2..b56e258 100644 --- a/src/dotnode.cpp +++ b/src/dotnode.cpp @@ -119,7 +119,7 @@ static UmlDetailLevel getUmlDetailLevelFromConfig() result=UmlDetailLevel::None; } return result; -} +} static QCString escapeTooltip(const QCString &tooltip) { @@ -197,17 +197,11 @@ static void writeBoxMemberList(FTextStream &t, } } // write member groups within the memberlist - MemberGroupList *mgl = ml->getMemberGroupList(); - if (mgl) + for (const auto &mg : ml->getMemberGroupList()) { - MemberGroupListIterator mgli(*mgl); - MemberGroup *mg; - for (mgli.toFirst();(mg=mgli.current());++mgli) + if (mg->members()) { - if (mg->members()) - { - writeBoxMemberList(t,prot,mg->members(),scope,isStatic,skipNames); - } + writeBoxMemberList(t,prot,mg->members(),scope,isStatic,skipNames); } } } diff --git a/src/membergroup.h b/src/membergroup.h index e1dae25..0734344 100644 --- a/src/membergroup.h +++ b/src/membergroup.h @@ -105,18 +105,7 @@ class MemberGroup RefItemVector m_xrefListItems; }; -/** A list of MemberGroup objects. */ -class MemberGroupList : public QList -{ -}; - -/** An iterator for MemberGroup objects in a MemberGroupList. */ -class MemberGroupListIterator : public QListIterator -{ - public: - MemberGroupListIterator(const MemberGroupList &l) : - QListIterator(l) {} -}; +using MemberGroupList = std::vector; /** A sorted dictionary of MemberGroup objects. */ class MemberGroupSDict : public SIntDict diff --git a/src/memberlist.cpp b/src/memberlist.cpp index bbc6e5d..78c9373 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -35,7 +35,6 @@ MemberList::MemberList() : m_listType(MemberListType_pubMethods) { //printf("%p: MemberList::MemberList()\n",this); - memberGroupList=0; m_numDecMembers=-1; // special value indicating that value needs to be computed m_numDecEnumValues=0; m_numDocMembers=-1; // special value indicating that value needs to be computed @@ -48,7 +47,6 @@ MemberList::MemberList() : m_listType(MemberListType_pubMethods) MemberList::MemberList(MemberListType lt) : m_listType(lt) { //printf("%p: MemberList::MemberList(%d)\n",this,lt); - memberGroupList=0; m_numDecMembers=-1; // special value indicating that value needs to be computed m_numDecEnumValues=0; m_numDocMembers=-1; // special value indicating that value needs to be computed @@ -60,7 +58,6 @@ MemberList::MemberList(MemberListType lt) : m_listType(lt) MemberList::~MemberList() { - delete memberGroupList; } int genericCompareMembers(const MemberDef *c1,const MemberDef *c2) @@ -126,14 +123,9 @@ int MemberList::countInheritableMembers(const ClassDef *inheritedFrom) const } } } - if (memberGroupList) + for (const auto &mg : m_memberGroupList) { - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - count+=mg->countInheritableMembers(inheritedFrom); - } + count+=mg->countInheritableMembers(inheritedFrom); } //printf("%s::countInheritableMembers(%s)=%d\n", // listTypeAsString().data(), @@ -208,28 +200,23 @@ void MemberList::countDecMembers() } } } - if (memberGroupList) + for (const auto &mg : m_memberGroupList) { - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->countDecMembers(); - /* - m_varCnt+=mg->varCount(); - m_funcCnt+=mg->funcCount(); - m_enumCnt+=mg->enumCount(); - m_enumValCnt+=mg->enumValueCount(); - m_typeCnt+=mg->typedefCount(); - m_seqCnt+=mg->sequenceCount(); - m_dictCnt+=mg->dictionaryCount(); - m_protoCnt+=mg->protoCount(); - m_defCnt+=mg->defineCount(); - m_friendCnt+=mg->friendCount(); - */ - m_numDecMembers+=mg->numDecMembers(); - m_numDecEnumValues+=mg->numDecEnumValues(); - } + mg->countDecMembers(); + /* + m_varCnt+=mg->varCount(); + m_funcCnt+=mg->funcCount(); + m_enumCnt+=mg->enumCount(); + m_enumValCnt+=mg->enumValueCount(); + m_typeCnt+=mg->typedefCount(); + m_seqCnt+=mg->sequenceCount(); + m_dictCnt+=mg->dictionaryCount(); + m_protoCnt+=mg->protoCount(); + m_defCnt+=mg->defineCount(); + m_friendCnt+=mg->friendCount(); + */ + m_numDecMembers+=mg->numDecMembers(); + m_numDecEnumValues+=mg->numDecEnumValues(); } //printf("----- end countDecMembers ----\n"); @@ -254,16 +241,11 @@ void MemberList::countDocMembers() m_numDocMembers++; } } - if (memberGroupList) + for (const auto &mg : m_memberGroupList) { - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->countDocMembers(); - m_numDocMembers+=mg->numDocMembers(); - m_numDocEnumValues+=mg->numDocEnumValues(); - } + mg->countDocMembers(); + m_numDocMembers+=mg->numDocMembers(); + m_numDocEnumValues+=mg->numDocEnumValues(); } //printf("MemberList::countDocMembers()=%d memberGroupList=%p\n",m_numDocMembers,memberGroupList); } @@ -348,14 +330,9 @@ void MemberList::setAnonymousEnumType() } } } - if (memberGroupList) + for (const auto &mg : m_memberGroupList) { - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->setAnonymousEnumType(); - } + mg->setAnonymousEnumType(); } } @@ -718,39 +695,33 @@ void MemberList::writeDeclarations(OutputList &ol, } //printf("memberGroupList=%p\n",memberGroupList); - if (memberGroupList) + for (const auto &mg : m_memberGroupList) { - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - while ((mg=mgli.current())) + bool hasHeader=!mg->header().isEmpty() && mg->header()!="[NOHEADER]"; + if (inheritId.isEmpty()) { - bool hasHeader=!mg->header().isEmpty() && mg->header()!="[NOHEADER]"; - if (inheritId.isEmpty()) + //printf("mg->header=%s hasHeader=%d\n",mg->header().data(),hasHeader); + ol.startMemberGroupHeader(hasHeader); + if (hasHeader) { - //printf("mg->header=%s hasHeader=%d\n",mg->header().data(),hasHeader); - ol.startMemberGroupHeader(hasHeader); - if (hasHeader) - { - ol.parseText(mg->header()); - } - ol.endMemberGroupHeader(); - if (!mg->documentation().isEmpty()) - { - //printf("Member group has docs!\n"); - ol.startMemberGroupDocs(); - ol.generateDoc(mg->docFile(),mg->docLine(),ctx,0,mg->documentation()+"\n",FALSE,FALSE, - 0,FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT)); - ol.endMemberGroupDocs(); - } - ol.startMemberGroup(); + ol.parseText(mg->header()); } - //printf("--- mg->writePlainDeclarations ---\n"); - mg->writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId); - if (inheritId.isEmpty()) + ol.endMemberGroupHeader(); + if (!mg->documentation().isEmpty()) { - ol.endMemberGroup(hasHeader); + //printf("Member group has docs!\n"); + ol.startMemberGroupDocs(); + ol.generateDoc(mg->docFile(),mg->docLine(),ctx,0,mg->documentation()+"\n",FALSE,FALSE, + 0,FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT)); + ol.endMemberGroupDocs(); } - ++mgli; + ol.startMemberGroup(); + } + //printf("--- mg->writePlainDeclarations ---\n"); + mg->writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId); + if (inheritId.isEmpty()) + { + ol.endMemberGroup(hasHeader); } } } @@ -834,15 +805,10 @@ void MemberList::writeDocumentation(OutputList &ol, } } } - if (memberGroupList) + //printf("MemberList::writeDocumentation() -- member groups %d\n",memberGroupList->count()); + for (const auto &mg : m_memberGroupList) { - //printf("MemberList::writeDocumentation() -- member groups %d\n",memberGroupList->count()); - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->writeDocumentation(ol,scopeName,container,showEnumValues,showInline); - } + mg->writeDocumentation(ol,scopeName,container,showEnumValues,showInline); } ol.endMemberDocList(); } @@ -953,26 +919,15 @@ void MemberList::writeDocumentationPage(OutputList &ol, } } } - if (memberGroupList) + for (const auto &mg : m_memberGroupList) { - //printf("MemberList::writeDocumentation() -- member groups\n"); - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->writeDocumentationPage(ol,scopeName,container); - } + mg->writeDocumentationPage(ol,scopeName,container); } } void MemberList::addMemberGroup(MemberGroup *mg) { - if (memberGroupList==0) - { - memberGroupList=new MemberGroupList; - } - //printf("addMemberGroup: this=%p mg=%p\n",this,mg); - memberGroupList->append(mg); + m_memberGroupList.push_back(mg); } void MemberList::addListReferences(Definition *def) @@ -1003,14 +958,9 @@ void MemberList::addListReferences(Definition *def) } } } - if (memberGroupList) + for (const auto &mg : m_memberGroupList) { - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->addListReferences(def); - } + mg->addListReferences(def); } } @@ -1026,14 +976,9 @@ void MemberList::findSectionsInDocumentation(const Definition *d) md->findSectionsInDocumentation(); } } - if (memberGroupList) + for (const auto &mg : m_memberGroupList) { - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->findSectionsInDocumentation(d); - } + mg->findSectionsInDocumentation(d); } } @@ -1132,14 +1077,9 @@ void MemberList::writeTagFile(FTextStream &tagFile) } } } - if (memberGroupList) + for (const auto &mg : m_memberGroupList) { - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->writeTagFile(tagFile); - } + mg->writeTagFile(tagFile); } } diff --git a/src/memberlist.h b/src/memberlist.h index e62655b..e9e14dd 100644 --- a/src/memberlist.h +++ b/src/memberlist.h @@ -16,14 +16,15 @@ #ifndef MEMBERLIST_H #define MEMBERLIST_H +#include + #include #include "memberdef.h" #include "sortdict.h" #include "types.h" +#include "membergroup.h" class GroupDef; -class MemberGroup; -class MemberGroupList; /** A list of MemberDef objects. */ class MemberList : private QList @@ -88,7 +89,7 @@ class MemberList : private QList void addListReferences(Definition *def); void findSectionsInDocumentation(const Definition *d); void setNeedsSorting(bool b); - MemberGroupList *getMemberGroupList() const { return memberGroupList; } + const MemberGroupList &getMemberGroupList() const { return m_memberGroupList; } void setAnonymousEnumType(); void setAnchors(); @@ -110,7 +111,7 @@ class MemberList : private QList int m_numDecEnumValues; int m_numDocMembers; // number of members in the detailed part of the memberlist int m_numDocEnumValues; - MemberGroupList *memberGroupList; + MemberGroupList m_memberGroupList; bool m_inGroup; // is this list part of a group definition bool m_inFile; // is this list part of a file definition MemberListType m_listType; diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp index dd208aa..f75cf35 100644 --- a/src/vhdldocgen.cpp +++ b/src/vhdldocgen.cpp @@ -2169,17 +2169,11 @@ static bool membersHaveSpecificType(const MemberList *ml,uint64 type) return TRUE; } } - if (ml->getMemberGroupList()) + for (const auto &mg : ml->getMemberGroupList()) { - MemberGroupListIterator mgli(*ml->getMemberGroupList()); - MemberGroup *mg; - while ((mg=mgli.current())) + if (mg->members()) { - if (mg->members()) - { - if (membersHaveSpecificType(mg->members(),type)) return TRUE; - } - ++mgli; + if (membersHaveSpecificType(mg->members(),type)) return TRUE; } } return FALSE; @@ -2208,36 +2202,30 @@ void VhdlDocGen::writeVHDLDeclarations(const MemberList* ml,OutputList &ol, VhdlDocGen::writePlainVHDLDeclarations(ml,ol,cd,nd,fd,gd,type); - if (ml->getMemberGroupList()) + for (const auto &mg : ml->getMemberGroupList()) { - MemberGroupListIterator mgli(*ml->getMemberGroupList()); - MemberGroup *mg; - while ((mg=mgli.current())) + if (membersHaveSpecificType(mg->members(),type)) { - if (membersHaveSpecificType(mg->members(),type)) + //printf("mg->header=%s\n",mg->header().data()); + bool hasHeader=mg->header()!="[NOHEADER]"; + ol.startMemberGroupHeader(hasHeader); + if (hasHeader) { - //printf("mg->header=%s\n",mg->header().data()); - bool hasHeader=mg->header()!="[NOHEADER]"; - ol.startMemberGroupHeader(hasHeader); - if (hasHeader) - { - ol.parseText(mg->header()); - } - ol.endMemberGroupHeader(); - if (!mg->documentation().isEmpty()) - { - //printf("Member group has docs!\n"); - ol.startMemberGroupDocs(); - ol.generateDoc("[generated]",-1,0,0,mg->documentation()+"\n",FALSE,FALSE, - 0,FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT)); - ol.endMemberGroupDocs(); - } - ol.startMemberGroup(); - //printf("--- mg->writePlainDeclarations ---\n"); - VhdlDocGen::writePlainVHDLDeclarations(mg->members(),ol,cd,nd,fd,gd,type); - ol.endMemberGroup(hasHeader); + ol.parseText(mg->header()); + } + ol.endMemberGroupHeader(); + if (!mg->documentation().isEmpty()) + { + //printf("Member group has docs!\n"); + ol.startMemberGroupDocs(); + ol.generateDoc("[generated]",-1,0,0,mg->documentation()+"\n",FALSE,FALSE, + 0,FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT)); + ol.endMemberGroupDocs(); } - ++mgli; + ol.startMemberGroup(); + //printf("--- mg->writePlainDeclarations ---\n"); + VhdlDocGen::writePlainVHDLDeclarations(mg->members(),ol,cd,nd,fd,gd,type); + ol.endMemberGroup(hasHeader); } } }// writeVHDLDeclarations -- cgit v0.12