diff options
Diffstat (limited to 'src/memberlist.cpp')
-rw-r--r-- | src/memberlist.cpp | 410 |
1 files changed, 207 insertions, 203 deletions
diff --git a/src/memberlist.cpp b/src/memberlist.cpp index 278023b..c71390c 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -1,12 +1,12 @@ /****************************************************************************** * - * + * * * Copyright (C) 1997-2015 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its - * documentation under the terms of the GNU General Public License is hereby - * granted. No representations are made about the suitability of this software + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software * for any purpose. It is provided "as is" without express or implied warranty. * See the GNU General Public License for more details. * @@ -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,13 +58,13 @@ MemberList::MemberList(MemberListType lt) : m_listType(lt) MemberList::~MemberList() { - delete memberGroupList; } -int MemberList::compareValues(const MemberDef *c1, const MemberDef *c2) const +int genericCompareMembers(const MemberDef *c1,const MemberDef *c2) { - static bool sortConstructorsFirst = Config_getBool(SORT_MEMBERS_CTORS_1ST); - if (sortConstructorsFirst) { + bool sortConstructorsFirst = Config_getBool(SORT_MEMBERS_CTORS_1ST); + if (sortConstructorsFirst) + { int ord1 = c1->isConstructor() ? 2 : (c1->isDestructor() ? 1 : 0); int ord2 = c2->isConstructor() ? 2 : (c2->isDestructor() ? 1 : 0); if (ord1 > ord2) @@ -74,9 +72,29 @@ int MemberList::compareValues(const MemberDef *c1, const MemberDef *c2) const else if (ord2 > ord1) return 1; } + // sort on name int cmp = qstricmp(c1->name(),c2->name()); - if (cmp==0) cmp = qstricmp(c1->argsString(),c2->argsString()); - return cmp!=0 ? cmp : c1->getDefLine()-c2->getDefLine(); + // then on argument list + if (cmp==0 && c1->argsString() && c2->argsString()) + { + cmp = qstricmp(c1->argsString(),c2->argsString()); + } + // then on file in which the item is defined + if (cmp==0) + { + cmp = qstricmp(c1->getDefFileName(),c2->getDefFileName()); + } + // then on line number at which the member is defined + if (cmp==0) + { + cmp = c1->getDefLine()-c2->getDefLine(); + } + return cmp; +} + +int MemberList::compareValues(const MemberDef *c1, const MemberDef *c2) const +{ + return genericCompareMembers(c1,c2); } int MemberList::countInheritableMembers(const ClassDef *inheritedFrom) const @@ -105,14 +123,9 @@ int MemberList::countInheritableMembers(const ClassDef *inheritedFrom) const } } } - if (memberGroupList) + for (const auto &mg : m_memberGroupRefList) { - 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(), @@ -187,28 +200,23 @@ void MemberList::countDecMembers() } } } - if (memberGroupList) + for (const auto &mg : m_memberGroupRefList) { - 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"); @@ -233,16 +241,11 @@ void MemberList::countDocMembers() m_numDocMembers++; } } - if (memberGroupList) + for (const auto &mg : m_memberGroupRefList) { - 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); } @@ -288,7 +291,7 @@ MemberDef *MemberList::take(uint index) } MemberListIterator::MemberListIterator(const MemberList &l) : - QListIterator<MemberDef>(l) + QListIterator<MemberDef>(l) { } @@ -313,24 +316,23 @@ void MemberList::setAnonymousEnumType() MemberDef *vmd; for ( ; (vmd=vmli.current()) ; ++vmli) { - QCString vtype=vmd->typeString(); - if ((vtype.find(name))!=-1) + MemberDefMutable *vmdm = toMemberDefMutable(vmd); + if (vmdm) { - vmd->setAnonymousEnumType(md); + QCString vtype=vmd->typeString(); + if ((vtype.find(name))!=-1) + { + vmdm->setAnonymousEnumType(md); + } } } } } } } - if (memberGroupList) + for (const auto &mg : m_memberGroupRefList) { - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->setAnonymousEnumType(); - } + mg->setAnonymousEnumType(); } } @@ -378,9 +380,9 @@ bool MemberList::declVisible() const case MemberType_Service: // fall through case MemberType_Sequence: // fall through case MemberType_Dictionary: // fall through - case MemberType_Event: + case MemberType_Event: return TRUE; - case MemberType_Enumeration: + case MemberType_Enumeration: { // if this is an anonymous enum and there are variables of this // enum type (i.e. enumVars>0), then we do not show the enum here. @@ -392,7 +394,7 @@ bool MemberList::declVisible() const break; case MemberType_Friend: return TRUE; - case MemberType_EnumValue: + case MemberType_EnumValue: { if (m_inGroup) { @@ -412,7 +414,6 @@ void MemberList::writePlainDeclarations(OutputList &ol, ) const { //printf("----- writePlainDeclaration() ----\n"); - static bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS); if (numDecMembers()==-1) { err("MemberList::numDecMembers()==-1, so the members of this list have not been counted. Please report as a bug.\n"); @@ -425,7 +426,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, } //printf(" --> writePlainDeclaration() numDecMembers()=%d\n", // numDecMembers()); - + ol.pushGeneratorState(); bool first=TRUE; @@ -454,13 +455,13 @@ void MemberList::writePlainDeclarations(OutputList &ol, case MemberType_Service: // fall through case MemberType_Sequence: // fall through case MemberType_Dictionary: // fall through - case MemberType_Event: + case MemberType_Event: { if (first) ol.startMemberList(),first=FALSE; md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId); break; } - case MemberType_Enumeration: + case MemberType_Enumeration: { // if this is an anonymous enum and there are variables of this // enum type (i.e. enumVars>0), then we do not show the enum here. @@ -484,6 +485,10 @@ void MemberList::writePlainDeclarations(OutputList &ol, ol.writeString("local "); } ol.writeString("enum "); + if (md->isStrong()) + { + ol.writeString("class "); + } ol.insertMemberAlign(); md->writeEnumDeclaration(ol,cd,nd,fd,gd); if (!detailsLinkable) @@ -497,7 +502,8 @@ void MemberList::writePlainDeclarations(OutputList &ol, md->briefFile(),md->briefLine(), cd,md, md->briefDescription(), - TRUE,FALSE,0,TRUE,FALSE + TRUE,FALSE, + 0,TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT) ); if (rootNode && !rootNode->isEmpty()) { @@ -525,7 +531,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, case MemberType_Friend: if (inheritedFrom==0) { - if (first) + if (first) { ol.startMemberList(); first=FALSE; @@ -533,7 +539,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId); break; } - case MemberType_EnumValue: + case MemberType_EnumValue: { if (m_inGroup) { @@ -551,30 +557,30 @@ void MemberList::writePlainDeclarations(OutputList &ol, // no variables of the anonymous compound type exist. if (cd) { - MemberListIterator mli(*this); - for ( ; (md=mli.current()) ; ++mli ) + for ( mli.toFirst(); (md=mli.current()) ; ++mli ) { if (md->fromAnonymousScope() && !md->anonymousDeclShown()) { - md->setFromAnonymousScope(FALSE); + MemberDefMutable *mdm = toMemberDefMutable(md); + if (mdm) mdm->setFromAnonymousScope(FALSE); //printf("anonymous compound members\n"); if (md->isBriefSectionVisible()) { - if (first) + if (first) { ol.startMemberList(); first=FALSE; } md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup); } - md->setFromAnonymousScope(TRUE); + if (mdm) mdm->setFromAnonymousScope(TRUE); } } } - - if (!first) + + if (!first) { - ol.endMemberList(); + ol.endMemberList(); } ol.popGeneratorState(); @@ -630,7 +636,7 @@ void MemberList::writeDeclarations(OutputList &ol, if (title) { ol.writeInheritedSectionTitle(inheritId,cd->getReference(), - cd->getOutputFileBase(), + cd->getOutputFileBase(), cd->anchor(),title,cd->displayName()); } ol.popGeneratorState(); @@ -638,7 +644,7 @@ void MemberList::writeDeclarations(OutputList &ol, } else if (num>numEnumValues) { - if (title) + if (title) { if (showInline) { @@ -658,14 +664,15 @@ void MemberList::writeDeclarations(OutputList &ol, ol.endMemberHeader(); } } - if (subtitle) + if (subtitle) { QCString st=subtitle; st = st.stripWhiteSpace(); if (!st.isEmpty()) { ol.startMemberSubtitle(); - ol.generateDoc("[generated]",-1,ctx,0,subtitle,FALSE,FALSE,0,FALSE,FALSE); + ol.generateDoc("[generated]",-1,ctx,0,subtitle,FALSE,FALSE, + 0,FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT)); ol.endMemberSubtitle(); } } @@ -688,46 +695,45 @@ void MemberList::writeDeclarations(OutputList &ol, } //printf("memberGroupList=%p\n",memberGroupList); - if (memberGroupList) + for (const auto &mg : m_memberGroupRefList) { - 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); - 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); } } } - if (inheritedFrom && cd) + if (inheritedFrom && cd) { - // also add members that of this list type, that are grouped together - // in a separate list in class 'inheritedFrom' - cd->addGroupedInheritedMembers(ol,m_listType,inheritedFrom,inheritId); + const ClassDefMutable *cdm = toClassDefMutable(cd); + if (cdm) + { + // also add members that of this list type, that are grouped together + // in a separate list in class 'inheritedFrom' + cdm->addGroupedInheritedMembers(ol,m_listType,inheritedFrom,inheritId); + } } //printf("----- end writeDeclaration() ----\n"); } @@ -767,7 +773,7 @@ void MemberList::writeDocumentation(OutputList &ol, overloadCountDict.setAutoDelete(TRUE); for (mli.toFirst() ; (md=mli.current()) ; ++mli) { - if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) && + if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) && !(md->isEnumValue() && !showInline)) { uint *pCount = overloadTotalDict.find(md->name()); @@ -785,25 +791,24 @@ void MemberList::writeDocumentation(OutputList &ol, for (mli.toFirst() ; (md=mli.current()) ; ++mli) { - if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) && + if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) && !(md->isEnumValue() && !showInline)) { uint overloadCount = *overloadTotalDict.find(md->name()); uint *pCount = overloadCountDict.find(md->name()); - md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container, - m_inGroup,showEnumValues,showInline); - (*pCount)++; + MemberDefMutable *mdm = toMemberDefMutable(md); + if (mdm) + { + mdm->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container, + m_inGroup,showEnumValues,showInline); + (*pCount)++; + } } } - if (memberGroupList) + //printf("MemberList::writeDocumentation() -- member groups %d\n",memberGroupList->count()); + for (const auto &mg : m_memberGroupRefList) { - //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(); } @@ -818,21 +823,25 @@ void MemberList::writeSimpleDocumentation(OutputList &ol, const ClassDef *cd = 0; if (container && container->definitionType()==Definition::TypeClass) { - cd = dynamic_cast<const ClassDef*>(container); + cd = toClassDef(container); } ol.startMemberDocSimple(cd && cd->isJavaEnum()); MemberListIterator mli(*this); const MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { - md->writeMemberDocSimple(ol,container); + MemberDefMutable *mdm = toMemberDefMutable(md); + if (mdm) + { + mdm->writeMemberDocSimple(ol,container); + } } ol.endMemberDocSimple(cd && cd->isJavaEnum()); } // separate member pages void MemberList::writeDocumentationPage(OutputList &ol, - const char *scopeName, const Definition *container) const + const char *scopeName, const DefinitionMutable *container) const { static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); @@ -842,9 +851,11 @@ void MemberList::writeDocumentationPage(OutputList &ol, overloadTotalDict.setAutoDelete(TRUE); overloadCountDict.setAutoDelete(TRUE); MemberListIterator mli(*this); - const MemberDef *md; - for (mli.toFirst() ; (md=mli.current()) ; ++mli) + const MemberDef *imd; + for (mli.toFirst() ; (imd=mli.current()) ; ++mli) { + MemberDefMutable *md = toMemberDefMutable(imd); + if (md->isDetailedSectionLinkable()) { uint *pCount = overloadTotalDict.find(md->name()); @@ -860,8 +871,10 @@ void MemberList::writeDocumentationPage(OutputList &ol, } } - for ( mli.toFirst() ; (md=mli.current()) ; ++mli) + for ( mli.toFirst() ; (imd=mli.current()) ; ++mli) { + Definition *container_d = toDefinition(const_cast<DefinitionMutable*>(container)); + MemberDefMutable *md = toMemberDefMutable(imd); if (md->isDetailedSectionLinkable()) { uint overloadCount = *overloadTotalDict.find(md->name()); @@ -878,10 +891,11 @@ void MemberList::writeDocumentationPage(OutputList &ol, if (generateTreeView) { - md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container,m_inGroup); + md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container_d,m_inGroup); (*pCount)++; + ol.endContents(); - endFileWithNavPath(container,ol); + endFileWithNavPath(container_d,ol); } else { @@ -894,7 +908,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,m_inGroup); + md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container_d,m_inGroup); (*pCount)++; ol.writeString(" </td>\n"); @@ -905,35 +919,25 @@ void MemberList::writeDocumentationPage(OutputList &ol, } } } - if (memberGroupList) + for (const auto &mg : m_memberGroupRefList) { - //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_memberGroupRefList.push_back(mg); } void MemberList::addListReferences(Definition *def) { MemberListIterator mli(*this); - MemberDef *md; - for ( ; (md=mli.current()) ; ++mli) + MemberDef *imd; + for ( ; (imd=mli.current()) ; ++mli) { - if (!md->isAlias() && (md->getGroupDef()==0 || def->definitionType()==Definition::TypeGroup)) + MemberDefMutable *md = toMemberDefMutable(imd); + if (md && !md->isAlias() && (md->getGroupDef()==0 || def->definitionType()==Definition::TypeGroup)) { md->addListReference(def); const MemberList *enumFields = md->enumFieldList(); @@ -944,40 +948,38 @@ void MemberList::addListReferences(Definition *def) MemberDef *vmd; for ( ; (vmd=vmli.current()) ; ++vmli) { - //printf(" adding %s\n",vmd->name().data()); - vmd->addListReference(def); + MemberDefMutable *vmdm = toMemberDefMutable(vmd); + if (vmdm) + { + //printf(" adding %s\n",vmd->name().data()); + vmdm->addListReference(def); + } } } } } - if (memberGroupList) + for (const auto &mg : m_memberGroupRefList) { - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->addListReferences(def); - } + mg->addListReferences(def); } } void MemberList::findSectionsInDocumentation(const Definition *d) { MemberListIterator mli(*this); - MemberDef *md; - for ( ; (md=mli.current()) ; ++mli) + MemberDef *imd; + for ( ; (imd=mli.current()) ; ++mli) { - md->findSectionsInDocumentation(); - } - if (memberGroupList) - { - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) + MemberDefMutable *md = toMemberDefMutable(imd); + if (md) { - mg->findSectionsInDocumentation(d); + md->findSectionsInDocumentation(); } } + for (const auto &mg : m_memberGroupRefList) + { + mg->findSectionsInDocumentation(d); + } } void MemberList::setNeedsSorting(bool b) @@ -985,7 +987,7 @@ void MemberList::setNeedsSorting(bool b) m_needsSorting = b; } -QCString MemberList::listTypeAsString(MemberListType type) +QCString MemberList::listTypeAsString(MemberListType type) { switch(type) { @@ -1037,7 +1039,7 @@ QCString MemberList::listTypeAsString(MemberListType type) case MemberListType_decFriendMembers: return "friend-members"; case MemberListType_decPropMembers: return "prop-members"; case MemberListType_enumFields: return "enum-fields"; - case MemberListType_memberGroup: return "member-group"; + case MemberListType_memberGroup: break; default: break; } return ""; @@ -1046,52 +1048,54 @@ QCString MemberList::listTypeAsString(MemberListType type) void MemberList::writeTagFile(FTextStream &tagFile) { MemberListIterator mli(*this); - MemberDef *md; - for ( ; (md=mli.current()) ; ++mli) + MemberDef *imd; + for ( ; (imd=mli.current()) ; ++mli) { - if (md->getLanguage()!=SrcLangExt_VHDL) + MemberDefMutable *md = toMemberDefMutable(imd); + if (md) { - md->writeTagFile(tagFile); - if (md->memberType()==MemberType_Enumeration && md->enumFieldList() && !md->isStrong()) + if (md->getLanguage()!=SrcLangExt_VHDL) { - MemberListIterator vmli(*md->enumFieldList()); - MemberDef *vmd; - for ( ; (vmd=vmli.current()) ; ++vmli) + md->writeTagFile(tagFile); + if (md->memberType()==MemberType_Enumeration && md->enumFieldList() && !md->isStrong()) { - vmd->writeTagFile(tagFile); + MemberListIterator vmli(*md->enumFieldList()); + MemberDef *ivmd; + for ( ; (ivmd=vmli.current()) ; ++vmli) + { + MemberDefMutable *vmd = toMemberDefMutable(ivmd); + if (vmd) + { + vmd->writeTagFile(tagFile); + } + } } } - } - else - { - VhdlDocGen::writeTagFile(md,tagFile); + else + { + VhdlDocGen::writeTagFile(md,tagFile); + } } } - if (memberGroupList) + for (const auto &mg : m_memberGroupRefList) { - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->writeTagFile(tagFile); - } + mg->writeTagFile(tagFile); } } -//-------------------------------------------------------------------------- - -int MemberSDict::compareValues(const MemberDef *c1, const MemberDef *c2) const +// compute the HTML anchors for a list of members +void MemberList::setAnchors() { - //printf("MemberSDict::compareValues(%s,%s)\n",c1->name().data(),c2->name().data()); - int cmp = qstricmp(c1->name(),c2->name()); - if (cmp) - { - return cmp; - } - else + //int count=0; + MemberListIterator mli(*this); + MemberDef *md; + for (;(md=mli.current());++mli) { - return c1->getDefLine()-c2->getDefLine(); + MemberDefMutable *mdm = toMemberDefMutable(md); + if (mdm && !md->isReference()) + { + mdm->setAnchor(); + } } } - |