diff options
Diffstat (limited to 'src/namespacedef.cpp')
-rw-r--r-- | src/namespacedef.cpp | 797 |
1 files changed, 355 insertions, 442 deletions
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 220f300..d0a88f0 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.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. * @@ -34,8 +34,21 @@ #include "membername.h" //------------------------------------------------------------------ +static QCString makeDisplayName(const NamespaceDef *nd,bool includeScope) +{ + QCString result=includeScope ? nd->name() : nd->localName(); + SrcLangExt lang = nd->getLanguage(); + QCString sep = getLanguageSpecificSeparator(lang); + if (sep!="::") + { + result = substitute(result,"::",sep); + } + //printf("makeDisplayName() %s->%s lang=%d\n",name().data(),result.data(),lang); + return result; +} +//------------------------------------------------------------------ -class NamespaceDefImpl : public DefinitionImpl, public NamespaceDef +class NamespaceDefImpl : public DefinitionMixin<NamespaceDefMutable> { public: NamespaceDefImpl(const char *defFileName,int defLine,int defColumn, @@ -58,10 +71,10 @@ class NamespaceDefImpl : public DefinitionImpl, public NamespaceDef virtual void countMembers(); virtual int numDocMembers() const; virtual void addUsingDirective(const NamespaceDef *nd); - virtual const NamespaceSDict *getUsedNamespaces() const; - virtual void addUsingDeclaration(const Definition *def); - virtual const SDict<Definition> *getUsedClasses() const { return usingDeclList; } - virtual void combineUsingRelations(); + virtual LinkedRefMap<const NamespaceDef> getUsedNamespaces() const { return m_usingDirList; } + virtual void addUsingDeclaration(const ClassDef *cd); + virtual LinkedRefMap<const ClassDef> getUsedClasses() const { return m_usingDeclList; } + virtual void combineUsingRelations(NamespaceDefSet &visitedNamespace); virtual QCString displayName(bool=TRUE) const; virtual QCString localName() const; virtual void setInline(bool isInline) { m_inline = isInline; } @@ -76,31 +89,27 @@ class NamespaceDefImpl : public DefinitionImpl, public NamespaceDef virtual void distributeMemberGroupDocumentation(); virtual void findSectionsInDocumentation(); virtual void sortMemberLists(); - virtual Definition *findInnerCompound(const char *name) const; + virtual const Definition *findInnerCompound(const char *name) const; virtual void addInnerCompound(const Definition *d); virtual void addListReferences(); virtual void setFileName(const QCString &fn); virtual bool subGrouping() const { return m_subGrouping; } virtual MemberList *getMemberList(MemberListType lt) const; - virtual const QList<MemberList> &getMemberLists() const { return m_memberLists; } - virtual MemberDef *getMemberByName(const QCString &) const; - virtual MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; } - virtual ClassSDict *getClassSDict() const { return classSDict; } - virtual ClassSDict *getInterfaceSDict() const { return interfaceSDict; } - virtual ClassSDict *getStructSDict() const { return structSDict; } - virtual ClassSDict *getExceptionSDict() const { return exceptionSDict; } - virtual const NamespaceSDict *getNamespaceSDict() const { return namespaceSDict; } + virtual const MemberLists &getMemberLists() const { return m_memberLists; } + virtual const MemberDef *getMemberByName(const QCString &) const; + virtual const MemberGroupList &getMemberGroups() const { return m_memberGroups; } + virtual ClassLinkedRefMap getClasses() const { return classes; } + virtual ClassLinkedRefMap getInterfaces() const { return interfaces; } + virtual ClassLinkedRefMap getStructs() const { return structs; } + virtual ClassLinkedRefMap getExceptions() const { return exceptions; } + virtual NamespaceLinkedRefMap getNamespaces() const { return namespaces; } virtual QCString title() const; virtual QCString compoundTypeString() const; virtual void setMetaData(const QCString &m); - void setVisited(bool v) { m_visited = v; } - bool isVisited() const { return m_visited; } private: - bool m_visited; - MemberList *createMemberList(MemberListType lt); void addMemberToList(MemberListType lt,MemberDef *md); void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title); void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title); @@ -108,7 +117,7 @@ class NamespaceDefImpl : public DefinitionImpl, public NamespaceDef void writeBriefDescription(OutputList &ol); void startMemberDeclarations(OutputList &ol); void endMemberDeclarations(OutputList &ol); - void writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d); + void writeClassDeclarations(OutputList &ol,const QCString &title,const ClassLinkedRefMap &d); void writeInlineClasses(OutputList &ol); void writeMemberGroups(OutputList &ol); void writeAuthorSection(OutputList &ol); @@ -116,7 +125,7 @@ class NamespaceDefImpl : public DefinitionImpl, public NamespaceDef void endMemberDocumentation(OutputList &ol); void writeSummaryLinks(OutputList &ol) const; void addNamespaceAttributes(OutputList &ol); - void writeClassesToTagFile(FTextStream &,ClassSDict *d); + void writeClassesToTagFile(FTextStream &,const ClassLinkedRefMap &d); void writeNamespaceDeclarations(OutputList &ol,const QCString &title, bool isConstantGroup=false); @@ -124,18 +133,18 @@ class NamespaceDefImpl : public DefinitionImpl, public NamespaceDef QCString fileName; FileList files; - NamespaceSDict *usingDirList = 0; - SDict<Definition> *usingDeclList = 0; + LinkedRefMap<const NamespaceDef> m_usingDirList; + LinkedRefMap<const ClassDef> m_usingDeclList; SDict<Definition> *m_innerCompounds = 0; - MemberSDict *m_allMembersDict = 0; - QList<MemberList> m_memberLists; - MemberGroupSDict *memberGroupSDict = 0; - ClassSDict *classSDict = 0; - ClassSDict *interfaceSDict = 0; - ClassSDict *structSDict = 0; - ClassSDict *exceptionSDict = 0; - NamespaceSDict *namespaceSDict = 0; + MemberLinkedRefMap m_allMembers; + MemberLists m_memberLists; + MemberGroupList m_memberGroups; + ClassLinkedRefMap classes; + ClassLinkedRefMap interfaces; + ClassLinkedRefMap structs; + ClassLinkedRefMap exceptions; + NamespaceLinkedRefMap namespaces; bool m_subGrouping = false; enum { NAMESPACE, MODULE, CONSTANT_GROUP, LIBRARY } m_type; bool m_isPublished = false; @@ -143,7 +152,7 @@ class NamespaceDefImpl : public DefinitionImpl, public NamespaceDef bool m_inline = false; }; -NamespaceDef *createNamespaceDef(const char *defFileName,int defLine,int defColumn, +NamespaceDefMutable *createNamespaceDef(const char *defFileName,int defLine,int defColumn, const char *name,const char *ref, const char *refFile,const char*type, bool isPublished) @@ -153,14 +162,15 @@ NamespaceDef *createNamespaceDef(const char *defFileName,int defLine,int defColu //------------------------------------------------------------------ -class NamespaceDefAliasImpl : public DefinitionAliasImpl, public NamespaceDef +class NamespaceDefAliasImpl : public DefinitionAliasMixin<NamespaceDef> { public: - NamespaceDefAliasImpl(const Definition *newScope,const NamespaceDef *nd) : DefinitionAliasImpl(newScope,nd) {} - virtual ~NamespaceDefAliasImpl() {} + NamespaceDefAliasImpl(const Definition *newScope,const NamespaceDef *nd) + : DefinitionAliasMixin(newScope,nd) { init(); } + virtual ~NamespaceDefAliasImpl() { deinit(); } virtual DefType definitionType() const { return TypeNamespace; } - const NamespaceDef *getNSAlias() const { return dynamic_cast<const NamespaceDef*>(getAlias()); } + const NamespaceDef *getNSAlias() const { return toNamespaceDef(getAlias()); } // ---- getters virtual QCString getOutputFileBase() const @@ -169,18 +179,14 @@ class NamespaceDefAliasImpl : public DefinitionAliasImpl, public NamespaceDef { return getNSAlias()->anchor(); } virtual int numDocMembers() const { return getNSAlias()->numDocMembers(); } - virtual void addUsingDirective(const NamespaceDef *nd) {} - virtual const NamespaceSDict *getUsedNamespaces() const + virtual LinkedRefMap<const NamespaceDef> getUsedNamespaces() const { return getNSAlias()->getUsedNamespaces(); } - virtual void addUsingDeclaration(const Definition *def) {} - virtual const SDict<Definition> *getUsedClasses() const + virtual LinkedRefMap<const ClassDef> getUsedClasses() const { return getNSAlias()->getUsedClasses(); } - virtual void combineUsingRelations() {} virtual QCString displayName(bool b=TRUE) const - { return getNSAlias()->displayName(b); } + { return makeDisplayName(this,b); } virtual QCString localName() const { return getNSAlias()->localName(); } - virtual void setInline(bool isInline) { } virtual bool isConstantGroup() const { return getNSAlias()->isConstantGroup(); } virtual bool isModule() const @@ -195,63 +201,41 @@ class NamespaceDefAliasImpl : public DefinitionAliasImpl, public NamespaceDef { return getNSAlias()->isLinkable(); } virtual bool hasDetailedDescription() const { return getNSAlias()->hasDetailedDescription(); } - virtual Definition *findInnerCompound(const char *name) const + virtual const Definition *findInnerCompound(const char *name) const { return getNSAlias()->findInnerCompound(name); } virtual bool subGrouping() const { return getNSAlias()->subGrouping(); } virtual MemberList *getMemberList(MemberListType lt) const { return getNSAlias()->getMemberList(lt); } - virtual const QList<MemberList> &getMemberLists() const + virtual const MemberLists &getMemberLists() const { return getNSAlias()->getMemberLists(); } - virtual MemberDef *getMemberByName(const QCString &name) const + virtual const MemberDef *getMemberByName(const QCString &name) const { return getNSAlias()->getMemberByName(name); } - virtual MemberGroupSDict *getMemberGroupSDict() const - { return getNSAlias()->getMemberGroupSDict(); } - virtual ClassSDict *getClassSDict() const - { return getNSAlias()->getClassSDict(); } - virtual ClassSDict *getInterfaceSDict() const - { return getNSAlias()->getInterfaceSDict(); } - virtual ClassSDict *getStructSDict() const - { return getNSAlias()->getStructSDict(); } - virtual ClassSDict *getExceptionSDict() const - { return getNSAlias()->getExceptionSDict(); } - virtual const NamespaceSDict *getNamespaceSDict() const - { return getNSAlias()->getNamespaceSDict(); } + virtual const MemberGroupList &getMemberGroups() const + { return getNSAlias()->getMemberGroups(); } + virtual ClassLinkedRefMap getClasses() const + { return getNSAlias()->getClasses(); } + virtual ClassLinkedRefMap getInterfaces() const + { return getNSAlias()->getInterfaces(); } + virtual ClassLinkedRefMap getStructs() const + { return getNSAlias()->getStructs(); } + virtual ClassLinkedRefMap getExceptions() const + { return getNSAlias()->getExceptions(); } + virtual NamespaceLinkedRefMap getNamespaces() const + { return getNSAlias()->getNamespaces(); } virtual QCString title() const { return getNSAlias()->title(); } virtual QCString compoundTypeString() const { return getNSAlias()->compoundTypeString(); } - - // --- setters/actions - virtual void setMetaData(const QCString &m) {} - virtual void insertUsedFile(FileDef *fd) { } - virtual void writeDocumentation(OutputList &ol) {} - virtual void writeMemberPages(OutputList &ol) {} - virtual void writeQuickMemberLinks(OutputList &ol,const MemberDef *currentMd) const {} - virtual void writeTagFile(FTextStream &) {} - virtual void insertClass(const ClassDef *cd) {} - virtual void insertNamespace(const NamespaceDef *nd) {} - virtual void insertMember(MemberDef *md) {} - virtual void computeAnchors() {} - virtual void countMembers() {} - virtual void addMembersToMemberGroup() {} - virtual void distributeMemberGroupDocumentation() {} - virtual void findSectionsInDocumentation() {} - virtual void sortMemberLists() {} - virtual void addInnerCompound(const Definition *d) {} - virtual void addListReferences() {} - virtual void setFileName(const QCString &fn) {} - - void setVisited(bool v) { m_visited = v; } - bool isVisited() const { return m_visited; } - - private: - bool m_visited = false; }; NamespaceDef *createNamespaceDefAlias(const Definition *newScope,const NamespaceDef *nd) { - return new NamespaceDefAliasImpl(newScope,nd); + NamespaceDef *alnd = new NamespaceDefAliasImpl(newScope,nd); + //printf("alnd name=%s localName=%s qualifiedName=%s displayName()=%s\n", + // alnd->name().data(),alnd->localName().data(),alnd->qualifiedName().data(), + // alnd->displayName().data()); + return alnd; } //------------------------------------------------------------------ @@ -260,7 +244,7 @@ NamespaceDefImpl::NamespaceDefImpl(const char *df,int dl,int dc, const char *name,const char *lref, const char *fName, const char*type, bool isPublished) : - DefinitionImpl(df,dl,dc,name) + DefinitionMixin(df,dl,dc,name) ,m_isPublished(isPublished) { if (fName) @@ -278,19 +262,8 @@ NamespaceDefImpl::NamespaceDefImpl(const char *df,int dl,int dc, { setFileName(name); } - classSDict = new ClassSDict(17); - interfaceSDict = new ClassSDict(17); - structSDict = new ClassSDict(17); - exceptionSDict = new ClassSDict(17); - namespaceSDict = new NamespaceSDict(17); m_innerCompounds = new SDict<Definition>(17); - usingDirList = 0; - usingDeclList = 0; - m_allMembersDict = 0; setReference(lref); - memberGroupSDict = new MemberGroupSDict; - memberGroupSDict->setAutoDelete(TRUE); - m_visited=FALSE; m_inline=FALSE; m_subGrouping=Config_getBool(SUBGROUPING); if (type && !strcmp("module", type)) @@ -313,16 +286,7 @@ NamespaceDefImpl::NamespaceDefImpl(const char *df,int dl,int dc, NamespaceDefImpl::~NamespaceDefImpl() { - delete classSDict; - delete interfaceSDict; - delete structSDict; - delete exceptionSDict; - delete namespaceSDict; delete m_innerCompounds; - delete usingDirList; - delete usingDeclList; - delete memberGroupSDict; - delete m_allMembersDict; } void NamespaceDefImpl::setFileName(const QCString &fn) @@ -339,9 +303,7 @@ void NamespaceDefImpl::setFileName(const QCString &fn) void NamespaceDefImpl::distributeMemberGroupDocumentation() { - MemberGroupSDict::Iterator mgli(*memberGroupSDict); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) + for (const auto &mg : m_memberGroups) { mg->distributeMemberGroupDocumentation(); } @@ -349,16 +311,13 @@ void NamespaceDefImpl::distributeMemberGroupDocumentation() void NamespaceDefImpl::findSectionsInDocumentation() { + docFindSections(briefDescription(),this,docFile()); docFindSections(documentation(),this,docFile()); - MemberGroupSDict::Iterator mgli(*memberGroupSDict); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) + for (const auto &mg : m_memberGroups) { mg->findSectionsInDocumentation(this); } - QListIterator<MemberList> mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { if (ml->listType()&MemberListType_declarationLists) { @@ -370,7 +329,7 @@ void NamespaceDefImpl::findSectionsInDocumentation() void NamespaceDefImpl::insertUsedFile(FileDef *fd) { if (fd==0) return; - if (files.find(fd)==-1) + if (files.find(fd)==-1) { if (Config_getBool(SORT_MEMBER_DOCS)) files.inSort(fd); @@ -384,83 +343,60 @@ void NamespaceDefImpl::addInnerCompound(const Definition *d) m_innerCompounds->append(d->localName(),d); if (d->definitionType()==Definition::TypeNamespace) { - insertNamespace(dynamic_cast<const NamespaceDef *>(d)); + insertNamespace(toNamespaceDef(d)); } else if (d->definitionType()==Definition::TypeClass) { - insertClass(dynamic_cast<const ClassDef *>(d)); + insertClass(toClassDef(d)); } } void NamespaceDefImpl::insertClass(const ClassDef *cd) { - ClassSDict *d = classSDict; + ClassLinkedRefMap &d = classes; if (Config_getBool(OPTIMIZE_OUTPUT_SLICE)) { if (cd->compoundType()==ClassDef::Interface) { - d = interfaceSDict; + d = interfaces; } else if (cd->compoundType()==ClassDef::Struct) { - d = structSDict; + d = structs; } else if (cd->compoundType()==ClassDef::Exception) { - d = exceptionSDict; + d = exceptions; } } - if (d->find(cd->name())==0) - { - if (Config_getBool(SORT_BRIEF_DOCS)) - { - d->inSort(cd->name(),cd); - } - else - { - d->append(cd->name(),cd); - } - } + d.add(cd->name(),cd); } void NamespaceDefImpl::insertNamespace(const NamespaceDef *nd) { - if (namespaceSDict->find(nd->name())==0) - { - if (Config_getBool(SORT_MEMBER_DOCS)) - namespaceSDict->inSort(nd->name(),nd); - else - namespaceSDict->append(nd->name(),nd); - } + namespaces.add(nd->name(),nd); } void NamespaceDefImpl::addMembersToMemberGroup() { - QListIterator<MemberList> mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { if (ml->listType()&MemberListType_declarationLists) { - ::addMembersToMemberGroup(ml,&memberGroupSDict,this); + ::addMembersToMemberGroup(ml.get(),&m_memberGroups,this); } } // add members inside sections to their groups - if (memberGroupSDict) + for (const auto &mg : m_memberGroups) { - MemberGroupSDict::Iterator mgli(*memberGroupSDict); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) + if (mg->allMembersInSameSection() && m_subGrouping) { - if (mg->allMembersInSameSection() && m_subGrouping) - { - //printf("----> addToDeclarationSection(%s)\n",mg->header().data()); - mg->addToDeclarationSection(); - } + //printf("----> addToDeclarationSection(%s)\n",mg->header().data()); + mg->addToDeclarationSection(); } } } @@ -470,8 +406,9 @@ void NamespaceDefImpl::insertMember(MemberDef *md) //printf("%s::insertMember(%s) isInline=%d hasDocs=%d\n",qPrint(name()),qPrint(md->name()), // isInline(),hasDocumentation()); if (md->isHidden()) return; + MemberDefMutable *mdm = toMemberDefMutable(md); - // if this is an inline namespace that is not documented, then insert the + // if this is an inline namespace that is not documented, then insert the // member in the parent scope instead if (isInline() && !hasDocumentation()) { @@ -480,16 +417,25 @@ void NamespaceDefImpl::insertMember(MemberDef *md) { if (outerScope->definitionType()==Definition::TypeNamespace) { - NamespaceDef *nd = dynamic_cast<NamespaceDef*>(outerScope); - nd->insertMember(md); - md->setNamespace(nd); + NamespaceDefMutable *nd = toNamespaceDefMutable(outerScope); + if (nd) + { + nd->insertMember(md); + if (mdm) + { + mdm->setNamespace(nd); + } + } } else if (outerScope->definitionType()==Definition::TypeFile) { - FileDef *fd = dynamic_cast<FileDef*>(outerScope); + FileDef *fd = toFileDef(outerScope); fd->insertMember(md); - md->setFileDef(fd); - md->setOuterScope(fd); + if (mdm) + { + mdm->setFileDef(fd); + mdm->setOuterScope(fd); + } } } } @@ -498,47 +444,43 @@ void NamespaceDefImpl::insertMember(MemberDef *md) MemberList *allMemberList = getMemberList(MemberListType_allMembersList); if (allMemberList==0) { - allMemberList = new MemberList(MemberListType_allMembersList); - m_memberLists.append(allMemberList); - } - allMemberList->append(md); - if (m_allMembersDict==0) - { - m_allMembersDict = new MemberSDict; + m_memberLists.emplace_back(std::make_unique<MemberList>(MemberListType_allMembersList)); + allMemberList = m_memberLists.back().get(); } + allMemberList->append(md); //printf("%s::m_allMembersDict->append(%s)\n",name().data(),md->localName().data()); - m_allMembersDict->append(md->localName(),md); + m_allMembers.add(md->localName(),md); //::addNamespaceMemberNameToIndex(md); //static bool sortBriefDocs=Config_getBool(SORT_BRIEF_DOCS); switch(md->memberType()) { - case MemberType_Variable: + case MemberType_Variable: addMemberToList(MemberListType_decVarMembers,md); addMemberToList(MemberListType_docVarMembers,md); break; - case MemberType_Function: + case MemberType_Function: addMemberToList(MemberListType_decFuncMembers,md); addMemberToList(MemberListType_docFuncMembers,md); break; - case MemberType_Typedef: + case MemberType_Typedef: addMemberToList(MemberListType_decTypedefMembers,md); addMemberToList(MemberListType_docTypedefMembers,md); break; - case MemberType_Sequence: + case MemberType_Sequence: addMemberToList(MemberListType_decSequenceMembers,md); addMemberToList(MemberListType_docSequenceMembers,md); break; - case MemberType_Dictionary: + case MemberType_Dictionary: addMemberToList(MemberListType_decDictionaryMembers,md); addMemberToList(MemberListType_docDictionaryMembers,md); break; - case MemberType_Enumeration: + case MemberType_Enumeration: addMemberToList(MemberListType_decEnumMembers,md); addMemberToList(MemberListType_docEnumMembers,md); break; - case MemberType_EnumValue: + case MemberType_EnumValue: break; - case MemberType_Define: + case MemberType_Define: addMemberToList(MemberListType_decDefineMembers,md); addMemberToList(MemberListType_docDefineMembers,md); break; @@ -555,31 +497,27 @@ void NamespaceDefImpl::insertMember(MemberDef *md) Definition *outerScope = getOuterScope(); if (outerScope) { - MemberDef *aliasMd = 0; + std::unique_ptr<MemberDef> aliasMd; if (outerScope->definitionType()==Definition::TypeNamespace) { - aliasMd = createMemberDefAlias(outerScope,md); - dynamic_cast<NamespaceDef*>(outerScope)->insertMember(aliasMd); + aliasMd.reset(createMemberDefAlias(outerScope,md)); + NamespaceDefMutable *ndm = toNamespaceDefMutable(outerScope); + if (ndm) + { + ndm->insertMember(aliasMd.get()); + } } else if (outerScope->definitionType()==Definition::TypeFile) { - aliasMd = createMemberDefAlias(outerScope,md); - dynamic_cast<FileDef*>(outerScope)->insertMember(aliasMd); + aliasMd.reset(createMemberDefAlias(outerScope,md)); + toFileDef(outerScope)->insertMember(aliasMd.get()); } if (aliasMd) { MemberName *mn; QCString name = md->name(); - if ((mn=Doxygen::functionNameSDict->find(name))) - { - mn->append(aliasMd); - } - else - { - mn = new MemberName(name); - mn->append(aliasMd); - Doxygen::functionNameSDict->append(name,mn); - } + mn = Doxygen::functionNameLinkedMap->add(name); + mn->push_back(std::move(aliasMd)); } } } @@ -589,7 +527,7 @@ void NamespaceDefImpl::insertMember(MemberDef *md) void NamespaceDefImpl::computeAnchors() { MemberList *allMemberList = getMemberList(MemberListType_allMembersList); - if (allMemberList) setAnchors(allMemberList); + if (allMemberList) allMemberList->setAnchors(); } bool NamespaceDefImpl::hasDetailedDescription() const @@ -618,42 +556,33 @@ void NamespaceDefImpl::writeTagFile(FTextStream &tagFile) { case LayoutDocEntry::NamespaceNestedNamespaces: { - if (namespaceSDict) + for (const auto &nd : namespaces) { - SDict<NamespaceDef>::Iterator ni(*namespaceSDict); - NamespaceDef *nd; - for (ni.toFirst();(nd=ni.current());++ni) + if (nd->isLinkableInProject()) { - if (nd->isLinkableInProject()) - { - tagFile << " <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl; - } + tagFile << " <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl; } } } break; case LayoutDocEntry::NamespaceClasses: { - if (classSDict) - writeClassesToTagFile(tagFile, classSDict); + writeClassesToTagFile(tagFile, classes); } break; case LayoutDocEntry::NamespaceInterfaces: { - if (interfaceSDict) - writeClassesToTagFile(tagFile, interfaceSDict); + writeClassesToTagFile(tagFile, interfaces); } break; case LayoutDocEntry::NamespaceStructs: { - if (structSDict) - writeClassesToTagFile(tagFile, structSDict); + writeClassesToTagFile(tagFile, structs); } break; case LayoutDocEntry::NamespaceExceptions: { - if (exceptionSDict) - writeClassesToTagFile(tagFile, exceptionSDict); + writeClassesToTagFile(tagFile, exceptions); } break; case LayoutDocEntry::MemberDecl: @@ -668,14 +597,9 @@ void NamespaceDefImpl::writeTagFile(FTextStream &tagFile) break; case LayoutDocEntry::MemberGroups: { - if (memberGroupSDict) + for (const auto &mg : m_memberGroups) { - MemberGroupSDict::Iterator mgli(*memberGroupSDict); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->writeTagFile(tagFile); - } + mg->writeTagFile(tagFile); } } break; @@ -697,7 +621,7 @@ void NamespaceDefImpl::writeDetailedDescription(OutputList &ol,const QCString &t ol.popGeneratorState(); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - ol.writeAnchor(0,"details"); + ol.writeAnchor(0,"details"); ol.popGeneratorState(); ol.startGroupHeader(); ol.parseText(title); @@ -706,7 +630,8 @@ void NamespaceDefImpl::writeDetailedDescription(OutputList &ol,const QCString &t ol.startTextBlock(); if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF)) { - ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE); + ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE, + 0,FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT)); } if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF) && !documentation().isEmpty()) @@ -723,7 +648,8 @@ void NamespaceDefImpl::writeDetailedDescription(OutputList &ol,const QCString &t } if (!documentation().isEmpty()) { - ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE); + ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE, + 0,FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT)); } ol.endTextBlock(); } @@ -734,7 +660,8 @@ void NamespaceDefImpl::writeBriefDescription(OutputList &ol) if (hasBriefDescription()) { DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0, - briefDescription(),TRUE,FALSE,0,TRUE,FALSE); + briefDescription(),TRUE,FALSE, + 0,TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT)); if (rootNode && !rootNode->isEmpty()) { ol.startParagraph(); @@ -815,41 +742,35 @@ void NamespaceDefImpl::endMemberDocumentation(OutputList &ol) } } -void NamespaceDefImpl::writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d) +void NamespaceDefImpl::writeClassDeclarations(OutputList &ol,const QCString &title,const ClassLinkedRefMap &d) { - if (d) d->writeDeclaration(ol,0,title,TRUE); + d.writeDeclaration(ol,0,title,TRUE); } void NamespaceDefImpl::writeInlineClasses(OutputList &ol) { - if (classSDict) classSDict->writeDocumentation(ol,this); + classes.writeDocumentation(ol,this); } void NamespaceDefImpl::writeNamespaceDeclarations(OutputList &ol,const QCString &title, bool const isConstantGroup) { - if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,isConstantGroup,TRUE); + namespaces.writeDeclaration(ol,title,isConstantGroup,TRUE); } void NamespaceDefImpl::writeMemberGroups(OutputList &ol) { /* write user defined member groups */ - if (memberGroupSDict) + for (const auto &mg : m_memberGroups) { - memberGroupSDict->sort(); - MemberGroupSDict::Iterator mgli(*memberGroupSDict); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) + if ((!mg->allMembersInSameSection() || !m_subGrouping) + && mg->header()!="[NOHEADER]") { - if ((!mg->allMembersInSameSection() || !m_subGrouping) - && mg->header()!="[NOHEADER]") - { - mg->writeDeclarations(ol,0,this,0,0); - } + mg->writeDeclarations(ol,0,this,0,0); } } } - + void NamespaceDefImpl::writeAuthorSection(OutputList &ol) { // write Author section (Man only) @@ -873,35 +794,35 @@ void NamespaceDefImpl::writeSummaryLinks(OutputList &ol) const SrcLangExt lang = getLanguage(); for (eli.toFirst();(lde=eli.current());++eli) { - if (lde->kind()==LayoutDocEntry::NamespaceClasses && classSDict && classSDict->declVisible()) + if (lde->kind()==LayoutDocEntry::NamespaceClasses && classes.declVisible()) { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; QCString label = "nested-classes"; ol.writeSummaryLink(0,label,ls->title(lang),first); first=FALSE; } - else if (lde->kind()==LayoutDocEntry::NamespaceInterfaces && interfaceSDict && interfaceSDict->declVisible()) + else if (lde->kind()==LayoutDocEntry::NamespaceInterfaces && interfaces.declVisible()) { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; QCString label = "interfaces"; ol.writeSummaryLink(0,label,ls->title(lang),first); first=FALSE; } - else if (lde->kind()==LayoutDocEntry::NamespaceStructs && structSDict && structSDict->declVisible()) + else if (lde->kind()==LayoutDocEntry::NamespaceStructs && structs.declVisible()) { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; QCString label = "structs"; ol.writeSummaryLink(0,label,ls->title(lang),first); first=FALSE; } - else if (lde->kind()==LayoutDocEntry::NamespaceExceptions && exceptionSDict && exceptionSDict->declVisible()) + else if (lde->kind()==LayoutDocEntry::NamespaceExceptions && exceptions.declVisible()) { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; QCString label = "exceptions"; ol.writeSummaryLink(0,label,ls->title(lang),first); first=FALSE; } - else if (lde->kind()==LayoutDocEntry::NamespaceNestedNamespaces && namespaceSDict && namespaceSDict->declVisible()) + else if (lde->kind()==LayoutDocEntry::NamespaceNestedNamespaces && namespaces.declVisible()) { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; QCString label = "namespaces"; @@ -940,11 +861,9 @@ void NamespaceDefImpl::addNamespaceAttributes(OutputList &ol) } } -void NamespaceDefImpl::writeClassesToTagFile(FTextStream &tagFile,ClassSDict *d) +void NamespaceDefImpl::writeClassesToTagFile(FTextStream &tagFile,const ClassLinkedRefMap &list) { - SDict<ClassDef>::Iterator ci(*d); - ClassDef *cd; - for (ci.toFirst();(cd=ci.current());++ci) + for (const auto &cd : list) { if (cd->isLinkableInProject()) { @@ -978,7 +897,7 @@ void NamespaceDefImpl::writeDocumentation(OutputList &ol) addNamespaceAttributes(ol); endTitle(ol,getOutputFileBase(),displayName()); ol.startContents(); - + if (Doxygen::searchIndex) { Doxygen::searchIndex->setCurrentDoc(this,anchor(),FALSE); @@ -997,82 +916,82 @@ void NamespaceDefImpl::writeDocumentation(OutputList &ol) { switch (lde->kind()) { - case LayoutDocEntry::BriefDesc: + case LayoutDocEntry::BriefDesc: writeBriefDescription(ol); - break; - case LayoutDocEntry::MemberDeclStart: + break; + case LayoutDocEntry::MemberDeclStart: startMemberDeclarations(ol); - break; - case LayoutDocEntry::NamespaceClasses: + break; + case LayoutDocEntry::NamespaceClasses: { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; - writeClassDeclarations(ol,ls->title(lang),classSDict); + writeClassDeclarations(ol,ls->title(lang),classes); } - break; - case LayoutDocEntry::NamespaceInterfaces: + break; + case LayoutDocEntry::NamespaceInterfaces: { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; - writeClassDeclarations(ol,ls->title(lang),interfaceSDict); + writeClassDeclarations(ol,ls->title(lang),interfaces); } - break; - case LayoutDocEntry::NamespaceStructs: + break; + case LayoutDocEntry::NamespaceStructs: { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; - writeClassDeclarations(ol,ls->title(lang),structSDict); + writeClassDeclarations(ol,ls->title(lang),structs); } - break; - case LayoutDocEntry::NamespaceExceptions: + break; + case LayoutDocEntry::NamespaceExceptions: { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; - writeClassDeclarations(ol,ls->title(lang),exceptionSDict); + writeClassDeclarations(ol,ls->title(lang),exceptions); } - break; - case LayoutDocEntry::NamespaceNestedNamespaces: + break; + case LayoutDocEntry::NamespaceNestedNamespaces: { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; writeNamespaceDeclarations(ol,ls->title(lang),false); } - break; + break; case LayoutDocEntry::NamespaceNestedConstantGroups: { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; writeNamespaceDeclarations(ol,ls->title(lang),true); } break; - case LayoutDocEntry::MemberGroups: + case LayoutDocEntry::MemberGroups: writeMemberGroups(ol); - break; - case LayoutDocEntry::MemberDecl: + break; + case LayoutDocEntry::MemberDecl: { LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; writeMemberDeclarations(ol,lmd->type,lmd->title(lang)); } - break; - case LayoutDocEntry::MemberDeclEnd: + break; + case LayoutDocEntry::MemberDeclEnd: endMemberDeclarations(ol); break; - case LayoutDocEntry::DetailedDesc: + case LayoutDocEntry::DetailedDesc: { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; writeDetailedDescription(ol,ls->title(lang)); } break; - case LayoutDocEntry::MemberDefStart: + case LayoutDocEntry::MemberDefStart: startMemberDocumentation(ol); - break; + break; case LayoutDocEntry::NamespaceInlineClasses: writeInlineClasses(ol); break; - case LayoutDocEntry::MemberDef: + case LayoutDocEntry::MemberDef: { LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde; writeMemberDocumentation(ol,lmd->type,lmd->title(lang)); } break; - case LayoutDocEntry::MemberDefEnd: + case LayoutDocEntry::MemberDefEnd: endMemberDocumentation(ol); break; - case LayoutDocEntry::AuthorSection: + case LayoutDocEntry::AuthorSection: writeAuthorSection(ol); break; case LayoutDocEntry::ClassIncludes: @@ -1090,16 +1009,16 @@ void NamespaceDefImpl::writeDocumentation(OutputList &ol) case LayoutDocEntry::FileConstantGroups: case LayoutDocEntry::FileIncludes: case LayoutDocEntry::FileIncludeGraph: - case LayoutDocEntry::FileIncludedByGraph: + case LayoutDocEntry::FileIncludedByGraph: case LayoutDocEntry::FileSourceLink: case LayoutDocEntry::FileInlineClasses: - case LayoutDocEntry::GroupClasses: - case LayoutDocEntry::GroupInlineClasses: + case LayoutDocEntry::GroupClasses: + case LayoutDocEntry::GroupInlineClasses: case LayoutDocEntry::GroupNamespaces: - case LayoutDocEntry::GroupDirs: - case LayoutDocEntry::GroupNestedGroups: + case LayoutDocEntry::GroupDirs: + case LayoutDocEntry::GroupNestedGroups: case LayoutDocEntry::GroupFiles: - case LayoutDocEntry::GroupGraph: + case LayoutDocEntry::GroupGraph: case LayoutDocEntry::GroupPageDocs: case LayoutDocEntry::DirSubDirs: case LayoutDocEntry::DirFiles: @@ -1129,9 +1048,7 @@ void NamespaceDefImpl::writeMemberPages(OutputList &ol) ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - QListIterator<MemberList> mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (const auto &ml : m_memberLists) { if (ml->listType()&MemberListType_documentationLists) { @@ -1157,25 +1074,25 @@ void NamespaceDefImpl::writeQuickMemberLinks(OutputList &ol,const MemberDef *cur { if (md->getNamespaceDef()==this && md->isLinkable() && !md->isEnumValue()) { - ol.writeString(" <tr><td class=\"navtab\">"); if (md->isLinkableInProject()) { if (md==currentMd) // selected item => highlight { - ol.writeString("<a class=\"qindexHL\" "); + ol.writeString(" <tr><td class=\"navtabHL\">"); } else { - ol.writeString("<a class=\"qindex\" "); + ol.writeString(" <tr><td class=\"navtab\">"); } + ol.writeString("<a class=\"navtab\" "); ol.writeString("href=\""); if (createSubDirs) ol.writeString("../../"); ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor()); ol.writeString("\">"); ol.writeString(convertToHtml(md->localName())); ol.writeString("</a>"); + ol.writeString("</td></tr>\n"); } - ol.writeString("</td></tr>\n"); } } } @@ -1186,22 +1103,15 @@ void NamespaceDefImpl::writeQuickMemberLinks(OutputList &ol,const MemberDef *cur void NamespaceDefImpl::countMembers() { - QListIterator<MemberList> mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { ml->countDecMembers(); ml->countDocMembers(); } - if (memberGroupSDict) + for (const auto &mg : m_memberGroups) { - MemberGroupSDict::Iterator mgli(*memberGroupSDict); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->countDecMembers(); - mg->countDocMembers(); - } + mg->countDecMembers(); + mg->countDocMembers(); } } @@ -1213,33 +1123,13 @@ int NamespaceDefImpl::numDocMembers() const void NamespaceDefImpl::addUsingDirective(const NamespaceDef *nd) { - if (usingDirList==0) - { - usingDirList = new NamespaceSDict; - } - if (usingDirList->find(nd->qualifiedName())==0) - { - usingDirList->append(nd->qualifiedName(),nd); - } - //printf("%p: NamespaceDefImpl::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count()); -} - -const NamespaceSDict *NamespaceDefImpl::getUsedNamespaces() const -{ - //printf("%p: NamespaceDefImpl::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0); - return usingDirList; + m_usingDirList.add(nd->qualifiedName(),nd); + //printf("%p: NamespaceDefImpl::addUsingDirective: %s:%d\n",this,name().data(),m_usingDirList->count()); } -void NamespaceDefImpl::addUsingDeclaration(const Definition *d) +void NamespaceDefImpl::addUsingDeclaration(const ClassDef *cd) { - if (usingDeclList==0) - { - usingDeclList = new SDict<Definition>(17); - } - if (usingDeclList->find(d->qualifiedName())==0) - { - usingDeclList->append(d->qualifiedName(),d); - } + m_usingDeclList.add(cd->qualifiedName(),cd); } QCString NamespaceDefImpl::getOutputFileBase() const @@ -1247,19 +1137,19 @@ QCString NamespaceDefImpl::getOutputFileBase() const return fileName; } -Definition *NamespaceDefImpl::findInnerCompound(const char *n) const +const Definition *NamespaceDefImpl::findInnerCompound(const char *n) const { if (n==0) return 0; - Definition *d = m_innerCompounds->find(n); + const Definition *d = m_innerCompounds->find(n); if (d==0) { - if (usingDirList) + if (!m_usingDirList.empty()) { - d = usingDirList->find(n); + d = m_usingDirList.find(n); } - if (d==0 && usingDeclList) + if (d==0 && !m_usingDeclList.empty()) { - d = usingDeclList->find(n); + d = m_usingDeclList.find(n); } } return d; @@ -1269,26 +1159,22 @@ void NamespaceDefImpl::addListReferences() { //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); { - const std::vector<ListItemInfo> &xrefItems = xrefListItems(); + const RefItemVector &xrefItems = xrefListItems(); addRefItem(xrefItems, qualifiedName(), - getLanguage()==SrcLangExt_Fortran ? - theTranslator->trModule(TRUE,TRUE) : + getLanguage()==SrcLangExt_Fortran ? + theTranslator->trModule(TRUE,TRUE) : theTranslator->trNamespace(TRUE,TRUE), getOutputFileBase(),displayName(), 0, this ); } - MemberGroupSDict::Iterator mgli(*memberGroupSDict); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) + for (const auto &mg : m_memberGroups) { mg->addListReferences(this); } - QListIterator<MemberList> mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { if (ml->listType()&MemberListType_documentationLists) { @@ -1299,15 +1185,7 @@ void NamespaceDefImpl::addListReferences() QCString NamespaceDefImpl::displayName(bool includeScope) const { - QCString result=includeScope ? name() : localName(); - SrcLangExt lang = getLanguage(); - QCString sep = getLanguageSpecificSeparator(lang); - if (sep!="::") - { - result = substitute(result,"::",sep); - } - //printf("NamespaceDefImpl::displayName() %s->%s lang=%d\n",name().data(),result.data(),lang); - return result; + return makeDisplayName(this,includeScope); } QCString NamespaceDefImpl::localName() const @@ -1321,51 +1199,41 @@ QCString NamespaceDefImpl::localName() const return result; } -void NamespaceDefImpl::combineUsingRelations() +void NamespaceDefImpl::combineUsingRelations(NamespaceDefSet &visitedNamespaces) { - if (m_visited) return; // already done - m_visited=TRUE; - if (usingDirList) + if (visitedNamespaces.find(this)!=visitedNamespaces.end()) return; // already processed + visitedNamespaces.insert(this); + + LinkedRefMap<const NamespaceDef> usingDirList = m_usingDirList; + for (auto &nd : usingDirList) { - NamespaceSDict::Iterator nli(*usingDirList); - NamespaceDef *nd; - for (nli.toFirst();(nd=nli.current());++nli) + NamespaceDefMutable *ndm = toNamespaceDefMutable(nd); + if (ndm) { - nd->combineUsingRelations(); + ndm->combineUsingRelations(visitedNamespaces); } - for (nli.toFirst();(nd=nli.current());++nli) + } + + for (auto &nd : usingDirList) + { + // add used namespaces of namespace nd to this namespace + for (const auto &und : nd->getUsedNamespaces()) { - // add used namespaces of namespace nd to this namespace - if (nd->getUsedNamespaces()) - { - NamespaceSDict::Iterator unli(*nd->getUsedNamespaces()); - NamespaceDef *und; - for (unli.toFirst();(und=unli.current());++unli) - { - //printf("Adding namespace %s to the using list of %s\n",und->qualifiedName().data(),qualifiedName().data()); - addUsingDirective(und); - } - } - // add used classes of namespace nd to this namespace - if (nd->getUsedClasses()) - { - SDict<Definition>::Iterator cli(*nd->getUsedClasses()); - Definition *ucd; - for (cli.toFirst();(ucd=cli.current());++cli) - { - //printf("Adding class %s to the using list of %s\n",cd->qualifiedName().data(),qualifiedName().data()); - addUsingDeclaration(ucd); - } - } + addUsingDirective(und); + } + // add used classes of namespace nd to this namespace + for (const auto &ucd : nd->getUsedClasses()) + { + addUsingDeclaration(ucd); } } } -bool NamespaceSDict::declVisible() const +//------------------------------------------------------------------------------- + +bool NamespaceLinkedRefMap::declVisible() const { - SDict<NamespaceDef>::Iterator ni(*this); - NamespaceDef *nd; - for (ni.toFirst();(nd=ni.current());++ni) + for (const auto &nd : *this) { if (nd->isLinkable()) { @@ -1375,20 +1243,17 @@ bool NamespaceSDict::declVisible() const return FALSE; } -void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title, +void NamespaceLinkedRefMap::writeDeclaration(OutputList &ol,const char *title, bool const isConstantGroup,bool localName) { - - if (count()==0) return; // no namespaces in the list + + if (empty()) return; // no namespaces in the list if (Config_getBool(OPTIMIZE_OUTPUT_VHDL)) return; - - SDict<NamespaceDef>::Iterator ni(*this); - NamespaceDef *nd; bool found=FALSE; - for (ni.toFirst();(nd=ni.current()) && !found;++ni) + for (const auto &nd : *this) { if (nd->isLinkable() && nd->hasDocumentation()) { @@ -1421,7 +1286,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title, ol.parseText(title); ol.endMemberHeader(); ol.startMemberList(); - for (ni.toFirst();(nd=ni.current());++ni) + for (const auto &nd : *this) { if (nd->isLinkable() && nd->hasDocumentation()) { @@ -1448,7 +1313,8 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title, if (!nd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC)) { ol.startMemberDescription(nd->getOutputFileBase()); - ol.generateDoc(nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription(),FALSE,FALSE,0,TRUE); + ol.generateDoc(nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription(),FALSE,FALSE, + 0,TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT)); ol.endMemberDescription(); } ol.endMemberDeclaration(0,0); @@ -1457,29 +1323,13 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title, ol.endMemberList(); } -MemberList *NamespaceDefImpl::createMemberList(MemberListType lt) -{ - m_memberLists.setAutoDelete(TRUE); - QListIterator<MemberList> mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) - { - if (ml->listType()==lt) - { - return ml; - } - } - // not found, create a new member list - ml = new MemberList(lt); - m_memberLists.append(ml); - return ml; -} +//------------------------------------------------------------------------------- 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 = createMemberList(lt); + const auto &ml = m_memberLists.get(lt); ml->setNeedsSorting( ((ml->listType()&MemberListType_declarationLists) && sortBriefDocs) || ((ml->listType()&MemberListType_documentationLists) && sortMemberDocs)); @@ -1487,49 +1337,53 @@ void NamespaceDefImpl::addMemberToList(MemberListType lt,MemberDef *md) if (ml->listType()&MemberListType_declarationLists) { - md->setSectionList(ml); + MemberDefMutable *mdm = toMemberDefMutable(md); + if (mdm) + { + mdm->setSectionList(this,ml.get()); + } } } void NamespaceDefImpl::sortMemberLists() { - QListIterator<MemberList> mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); } } - if (classSDict) - { - classSDict->sort(); - } - if (interfaceSDict) - { - interfaceSDict->sort(); - } - if (structSDict) - { - structSDict->sort(); - } - if (exceptionSDict) + + if (Config_getBool(SORT_BRIEF_DOCS)) { - exceptionSDict->sort(); + auto classComp = [](const ClassLinkedRefMap::Ptr &c1,const ClassLinkedRefMap::Ptr &c2) + { + return Config_getBool(SORT_BY_SCOPE_NAME) ? + qstricmp(c1->name(), c2->name())<0 : + qstricmp(c1->className(), c2->className())<0; + }; + + std::sort(classes.begin(), classes.end(), classComp); + std::sort(interfaces.begin(),interfaces.end(),classComp); + std::sort(structs.begin(), structs.end(), classComp); + std::sort(exceptions.begin(),exceptions.end(),classComp); + } - if (namespaceSDict) + + // TODO: inconsistent: should be only done when SORT_BRIEF_DOCS is enabled... + auto namespaceComp = [](const NamespaceLinkedRefMap::Ptr &n1,const NamespaceLinkedRefMap::Ptr &n2) { - namespaceSDict->sort(); - } + return qstricmp(n1->name(),n2->name())<0; + }; + + std::sort(namespaces.begin(),namespaces.end(),namespaceComp); } MemberList *NamespaceDefImpl::getMemberList(MemberListType lt) const { - QListIterator<MemberList> mli(m_memberLists); - MemberList *ml; - for (mli.toFirst();(ml=mli.current());++mli) + for (auto &ml : m_memberLists) { if (ml->listType()==lt) { - return ml; + return ml.get(); } } return 0; @@ -1571,15 +1425,9 @@ bool NamespaceDefImpl::isLinkable() const return isLinkableInProject() || isReference(); } -MemberDef * NamespaceDefImpl::getMemberByName(const QCString &n) const +const MemberDef * NamespaceDefImpl::getMemberByName(const QCString &n) const { - MemberDef *md = 0; - if (m_allMembersDict && !n.isEmpty()) - { - md = m_allMembersDict->find(n); - //printf("%s::m_allMembersDict->find(%s)=%p\n",name().data(),n.data(),md); - } - return md; + return m_allMembers.find(n); } QCString NamespaceDefImpl::title() const @@ -1648,3 +1496,68 @@ void NamespaceDefImpl::setMetaData(const QCString &m) { metaData = m; } + +// --- Cast functions +// +NamespaceDef *toNamespaceDef(Definition *d) +{ + if (d && (typeid(*d)==typeid(NamespaceDefImpl) || typeid(*d)==typeid(NamespaceDefAliasImpl))) + { + return static_cast<NamespaceDef*>(d); + } + else + { + return 0; + } +} + +NamespaceDef *toNamespaceDef(DefinitionMutable *md) +{ + Definition *d = toDefinition(md); + if (d && typeid(*d)==typeid(NamespaceDefImpl)) + { + return static_cast<NamespaceDef*>(d); + } + else + { + return 0; + } +} + + +const NamespaceDef *toNamespaceDef(const Definition *d) +{ + if (d && (typeid(*d)==typeid(NamespaceDefImpl) || typeid(*d)==typeid(NamespaceDefAliasImpl))) + { + return static_cast<const NamespaceDef*>(d); + } + else + { + return 0; + } +} + +NamespaceDefMutable *toNamespaceDefMutable(Definition *d) +{ + if (d && typeid(*d)==typeid(NamespaceDefImpl)) + { + return static_cast<NamespaceDefMutable*>(d); + } + else + { + return 0; + } +} + +NamespaceDefMutable *toNamespaceDefMutable(const Definition *d) +{ + if (d && typeid(*d)==typeid(NamespaceDefImpl)) + { + return const_cast<NamespaceDefMutable*>(static_cast<const NamespaceDefMutable*>(d)); + } + else + { + return 0; + } +} + |