diff options
Diffstat (limited to 'src/memberlist.cpp')
-rw-r--r-- | src/memberlist.cpp | 199 |
1 files changed, 139 insertions, 60 deletions
diff --git a/src/memberlist.cpp b/src/memberlist.cpp index 1b81108..5349030 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -233,11 +233,6 @@ void MemberList::countDocMembers(bool countEnumValues) //printf("MemberList::countDocMembers()=%d memberGroupList=%p\n",m_numDocMembers,memberGroupList); } -bool MemberList::insert(uint index,const MemberDef *md) -{ - return QList<MemberDef>::insert(index,md); -} - void MemberList::inSort(const MemberDef *md) { QList<MemberDef>::inSort(md); @@ -248,11 +243,67 @@ void MemberList::append(const MemberDef *md) QList<MemberDef>::append(md); } -MemberListIterator::MemberListIterator(const QList<MemberDef> &l) : +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) { } +int MemberList::countEnumValues(MemberDef *md,bool setAnonEnumType) const +{ + int enumVars=0; + MemberListIterator vmli(*this); + MemberDef *vmd; + QCString name(md->name()); + int i=name.findRev("::"); + if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?) + if (name[0]=='@') // anonymous enum => append variables + { + for ( ; (vmd=vmli.current()) ; ++vmli) + { + QCString vtype=vmd->typeString(); + if ((vtype.find(name))!=-1) + { + enumVars++; + if (setAnonEnumType) + { + vmd->setAnonymousEnumType(md); + } + } + } + } + return enumVars; +} + bool MemberList::declVisible() const { MemberListIterator mli(*this); @@ -277,26 +328,9 @@ bool MemberList::declVisible() const return TRUE; case MemberType_Enumeration: { - int enumVars=0; - MemberListIterator vmli(*this); - MemberDef *vmd; - QCString name(md->name()); - int i=name.findRev("::"); - if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?) - if (name[0]=='@') // anonymous enum => append variables - { - for ( ; (vmd=vmli.current()) ; ++vmli) - { - QCString vtype=vmd->typeString(); - if ((vtype.find(name))!=-1) - { - enumVars++; - } - } - } // 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. - if (enumVars==0) // show enum here + if (countEnumValues(md,FALSE)==0) // show enum here { return TRUE; } @@ -368,27 +402,9 @@ void MemberList::writePlainDeclarations(OutputList &ol, } case MemberType_Enumeration: { - int enumVars=0; - MemberListIterator vmli(*this); - MemberDef *vmd; - QCString name(md->name()); - int i=name.findRev("::"); - if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?) - if (name[0]=='@') // anonymous enum => append variables - { - for ( ; (vmd=vmli.current()) ; ++vmli) - { - QCString vtype=vmd->typeString(); - if ((vtype.find(name))!=-1) - { - enumVars++; - vmd->setAnonymousEnumType(md); - } - } - } // 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. - if (enumVars==0 && !hideUndocMembers) // show enum here + if (countEnumValues(md,TRUE)==0) // show enum here { //printf("Enum!!\n"); if (first) @@ -672,13 +688,44 @@ void MemberList::writeDocumentation(OutputList &ol, ol.endGroupHeader(showInline ? 2 : 0); } ol.startMemberDocList(); - + MemberListIterator mli(*this); MemberDef *md; - for ( ; (md=mli.current()) ; ++mli) + + // 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) + { + 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)); + } + } + } + + for (mli.toFirst() ; (md=mli.current()) ; ++mli) { - md->writeDocumentation(this,ol,scopeName,container, - m_inGroup,showEnumValues,showInline); + 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)++; + } } if (memberGroupList) { @@ -701,14 +748,19 @@ void MemberList::writeSimpleDocumentation(OutputList &ol, //printf("MemberList count=%d\n",numDocMembers()); if (numDocMembers()==0) return; - ol.startMemberDocSimple(); + ClassDef *cd = 0; + if (container && container->definitionType()==Definition::TypeClass) + { + cd = (ClassDef*)container; + } + ol.startMemberDocSimple(cd && cd->isJavaEnum()); MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { md->writeMemberDocSimple(ol,container); } - ol.endMemberDocSimple(); + ol.endMemberDocSimple(cd && cd->isJavaEnum()); } // separate member pages @@ -716,12 +768,37 @@ void MemberList::writeDocumentationPage(OutputList &ol, const char *scopeName, Definition *container) { static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); + + // count the number of overloaded members + QDict<uint> overloadTotalDict(67); + QDict<uint> overloadCountDict(67); + overloadTotalDict.setAutoDelete(TRUE); + overloadCountDict.setAutoDelete(TRUE); MemberListIterator mli(*this); MemberDef *md; - for ( ; (md=mli.current()) ; ++mli) + for (mli.toFirst() ; (md=mli.current()) ; ++mli) { if (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)); + } + } + } + + for ( mli.toFirst() ; (md=mli.current()) ; ++mli) + { + if (md->isDetailedSectionLinkable()) + { + uint overloadCount = *overloadTotalDict.find(md->name()); + uint *pCount = overloadCountDict.find(md->name()); QCString diskName=md->getOutputFileBase(); QCString title=md->qualifiedName(); startFile(ol,diskName,md->name(),title,HLI_None,!generateTreeView,diskName); @@ -734,7 +811,8 @@ void MemberList::writeDocumentationPage(OutputList &ol, if (generateTreeView) { - md->writeDocumentation(this,ol,scopeName,container,m_inGroup); + md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container,m_inGroup); + (*pCount)++; ol.endContents(); endFileWithNavPath(container,ol); } @@ -749,7 +827,8 @@ void MemberList::writeDocumentationPage(OutputList &ol, ol.writeString(" </td>\n"); ol.writeString(" <td valign=\"top\" class=\"mempage\">\n"); - md->writeDocumentation(this,ol,scopeName,container,m_inGroup); + md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container,m_inGroup); + (*pCount)++; ol.writeString(" </td>\n"); ol.writeString(" </tr>\n"); @@ -758,15 +837,15 @@ void MemberList::writeDocumentationPage(OutputList &ol, endFile(ol); } } - if (memberGroupList) + } + if (memberGroupList) + { + //printf("MemberList::writeDocumentation() -- member groups\n"); + MemberGroupListIterator mgli(*memberGroupList); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) { - //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); } } } |