diff options
Diffstat (limited to 'src/namespacedef.h')
-rw-r--r-- | src/namespacedef.h | 171 |
1 files changed, 76 insertions, 95 deletions
diff --git a/src/namespacedef.h b/src/namespacedef.h index 3be54f2..e644a32 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -1,12 +1,10 @@ /****************************************************************************** * - * - * - * Copyright (C) 1997-2015 by Dimitri van Heesch. + * Copyright (C) 1997-2020 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. * @@ -18,104 +16,121 @@ #ifndef NAMESPACEDEF_H #define NAMESPACEDEF_H +#include <set> + #include <qstrlist.h> -#include <qdict.h> -#include "sortdict.h" #include "definition.h" #include "filedef.h" +#include "linkedmap.h" +#include "membergroup.h" class MemberList; class ClassDef; class OutputList; -class ClassSDict; +class ClassLinkedRefMap; class MemberDef; -class MemberGroupSDict; -class NamespaceSDict; +class NamespaceDef; class FTextStream; +class NamespaceDef; +class NamespaceDefMutable; + +// --- Set of namespaces + +using NamespaceDefSet = std::set<const NamespaceDef*>; + +class NamespaceLinkedMap : public LinkedMap<NamespaceDef> +{ +}; + +class NamespaceLinkedRefMap : public LinkedRefMap<const NamespaceDef> +{ + public: + void writeDeclaration(OutputList &ol,const char *title, + bool isConstantGroup=false, bool localName=FALSE); + bool declVisible() const; +}; /** An abstract interface of a namespace symbol. */ -class NamespaceDef : virtual public Definition +class NamespaceDef : public Definition { public: virtual ~NamespaceDef() {} virtual DefType definitionType() const = 0; + + // ---- getters virtual QCString getOutputFileBase() const = 0; virtual QCString anchor() const = 0; - virtual void insertUsedFile(FileDef *fd) = 0; - - virtual void writeDocumentation(OutputList &ol) = 0; - virtual void writeMemberPages(OutputList &ol) = 0; - virtual void writeQuickMemberLinks(OutputList &ol,const MemberDef *currentMd) const = 0; - virtual void writeTagFile(FTextStream &) = 0; - - virtual void insertClass(const ClassDef *cd) = 0; - virtual void insertNamespace(const NamespaceDef *nd) = 0; - virtual void insertMember(MemberDef *md) = 0; // md cannot be const, since setSectionList is called on it - - virtual void computeAnchors() = 0; - virtual void countMembers() = 0; virtual int numDocMembers() const = 0; - virtual void addUsingDirective(const NamespaceDef *nd) = 0; - virtual const NamespaceSDict *getUsedNamespaces() const = 0; - virtual void addUsingDeclaration(const Definition *def) = 0; - virtual const SDict<Definition> *getUsedClasses() const = 0; - virtual void combineUsingRelations() = 0; + virtual LinkedRefMap<const NamespaceDef> getUsedNamespaces() const = 0; + virtual LinkedRefMap<const ClassDef> getUsedClasses() const = 0; virtual QCString displayName(bool=TRUE) const = 0; virtual QCString localName() const = 0; - virtual void setInline(bool isInline) = 0; - virtual bool isConstantGroup() const = 0; virtual bool isModule() const = 0; virtual bool isLibrary() const = 0; virtual bool isInline() const = 0; - virtual bool isLinkableInProject() const = 0; virtual bool isLinkable() const = 0; virtual bool hasDetailedDescription() const = 0; - virtual void addMembersToMemberGroup() = 0; - virtual void distributeMemberGroupDocumentation() = 0; - virtual void findSectionsInDocumentation() = 0; - virtual void sortMemberLists() = 0; - - virtual Definition *findInnerCompound(const char *name) const = 0; - virtual void addInnerCompound(const Definition *d) = 0; - virtual void addListReferences() = 0; - virtual void setFileName(const QCString &fn) = 0; - + virtual const Definition *findInnerCompound(const char *name) const = 0; virtual bool subGrouping() const = 0; - virtual MemberList *getMemberList(MemberListType lt) const = 0; - virtual const QList<MemberList> &getMemberLists() const = 0; - virtual MemberDef *getMemberByName(const QCString &) const = 0; + virtual const MemberLists &getMemberLists() const = 0; + virtual const MemberDef *getMemberByName(const QCString &) const = 0; /*! Returns the user defined member groups */ - virtual MemberGroupSDict *getMemberGroupSDict() const = 0; + virtual const MemberGroupList &getMemberGroups() const = 0; /*! Returns the classes contained in this namespace */ - virtual ClassSDict *getClassSDict() const = 0; + virtual ClassLinkedRefMap getClasses() const = 0; /*! Returns the Slice interfaces contained in this namespace */ - virtual ClassSDict *getInterfaceSDict() const = 0; + virtual ClassLinkedRefMap getInterfaces() const = 0; /*! Returns the Slice structs contained in this namespace */ - virtual ClassSDict *getStructSDict() const = 0; + virtual ClassLinkedRefMap getStructs() const = 0; /*! Returns the Slice exceptions contained in this namespace */ - virtual ClassSDict *getExceptionSDict() const = 0; + virtual ClassLinkedRefMap getExceptions() const = 0; /*! Returns the namespaces contained in this namespace */ - virtual const NamespaceSDict *getNamespaceSDict() const = 0; + virtual NamespaceLinkedRefMap getNamespaces() const = 0; virtual QCString title() const = 0; virtual QCString compoundTypeString() const = 0; +}; + +class NamespaceDefMutable : public DefinitionMutable, public NamespaceDef +{ + public: + // --- setters/actions virtual void setMetaData(const QCString &m) = 0; - virtual void setVisited(bool v) = 0; - virtual bool isVisited() const = 0; + virtual void insertUsedFile(FileDef *fd) = 0; + virtual void writeDocumentation(OutputList &ol) = 0; + virtual void writeMemberPages(OutputList &ol) = 0; + virtual void writeQuickMemberLinks(OutputList &ol,const MemberDef *currentMd) const = 0; + virtual void writeTagFile(FTextStream &) = 0; + virtual void insertClass(const ClassDef *cd) = 0; + virtual void insertNamespace(const NamespaceDef *nd) = 0; + virtual void insertMember(MemberDef *md) = 0; // md cannot be const, since setSectionList is called on it + virtual void computeAnchors() = 0; + virtual void countMembers() = 0; + virtual void addMembersToMemberGroup() = 0; + virtual void distributeMemberGroupDocumentation() = 0; + virtual void findSectionsInDocumentation() = 0; + virtual void sortMemberLists() = 0; + virtual void addInnerCompound(const Definition *d) = 0; + virtual void addListReferences() = 0; + virtual void setFileName(const QCString &fn) = 0; + virtual void combineUsingRelations(NamespaceDefSet &visitedNamespace) = 0; + virtual void addUsingDirective(const NamespaceDef *nd) = 0; + virtual void addUsingDeclaration(const ClassDef *cd) = 0; + virtual void setInline(bool isInline) = 0; }; /** Factory method to create new NamespaceDef instance */ -NamespaceDef *createNamespaceDef(const char *defFileName,int defLine,int defColumn, +NamespaceDefMutable *createNamespaceDef(const char *defFileName,int defLine,int defColumn, const char *name,const char *ref=0, const char *refFile=0,const char*type=0, bool isPublished=false); @@ -123,49 +138,15 @@ NamespaceDef *createNamespaceDef(const char *defFileName,int defLine,int defColu /** Factory method to create an alias of an existing namespace. Used for inline namespaces. */ NamespaceDef *createNamespaceDefAlias(const Definition *newScope, const NamespaceDef *nd); -/** A list of NamespaceDef objects. */ -class NamespaceList : public QList<NamespaceDef> -{ - public: - ~NamespaceList() {} - int compareValues(const NamespaceDef *nd1,const NamespaceDef *nd2) const - { - return qstricmp(nd1->name(), nd2->name()); - } -}; - -/** An iterator for NamespaceDef objects in a NamespaceList. */ -class NamespaceListIterator : public QListIterator<NamespaceDef> -{ - public: - NamespaceListIterator(const NamespaceList &l) : - QListIterator<NamespaceDef>(l) {} -}; - -/** An unsorted dictionary of NamespaceDef objects. */ -class NamespaceDict : public QDict<NamespaceDef> -{ - public: - NamespaceDict(int size) : QDict<NamespaceDef>(size) {} - ~NamespaceDict() {} -}; -/** A sorted dictionary of NamespaceDef objects. */ -class NamespaceSDict : public SDict<NamespaceDef> -{ - public: - NamespaceSDict(int size=17) : SDict<NamespaceDef>(size) {} - ~NamespaceSDict() {} - void writeDeclaration(OutputList &ol,const char *title, - bool isConstantGroup=false, bool localName=FALSE); - bool declVisible() const; - private: - int compareValues(const NamespaceDef *item1,const NamespaceDef *item2) const - { - return qstricmp(item1->name(),item2->name()); - } -}; +// --- Cast functions +NamespaceDef *toNamespaceDef(Definition *d); +NamespaceDef *toNamespaceDef(DefinitionMutable *d); +const NamespaceDef *toNamespaceDef(const Definition *d); +NamespaceDefMutable *toNamespaceDefMutable(Definition *d); +NamespaceDefMutable *toNamespaceDefMutable(const Definition *d); +//------------------------------------------------------------------------ #endif |