diff options
Diffstat (limited to 'src/memberlist.cpp')
-rw-r--r-- | src/memberlist.cpp | 276 |
1 files changed, 84 insertions, 192 deletions
diff --git a/src/memberlist.cpp b/src/memberlist.cpp index c71390c..bd89739 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -15,8 +15,6 @@ * */ -#include <qregexp.h> - #include "memberlist.h" #include "classdef.h" #include "message.h" @@ -75,7 +73,7 @@ int genericCompareMembers(const MemberDef *c1,const MemberDef *c2) // sort on name int cmp = qstricmp(c1->name(),c2->name()); // then on argument list - if (cmp==0 && c1->argsString() && c2->argsString()) + if (cmp==0 && !c1->argsString().isEmpty() && !c2->argsString().isEmpty()) { cmp = qstricmp(c1->argsString(),c2->argsString()); } @@ -92,25 +90,18 @@ int genericCompareMembers(const MemberDef *c1,const MemberDef *c2) return cmp; } -int MemberList::compareValues(const MemberDef *c1, const MemberDef *c2) const -{ - return genericCompareMembers(c1,c2); -} - int MemberList::countInheritableMembers(const ClassDef *inheritedFrom) const { int count=0; - QListIterator<MemberDef> mli(*this); - const MemberDef *md; - for (mli.toFirst();(md=mli.current());++mli) + for (const auto &md : m_members) { if (md->isBriefSectionVisible()) { if (md->memberType()!=MemberType_Friend && md->memberType()!=MemberType_EnumValue) { - //printf("member %s: isReimplementedBy(%s)=%d\n",md->name().data(), - // inheritedFrom->name().data(), + //printf("member %s: isReimplementedBy(%s)=%d\n",qPrint(md->name()), + // qPrint(inheritedFrom->name()), // md->isReimplementedBy(inheritedFrom)); if (md->memberType()==MemberType_Function) { @@ -128,8 +119,8 @@ int MemberList::countInheritableMembers(const ClassDef *inheritedFrom) const count+=mg->countInheritableMembers(inheritedFrom); } //printf("%s::countInheritableMembers(%s)=%d\n", - // listTypeAsString().data(), - // inheritedFrom->name().data(),count); + // qPrint(listTypeAsString()), + // qPrint(inheritedFrom->name()),count); return count; } @@ -146,11 +137,9 @@ void MemberList::countDecMembers() m_typeCnt=m_seqCnt=m_dictCnt=m_protoCnt=m_defCnt=m_friendCnt=0; */ m_numDecMembers=0; - QListIterator<MemberDef> mli(*this); - MemberDef *md; - for (mli.toFirst();(md=mli.current());++mli) + for (const auto &md : m_members) { - //printf("MemberList::countDecMembers(md=%s,%d)\n",md->name().data(),md->isBriefSectionVisible()); + //printf("MemberList::countDecMembers(md=%s,%d)\n",qPrint(md->name()),md->isBriefSectionVisible()); if (md->isBriefSectionVisible()) { switch(md->memberType()) @@ -187,7 +176,7 @@ void MemberList::countDecMembers() break; //case MemberType_Prototype: m_protoCnt++,m_numDecMembers++; break; case MemberType_Define: if (Config_getBool(EXTRACT_ALL) || - md->argsString() || + !md->argsString().isEmpty() || !md->initializer().isEmpty() || md->hasDocumentation() ) /*m_defCnt++,*/ m_numDecMembers++; @@ -196,7 +185,7 @@ void MemberList::countDecMembers() m_numDecMembers++; break; default: - err("Unknown member type found for member '%s'\n!",md->name().data()); + err("Unknown member type found for member '%s'\n!",qPrint(md->name())); } } } @@ -227,9 +216,7 @@ void MemberList::countDocMembers() { if (m_numDocMembers!=-1) return; // used cached value m_numDocMembers=0; - QListIterator<MemberDef> mli(*this); - MemberDef *md; - for (mli.toFirst();(md=mli.current());++mli) + for (const auto &md : m_members) { if (md->isDetailedSectionVisible(m_inGroup,m_inFile) && !md->isAlias()) { @@ -250,57 +237,10 @@ void MemberList::countDocMembers() //printf("MemberList::countDocMembers()=%d memberGroupList=%p\n",m_numDocMembers,memberGroupList); } -void MemberList::inSort(const MemberDef *md) -{ - QList<MemberDef>::inSort(md); -} - -void MemberList::append(const MemberDef *md) -{ - QList<MemberDef>::append(md); -} - -void MemberList::remove(const MemberDef *md) -{ - QList<MemberDef>::remove(md); -} - -void MemberList::sort() -{ - QList<MemberDef>::sort(); -} - -uint MemberList::count() const -{ - return QList<MemberDef>::count(); -} - -int MemberList::findRef(const MemberDef *md) const -{ - return QList<MemberDef>::findRef(md); -} - -MemberDef *MemberList::getFirst() const -{ - return QList<MemberDef>::getFirst(); -} - -MemberDef *MemberList::take(uint index) -{ - return QList<MemberDef>::take(index); -} - -MemberListIterator::MemberListIterator(const MemberList &l) : - QListIterator<MemberDef>(l) -{ -} - void MemberList::setAnonymousEnumType() { //printf("MemberList(%p)::setAnonymousEnumType()\n",this); - MemberListIterator mli(*this); - const MemberDef *md; - for ( ; (md=mli.current()); ++mli ) + for (const auto &md : m_members) { if (md->isBriefSectionVisible()) { @@ -309,21 +249,15 @@ void MemberList::setAnonymousEnumType() if (i!=-1) name=name.right(name.length()-i-2); if (md->memberType()==MemberType_Enumeration && name[0]=='@') { - const MemberList *mfl = md->enumFieldList(); - if (mfl) + for (const auto &vmd : md->enumFieldList()) { - MemberListIterator vmli(*mfl); - MemberDef *vmd; - for ( ; (vmd=vmli.current()) ; ++vmli) + MemberDefMutable *vmdm = toMemberDefMutable(vmd); + if (vmdm) { - MemberDefMutable *vmdm = toMemberDefMutable(vmd); - if (vmdm) + QCString vtype=vmd->typeString(); + if ((vtype.find(name))!=-1) { - QCString vtype=vmd->typeString(); - if ((vtype.find(name))!=-1) - { - vmdm->setAnonymousEnumType(md); - } + vmdm->setAnonymousEnumType(md); } } } @@ -339,14 +273,12 @@ void MemberList::setAnonymousEnumType() int MemberList::countEnumValues(const MemberDef *md) const { int numEnumValues=0; - MemberListIterator vmli(*this); - const MemberDef *vmd; QCString name(md->name()); int i=name.findRev("::"); if (i!=-1) name=name.right(name.length()-i-2); if (name[0]=='@') { - for ( ; (vmd=vmli.current()) ; ++vmli) + for (const auto &vmd : m_members) { QCString vtype=vmd->typeString(); if ((vtype.find(name))!=-1) @@ -360,9 +292,7 @@ int MemberList::countEnumValues(const MemberDef *md) const bool MemberList::declVisible() const { - MemberListIterator mli(*this); - const MemberDef *md; - for ( ; (md=mli.current()); ++mli ) + for (const auto &md : m_members) { if (md->isBriefSectionVisible()) { @@ -410,7 +340,7 @@ bool MemberList::declVisible() const void MemberList::writePlainDeclarations(OutputList &ol, const ClassDef *cd,const NamespaceDef *nd,const FileDef *fd, - const GroupDef *gd,const ClassDef *inheritedFrom,const char *inheritId + const GroupDef *gd,const ClassDef *inheritedFrom,const QCString &inheritId ) const { //printf("----- writePlainDeclaration() ----\n"); @@ -430,12 +360,10 @@ void MemberList::writePlainDeclarations(OutputList &ol, ol.pushGeneratorState(); bool first=TRUE; - const MemberDef *md; - MemberListIterator mli(*this); - for ( ; (md=mli.current()); ++mli ) + for (const auto &md : m_members) { //printf(">>> Member '%s' type=%d visible=%d\n", - // md->name().data(),md->memberType(),md->isBriefSectionVisible()); + // qPrint(md->name()),md->memberType(),md->isBriefSectionVisible()); if ((inheritedFrom==0 || !md->isReimplementedBy(inheritedFrom)) && md->isBriefSectionVisible()) { @@ -478,7 +406,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, bool detailsLinkable = md->isDetailedSectionLinkable(); if (!detailsLinkable) { - ol.startDoxyAnchor(md->getOutputFileBase(),0,md->anchor(),md->name(),QCString()); + ol.startDoxyAnchor(md->getOutputFileBase(),QCString(),md->anchor(),md->name(),QCString()); } if (md->isSliceLocal()) { @@ -503,7 +431,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, cd,md, md->briefDescription(), TRUE,FALSE, - 0,TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT) + QCString(),TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT) ); if (rootNode && !rootNode->isEmpty()) { @@ -557,7 +485,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, // no variables of the anonymous compound type exist. if (cd) { - for ( mli.toFirst(); (md=mli.current()) ; ++mli ) + for (const auto &md : m_members) { if (md->fromAnonymousScope() && !md->anonymousDeclShown()) { @@ -604,7 +532,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, */ void MemberList::writeDeclarations(OutputList &ol, const ClassDef *cd,const NamespaceDef *nd,const FileDef *fd,const GroupDef *gd, - const char *title,const char *subtitle, bool showEnumValues, + const QCString &title,const QCString &subtitle, bool showEnumValues, bool showInline,const ClassDef *inheritedFrom,MemberListType lt) const { (void)showEnumValues; // unused @@ -633,7 +561,7 @@ void MemberList::writeDeclarations(OutputList &ol, ol.disableAllBut(OutputGenerator::Html); inheritId = substitute(listTypeAsString(lt),"-","_")+"_"+ stripPath(cd->getOutputFileBase()); - if (title) + if (!title.isEmpty()) { ol.writeInheritedSectionTitle(inheritId,cd->getReference(), cd->getOutputFileBase(), @@ -644,7 +572,7 @@ void MemberList::writeDeclarations(OutputList &ol, } else if (num>numEnumValues) { - if (title) + if (!title.isEmpty()) { if (showInline) { @@ -664,17 +592,12 @@ void MemberList::writeDeclarations(OutputList &ol, ol.endMemberHeader(); } } - if (subtitle) + if (!subtitle.stripWhiteSpace().isEmpty()) { - QCString st=subtitle; - st = st.stripWhiteSpace(); - if (!st.isEmpty()) - { - ol.startMemberSubtitle(); - ol.generateDoc("[generated]",-1,ctx,0,subtitle,FALSE,FALSE, - 0,FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT)); - ol.endMemberSubtitle(); - } + ol.startMemberSubtitle(); + ol.generateDoc("[generated]",-1,ctx,0,subtitle,FALSE,FALSE, + QCString(),FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT)); + ol.endMemberSubtitle(); } } if (num>numEnumValues) @@ -700,7 +623,7 @@ void MemberList::writeDeclarations(OutputList &ol, bool hasHeader=!mg->header().isEmpty() && mg->header()!="[NOHEADER]"; if (inheritId.isEmpty()) { - //printf("mg->header=%s hasHeader=%d\n",mg->header().data(),hasHeader); + //printf("mg->header=%s hasHeader=%d\n",qPrint(mg->header()),hasHeader); ol.startMemberGroupHeader(hasHeader); if (hasHeader) { @@ -712,7 +635,7 @@ void MemberList::writeDeclarations(OutputList &ol, //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)); + QCString(),FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT)); ol.endMemberGroupDocs(); } ol.startMemberGroup(); @@ -739,8 +662,8 @@ void MemberList::writeDeclarations(OutputList &ol, } void MemberList::writeDocumentation(OutputList &ol, - const char *scopeName, const Definition *container, - const char *title,bool showEnumValues,bool showInline) const + const QCString &scopeName, const Definition *container, + const QCString &title,bool showEnumValues,bool showInline) const { if (numDocMembers()==-1) { @@ -751,7 +674,7 @@ void MemberList::writeDocumentation(OutputList &ol, if (numDocMembers()==0) return; if (!showEnumValues && numDocMembers()<=numDocEnumValues()) return; - if (title) + if (!title.isEmpty()) { ol.pushGeneratorState(); ol.disable(OutputGenerator::Html); @@ -763,45 +686,36 @@ void MemberList::writeDocumentation(OutputList &ol, } ol.startMemberDocList(); - MemberListIterator mli(*this); - const MemberDef *md; - + struct OverloadInfo + { + uint count = 1; + uint total = 0; + }; + std::unordered_map<std::string,OverloadInfo> overloadInfo; // count the number of overloaded members - QDict<uint> overloadTotalDict(67); - QDict<uint> overloadCountDict(67); - overloadTotalDict.setAutoDelete(TRUE); - overloadCountDict.setAutoDelete(TRUE); - for (mli.toFirst() ; (md=mli.current()) ; ++mli) + for (const auto &md : m_members) { if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) && !(md->isEnumValue() && !showInline)) { - uint *pCount = overloadTotalDict.find(md->name()); - if (pCount) - { - (*pCount)++; - } - else - { - overloadTotalDict.insert(md->name(),new uint(1)); - overloadCountDict.insert(md->name(),new uint(1)); - } + auto it = overloadInfo.insert(std::make_pair(md->name().str(),OverloadInfo())).first; + it->second.total++; } } - for (mli.toFirst() ; (md=mli.current()) ; ++mli) + for (const auto &md : m_members) { if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) && !(md->isEnumValue() && !showInline)) { - uint overloadCount = *overloadTotalDict.find(md->name()); - uint *pCount = overloadCountDict.find(md->name()); + auto it = overloadInfo.find(md->name().str()); + uint overloadCount = it->second.total; + uint &count = it->second.count; MemberDefMutable *mdm = toMemberDefMutable(md); if (mdm) { - mdm->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container, + mdm->writeDocumentation(this,count++,overloadCount,ol,scopeName,container, m_inGroup,showEnumValues,showInline); - (*pCount)++; } } } @@ -826,9 +740,7 @@ void MemberList::writeSimpleDocumentation(OutputList &ol, cd = toClassDef(container); } ol.startMemberDocSimple(cd && cd->isJavaEnum()); - MemberListIterator mli(*this); - const MemberDef *md; - for ( ; (md=mli.current()) ; ++mli) + for (const auto &md : m_members) { MemberDefMutable *mdm = toMemberDefMutable(md); if (mdm) @@ -841,44 +753,38 @@ void MemberList::writeSimpleDocumentation(OutputList &ol, // separate member pages void MemberList::writeDocumentationPage(OutputList &ol, - const char *scopeName, const DefinitionMutable *container) const + const QCString &scopeName, const DefinitionMutable *container) const { static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); + struct OverloadInfo + { + uint count = 1; + uint total = 0; + }; + std::unordered_map<std::string,OverloadInfo> overloadInfo; + // count the number of overloaded members - QDict<uint> overloadTotalDict(67); - QDict<uint> overloadCountDict(67); - overloadTotalDict.setAutoDelete(TRUE); - overloadCountDict.setAutoDelete(TRUE); - MemberListIterator mli(*this); - const MemberDef *imd; - for (mli.toFirst() ; (imd=mli.current()) ; ++mli) + for (const auto &imd : m_members) { MemberDefMutable *md = toMemberDefMutable(imd); - if (md->isDetailedSectionLinkable()) + if (md && md->isDetailedSectionLinkable()) { - uint *pCount = overloadTotalDict.find(md->name()); - if (pCount) - { - (*pCount)++; - } - else - { - overloadTotalDict.insert(md->name(),new uint(1)); - overloadCountDict.insert(md->name(),new uint(1)); - } + auto it = overloadInfo.insert(std::make_pair(md->name().str(),OverloadInfo())).first; + it->second.total++; } } - for ( mli.toFirst() ; (imd=mli.current()) ; ++mli) + for (const auto &imd : m_members) { Definition *container_d = toDefinition(const_cast<DefinitionMutable*>(container)); MemberDefMutable *md = toMemberDefMutable(imd); - if (md->isDetailedSectionLinkable()) + if (md && md->isDetailedSectionLinkable()) { - uint overloadCount = *overloadTotalDict.find(md->name()); - uint *pCount = overloadCountDict.find(md->name()); + auto it = overloadInfo.find(md->name().str()); + uint overloadCount = it->second.total; + uint &count = it->second.count; QCString diskName=md->getOutputFileBase(); QCString title=md->qualifiedName(); startFile(ol,diskName,md->name(),title,HLI_None,!generateTreeView,diskName); @@ -891,8 +797,7 @@ void MemberList::writeDocumentationPage(OutputList &ol, if (generateTreeView) { - md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container_d,m_inGroup); - (*pCount)++; + md->writeDocumentation(this,count++,overloadCount,ol,scopeName,container_d,m_inGroup); ol.endContents(); endFileWithNavPath(container_d,ol); @@ -908,8 +813,7 @@ void MemberList::writeDocumentationPage(OutputList &ol, ol.writeString(" </td>\n"); ol.writeString(" <td valign=\"top\" class=\"mempage\">\n"); - md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container_d,m_inGroup); - (*pCount)++; + md->writeDocumentation(this,count++,overloadCount,ol,scopeName,container_d,m_inGroup); ol.writeString(" </td>\n"); ol.writeString(" </tr>\n"); @@ -932,26 +836,22 @@ void MemberList::addMemberGroup(MemberGroup *mg) void MemberList::addListReferences(Definition *def) { - MemberListIterator mli(*this); - MemberDef *imd; - for ( ; (imd=mli.current()) ; ++mli) + for (const auto &imd : m_members) { MemberDefMutable *md = toMemberDefMutable(imd); if (md && !md->isAlias() && (md->getGroupDef()==0 || def->definitionType()==Definition::TypeGroup)) { md->addListReference(def); - const MemberList *enumFields = md->enumFieldList(); - if (md->memberType()==MemberType_Enumeration && enumFields) + const MemberList &enumFields = md->enumFieldList(); + if (md->memberType()==MemberType_Enumeration && !enumFields.empty()) { //printf(" Adding enum values!\n"); - MemberListIterator vmli(*enumFields); - MemberDef *vmd; - for ( ; (vmd=vmli.current()) ; ++vmli) + for (const auto &vmd : enumFields) { MemberDefMutable *vmdm = toMemberDefMutable(vmd); if (vmdm) { - //printf(" adding %s\n",vmd->name().data()); + //printf(" adding %s\n",qPrint(vmd->name())); vmdm->addListReference(def); } } @@ -966,9 +866,7 @@ void MemberList::addListReferences(Definition *def) void MemberList::findSectionsInDocumentation(const Definition *d) { - MemberListIterator mli(*this); - MemberDef *imd; - for ( ; (imd=mli.current()) ; ++mli) + for (const auto &imd : m_members) { MemberDefMutable *md = toMemberDefMutable(imd); if (md) @@ -1045,11 +943,9 @@ QCString MemberList::listTypeAsString(MemberListType type) return ""; } -void MemberList::writeTagFile(FTextStream &tagFile) +void MemberList::writeTagFile(TextStream &tagFile) { - MemberListIterator mli(*this); - MemberDef *imd; - for ( ; (imd=mli.current()) ; ++mli) + for (const auto &imd : m_members) { MemberDefMutable *md = toMemberDefMutable(imd); if (md) @@ -1057,11 +953,9 @@ void MemberList::writeTagFile(FTextStream &tagFile) if (md->getLanguage()!=SrcLangExt_VHDL) { md->writeTagFile(tagFile); - if (md->memberType()==MemberType_Enumeration && md->enumFieldList() && !md->isStrong()) + if (md->memberType()==MemberType_Enumeration && !md->isStrong()) { - MemberListIterator vmli(*md->enumFieldList()); - MemberDef *ivmd; - for ( ; (ivmd=vmli.current()) ; ++vmli) + for (const auto &ivmd : md->enumFieldList()) { MemberDefMutable *vmd = toMemberDefMutable(ivmd); if (vmd) @@ -1087,9 +981,7 @@ void MemberList::writeTagFile(FTextStream &tagFile) void MemberList::setAnchors() { //int count=0; - MemberListIterator mli(*this); - MemberDef *md; - for (;(md=mli.current());++mli) + for (const auto &md : m_members) { MemberDefMutable *mdm = toMemberDefMutable(md); if (mdm && !md->isReference()) |