From 5d980fa30b6524d3d53867e6fd8d6edb67a37eeb Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Mon, 4 Jan 2021 17:08:58 +0100 Subject: Refactoring: avoid copying MemberLists by not embedding them directly --- src/classdef.cpp | 47 +++++++++++++++++++++++------------------------ src/defgen.cpp | 4 ++-- src/filedef.cpp | 46 +++++++++++++++++++++++----------------------- src/groupdef.cpp | 38 +++++++++++++++++++------------------- src/index.cpp | 4 ++-- src/memberlist.h | 10 ++++++---- src/namespacedef.cpp | 44 ++++++++++++++++++++++---------------------- src/sqlite3gen.cpp | 16 ++++++++-------- src/xmlgen.cpp | 16 ++++++++-------- 9 files changed, 113 insertions(+), 112 deletions(-) diff --git a/src/classdef.cpp b/src/classdef.cpp index 5a3c75d..9777f05 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -851,9 +851,9 @@ void ClassDefImpl::addMembersToMemberGroup() { 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.get(),&m_impl->memberGroups,this); } } @@ -1100,8 +1100,7 @@ void ClassDefImpl::internalInsertMember(MemberDef *md, case MemberType_Function: if (md->isConstructor() || md->isDestructor()) { - MemberList &ml = m_impl->memberLists.get(MemberListType_constructors); - ml.append(md); + m_impl->memberLists.get(MemberListType_constructors)->append(md); } else { @@ -1167,9 +1166,9 @@ void ClassDefImpl::computeAnchors() { for (auto &ml : m_impl->memberLists) { - if ((ml.listType()&MemberListType_detailedLists)==0) + if ((ml->listType()&MemberListType_detailedLists)==0) { - ml.setAnchors(); + ml->setAnchors(); } } @@ -1197,9 +1196,9 @@ void ClassDefImpl::findSectionsInDocumentation() } for (auto &ml : m_impl->memberLists) { - if ((ml.listType()&MemberListType_detailedLists)==0) + if ((ml->listType()&MemberListType_detailedLists)==0) { - ml.findSectionsInDocumentation(this); + ml->findSectionsInDocumentation(this); } } } @@ -2762,9 +2761,9 @@ void ClassDefImpl::writeMemberPages(OutputList &ol) const 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); } } @@ -4169,9 +4168,9 @@ void ClassDefImpl::addListReferences() } for (auto &ml : m_impl->memberLists) { - if (ml.listType()&MemberListType_detailedLists) + if (ml->listType()&MemberListType_detailedLists) { - ml.addListReferences(this); + ml->addListReferences(this); } } } @@ -4210,9 +4209,9 @@ MemberList *ClassDefImpl::getMemberList(MemberListType lt) const { for (auto &ml : m_impl->memberLists) { - if (ml.listType()==lt) + if (ml->listType()==lt) { - return &ml; + return ml.get(); } } return 0; @@ -4222,17 +4221,17 @@ 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 = m_impl->memberLists.get(lt); - ml.setNeedsSorting((isBrief && sortBriefDocs) || (!isBrief && sortMemberDocs)); - ml.append(md); + const auto &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.get()); } } } @@ -4241,7 +4240,7 @@ void ClassDefImpl::sortMemberLists() { 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(), @@ -4321,8 +4320,8 @@ void ClassDefImpl::countMembers() { for (auto &ml : m_impl->memberLists) { - ml.countDecMembers(); - ml.countDocMembers(); + ml->countDecMembers(); + ml->countDocMembers(); } for (const auto &mg : m_impl->memberGroups) { @@ -4837,7 +4836,7 @@ void ClassDefImpl::reclassifyMember(MemberDefMutable *md,MemberType t) md->setMemberType(t); for (auto &ml : m_impl->memberLists) { - ml.remove(md); + ml->remove(md); } insertMember(md); } @@ -4904,7 +4903,7 @@ void ClassDefImpl::removeMemberFromLists(MemberDef *md) { for (auto &ml : m_impl->memberLists) { - ml.remove(md); + ml->remove(md); } } diff --git a/src/defgen.cpp b/src/defgen.cpp index 4e2eb88..89f7568 100644 --- a/src/defgen.cpp +++ b/src/defgen.cpp @@ -394,9 +394,9 @@ void generateDEFForClass(ClassDef *cd,FTextStream &t) int numMembers = 0; 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 917af49..2fb2af7 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -297,9 +297,9 @@ void FileDefImpl::findSectionsInDocumentation() for (auto &ml : m_memberLists) { - if (ml.listType()&MemberListType_declarationLists) + if (ml->listType()&MemberListType_declarationLists) { - ml.findSectionsInDocumentation(this); + ml->findSectionsInDocumentation(this); } } } @@ -1043,9 +1043,9 @@ void FileDefImpl::writeMemberPages(OutputList &ol) 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); } } @@ -1240,9 +1240,9 @@ void FileDefImpl::addMembersToMemberGroup() { for (auto &ml : m_memberLists) { - if (ml.listType()&MemberListType_declarationLists) + if (ml->listType()&MemberListType_declarationLists) { - ::addMembersToMemberGroup(&ml,&m_memberGroups,this); + ::addMembersToMemberGroup(ml.get(),&m_memberGroups,this); } } @@ -1271,8 +1271,8 @@ void FileDefImpl::insertMember(MemberDef *md) if (allMemberList==0) { - m_memberLists.emplace_back(MemberListType_allMembersList); - allMemberList = &m_memberLists.back(); + m_memberLists.emplace_back(std::make_unique(MemberListType_allMembersList)); + allMemberList = m_memberLists.back().get(); } allMemberList->append(md); //::addFileMemberNameToIndex(md); @@ -1535,9 +1535,9 @@ void FileDefImpl::addListReferences() } for (auto &ml : m_memberLists) { - if (ml.listType()&MemberListType_documentationLists) + if (ml->listType()&MemberListType_documentationLists) { - ml.addListReferences(this); + ml->addListReferences(this); } } } @@ -1881,21 +1881,21 @@ 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 = m_memberLists.get(lt); - ml.setNeedsSorting( - ((ml.listType()&MemberListType_declarationLists) && sortBriefDocs) || - ((ml.listType()&MemberListType_documentationLists) && sortMemberDocs)); - ml.append(md); + const auto &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.get()); } } } @@ -1904,7 +1904,7 @@ void FileDefImpl::sortMemberLists() { 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) @@ -1940,9 +1940,9 @@ MemberList *FileDefImpl::getMemberList(MemberListType lt) const { for (auto &ml : m_memberLists) { - if (ml.listType()==lt) + if (ml->listType()==lt) { - return const_cast(&ml); + return ml.get(); } } return 0; @@ -2029,8 +2029,8 @@ void FileDefImpl::countMembers() { for (auto &ml : m_memberLists) { - ml.countDecMembers(); - ml.countDocMembers(); + ml->countDecMembers(); + ml->countDocMembers(); } for (const auto &mg : m_memberGroups) { diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 53a24f2..cd3cc01 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -226,9 +226,9 @@ void GroupDefImpl::findSectionsInDocumentation() for (auto &ml : m_memberLists) { - if (ml.listType()&MemberListType_declarationLists) + if (ml->listType()&MemberListType_declarationLists) { - ml.findSectionsInDocumentation(this); + ml->findSectionsInDocumentation(this); } } } @@ -294,9 +294,9 @@ void GroupDefImpl::addMembersToMemberGroup() { for (auto &ml : m_memberLists) { - if (ml.listType()&MemberListType_declarationLists) + if (ml->listType()&MemberListType_declarationLists) { - ::addMembersToMemberGroup(&ml,&m_memberGroups,this); + ::addMembersToMemberGroup(ml.get(),&m_memberGroups,this); } } @@ -569,8 +569,8 @@ void GroupDefImpl::countMembers() { for (auto &ml : m_memberLists) { - ml.countDecMembers(); - ml.countDocMembers(); + ml->countDecMembers(); + ml->countDocMembers(); } for (const auto &mg : m_memberGroups) { @@ -1259,9 +1259,9 @@ void GroupDefImpl::writeMemberPages(OutputList &ol) 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); } } @@ -1534,9 +1534,9 @@ void GroupDefImpl::addListReferences() } for (auto &ml : m_memberLists) { - if (ml.listType()&MemberListType_documentationLists) + if (ml->listType()&MemberListType_documentationLists) { - ml.addListReferences(this); + ml->addListReferences(this); } } } @@ -1545,12 +1545,12 @@ 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 = m_memberLists.get(lt); - ml.setInGroup(true); - ml.setNeedsSorting( - ((ml.listType()&MemberListType_declarationLists) && sortBriefDocs) || - ((ml.listType()&MemberListType_documentationLists) && sortMemberDocs)); - ml.append(md); + const auto &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 @@ -1618,7 +1618,7 @@ void GroupDefImpl::sortMemberLists() { 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)) { @@ -1650,9 +1650,9 @@ MemberList *GroupDefImpl::getMemberList(MemberListType lt) const { for (auto &ml : m_memberLists) { - if (ml.listType()==lt) + if (ml->listType()==lt) { - return const_cast(&ml); + return ml.get(); } } return 0; diff --git a/src/index.cpp b/src/index.cpp index 7089a0c..e2e5ea1 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -3761,9 +3761,9 @@ static void writeGroupTreeNode(OutputList &ol, const GroupDef *gd, int level, FT { 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/memberlist.h b/src/memberlist.h index d2433f4..08e2873 100644 --- a/src/memberlist.h +++ b/src/memberlist.h @@ -95,6 +95,8 @@ class MemberList : private QList void setAnchors(); private: + MemberList(const MemberList &) = delete; + MemberList &operator=(const MemberList &) = delete; int compareValues(const MemberDef *item1,const MemberDef *item2) const; int countEnumValues(const MemberDef *md) const; /* @@ -132,17 +134,17 @@ class MemberLinkedRefMap : public LinkedRefMap { }; -class MemberLists : public std::vector +class MemberLists : public std::vector< std::unique_ptr > { public: MemberLists() = default; - MemberList &get(MemberListType lt) + const std::unique_ptr &get(MemberListType lt) { // find the list with the given type - auto it = std::find_if(begin(),end(),[<](const auto &ml) { return ml.listType()==lt; }); + 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); + emplace_back(std::make_unique(lt)); return back(); } diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index f1ac814..d0a88f0 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -319,9 +319,9 @@ void NamespaceDefImpl::findSectionsInDocumentation() } for (auto &ml : m_memberLists) { - if (ml.listType()&MemberListType_declarationLists) + if (ml->listType()&MemberListType_declarationLists) { - ml.findSectionsInDocumentation(this); + ml->findSectionsInDocumentation(this); } } } @@ -384,9 +384,9 @@ void NamespaceDefImpl::addMembersToMemberGroup() { for (auto &ml : m_memberLists) { - if (ml.listType()&MemberListType_declarationLists) + if (ml->listType()&MemberListType_declarationLists) { - ::addMembersToMemberGroup(&ml,&m_memberGroups,this); + ::addMembersToMemberGroup(ml.get(),&m_memberGroups,this); } } @@ -444,8 +444,8 @@ void NamespaceDefImpl::insertMember(MemberDef *md) MemberList *allMemberList = getMemberList(MemberListType_allMembersList); if (allMemberList==0) { - m_memberLists.emplace_back(MemberListType_allMembersList); - allMemberList = &m_memberLists.back(); + m_memberLists.emplace_back(std::make_unique(MemberListType_allMembersList)); + allMemberList = m_memberLists.back().get(); } allMemberList->append(md); //printf("%s::m_allMembersDict->append(%s)\n",name().data(),md->localName().data()); @@ -1050,9 +1050,9 @@ void NamespaceDefImpl::writeMemberPages(OutputList &ol) 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(); @@ -1105,8 +1105,8 @@ void NamespaceDefImpl::countMembers() { for (auto &ml : m_memberLists) { - ml.countDecMembers(); - ml.countDocMembers(); + ml->countDecMembers(); + ml->countDocMembers(); } for (const auto &mg : m_memberGroups) { @@ -1176,9 +1176,9 @@ void NamespaceDefImpl::addListReferences() } for (auto &ml : m_memberLists) { - if (ml.listType()&MemberListType_documentationLists) + if (ml->listType()&MemberListType_documentationLists) { - ml.addListReferences(this); + ml->addListReferences(this); } } } @@ -1329,18 +1329,18 @@ 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 = m_memberLists.get(lt); - ml.setNeedsSorting( - ((ml.listType()&MemberListType_declarationLists) && sortBriefDocs) || - ((ml.listType()&MemberListType_documentationLists) && sortMemberDocs)); - ml.append(md); + const auto &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.get()); } } } @@ -1349,7 +1349,7 @@ void NamespaceDefImpl::sortMemberLists() { 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)) @@ -1381,9 +1381,9 @@ MemberList *NamespaceDefImpl::getMemberList(MemberListType lt) const { for (auto &ml : m_memberLists) { - if (ml.listType()==lt) + if (ml->listType()==lt) { - return const_cast(&ml); + return ml.get(); } } return 0; diff --git a/src/sqlite3gen.cpp b/src/sqlite3gen.cpp index eb5da5e..67adebf 100644 --- a/src/sqlite3gen.cpp +++ b/src/sqlite3gen.cpp @@ -2014,9 +2014,9 @@ static void generateSqlite3ForClass(const ClassDef *cd) // this is just a list of *local* members 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.get(),refid,"user-defined"); } } @@ -2071,9 +2071,9 @@ static void generateSqlite3ForNamespace(const NamespaceDef *nd) // + normal members 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.get(),refid,"user-defined"); } } } @@ -2226,9 +2226,9 @@ static void generateSqlite3ForFile(const FileDef *fd) // + normal members 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.get(),refid,"user-defined"); } } } @@ -2293,9 +2293,9 @@ static void generateSqlite3ForGroup(const GroupDef *gd) // + members 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.get(),refid,"user-defined"); } } } diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 1831a98..5a7eabd 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -1363,9 +1363,9 @@ static void generateXMLForClass(const ClassDef *cd,FTextStream &ti) 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.get(),g_xmlSectionMapper.find(ml->listType())); } } @@ -1460,9 +1460,9 @@ static void generateXMLForNamespace(const NamespaceDef *nd,FTextStream &ti) 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.get(),g_xmlSectionMapper.find(ml->listType())); } } @@ -1584,9 +1584,9 @@ static void generateXMLForFile(FileDef *fd,FTextStream &ti) 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.get(),g_xmlSectionMapper.find(ml->listType())); } } @@ -1657,9 +1657,9 @@ static void generateXMLForGroup(const GroupDef *gd,FTextStream &ti) 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.get(),g_xmlSectionMapper.find(ml->listType())); } } -- cgit v0.12