1 /******************************************************************************
5 * Copyright (C) 1997-2015 by Dimitri van Heesch.
7 * Permission to use, copy, modify, and distribute this software and its
8 * documentation under the terms of the GNU General Public License is hereby
9 * granted. No representations are made about the suitability of this software
10 * for any purpose. It is provided "as is" without express or implied warranty.
11 * See the GNU General Public License for more details.
13 * Documents produced by Doxygen are derivative works derived from the
14 * input used in their production; they are not affected by this license.
18 #ifndef NAMESPACEDEF_H
19 #define NAMESPACEDEF_H
24 #include "definition.h"
34 class MemberGroupSDict;
38 /** A model of a namespace symbol. */
39 class NamespaceDef : public Definition
42 NamespaceDef(const char *defFileName,int defLine,int defColumn,
43 const char *name,const char *ref=0,
44 const char *refFile=0,const char*type=0,
45 bool isPublished=false);
47 DefType definitionType() const { return TypeNamespace; }
48 QCString getOutputFileBase() const;
49 QCString anchor() const { return QCString(); }
50 void insertUsedFile(FileDef *fd);
52 void writeDocumentation(OutputList &ol);
53 void writeMemberPages(OutputList &ol);
54 void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
55 void writeTagFile(FTextStream &);
57 void insertClass(ClassDef *cd);
58 void insertNamespace(NamespaceDef *nd);
59 void insertMember(MemberDef *md);
61 void computeAnchors();
63 void addUsingDirective(NamespaceDef *nd);
64 NamespaceSDict *getUsedNamespaces() const;
65 void addUsingDeclaration(Definition *def);
66 SDict<Definition> *getUsedClasses() const { return usingDeclList; }
67 void combineUsingRelations();
68 QCString displayName(bool=TRUE) const;
69 QCString localName() const;
71 bool isConstantGroup() const { return CONSTANT_GROUP == m_type; }
72 bool isModule() const { return MODULE == m_type; }
73 bool isLibrary() const { return LIBRARY == m_type; }
75 bool isLinkableInProject() const;
76 bool isLinkable() const;
77 bool hasDetailedDescription() const;
78 void addMembersToMemberGroup();
79 void distributeMemberGroupDocumentation();
80 void findSectionsInDocumentation();
81 void sortMemberLists();
83 virtual Definition *findInnerCompound(const char *name) const;
84 void addInnerCompound(Definition *d);
85 void addListReferences();
86 void setFileName(const QCString &fn);
88 bool subGrouping() const { return m_subGrouping; }
90 MemberList *getMemberList(MemberListType lt) const;
91 const QList<MemberList> &getMemberLists() const { return m_memberLists; }
92 MemberDef *getMemberByName(const QCString &) const;
94 /*! Returns the user defined member groups */
95 MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
97 /*! Returns the classes contained in this namespace */
98 ClassSDict *getClassSDict() const { return classSDict; }
100 /*! Returns the namespaces contained in this namespace */
101 NamespaceSDict *getNamespaceSDict() const { return namespaceSDict; }
103 QCString title() const;
104 QCString compoundTypeString() const;
109 MemberList *createMemberList(MemberListType lt);
110 void addMemberToList(MemberListType lt,MemberDef *md);
111 void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
112 void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
113 void writeDetailedDescription(OutputList &ol,const QCString &title);
114 void writeBriefDescription(OutputList &ol);
115 void startMemberDeclarations(OutputList &ol);
116 void endMemberDeclarations(OutputList &ol);
117 void writeClassDeclarations(OutputList &ol,const QCString &title);
118 void writeInlineClasses(OutputList &ol);
119 void writeNamespaceDeclarations(OutputList &ol,const QCString &title,
120 bool isConstantGroup=false);
121 void writeMemberGroups(OutputList &ol);
122 void writeAuthorSection(OutputList &ol);
123 void startMemberDocumentation(OutputList &ol);
124 void endMemberDocumentation(OutputList &ol);
125 void writeSummaryLinks(OutputList &ol);
126 void addNamespaceAttributes(OutputList &ol);
131 NamespaceSDict *usingDirList;
132 SDict<Definition> *usingDeclList;
133 SDict<Definition> *m_innerCompounds;
135 MemberSDict *m_allMembersDict;
136 QList<MemberList> m_memberLists;
137 MemberGroupSDict *memberGroupSDict;
138 ClassSDict *classSDict;
139 NamespaceSDict *namespaceSDict;
141 enum { NAMESPACE, MODULE, CONSTANT_GROUP, LIBRARY } m_type;
145 /** A list of NamespaceDef objects. */
146 class NamespaceList : public QList<NamespaceDef>
150 int compareValues(const NamespaceDef *nd1,const NamespaceDef *nd2) const
152 return qstricmp(nd1->name(), nd2->name());
156 /** An iterator for NamespaceDef objects in a NamespaceList. */
157 class NamespaceListIterator : public QListIterator<NamespaceDef>
160 NamespaceListIterator(const NamespaceList &l) :
161 QListIterator<NamespaceDef>(l) {}
164 /** An unsorted dictionary of NamespaceDef objects. */
165 class NamespaceDict : public QDict<NamespaceDef>
168 NamespaceDict(int size) : QDict<NamespaceDef>(size) {}
172 /** A sorted dictionary of NamespaceDef objects. */
173 class NamespaceSDict : public SDict<NamespaceDef>
176 NamespaceSDict(int size=17) : SDict<NamespaceDef>(size) {}
178 void writeDeclaration(OutputList &ol,const char *title,
179 bool isConstantGroup=false, bool localName=FALSE);
180 bool declVisible() const;
182 int compareValues(const NamespaceDef *item1,const NamespaceDef *item2) const
184 return qstricmp(item1->name(),item2->name());