Doxygen
Loading...
Searching...
No Matches
filedef.h
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Copyright (C) 1997-2026 by Dimitri van Heesch.
4 *
5 * Permission to use, copy, modify, and distribute this software and its
6 * documentation under the terms of the GNU General Public License is hereby
7 * granted. No representations are made about the suitability of this software
8 * for any purpose. It is provided "as is" without express or implied warranty.
9 * See the GNU General Public License for more details.
10 *
11 * Documents produced by Doxygen are derivative works derived from the
12 * input used in their production; they are not affected by this license.
13 *
14 */
15
16#ifndef FILEDEF_H
17#define FILEDEF_H
18
19#include <memory>
20#include <unordered_set>
21
22#include "definition.h"
23#include "memberlist.h"
24#include "containers.h"
25
26class ClangTUParser;
27class ClassDef;
29class ConceptDef;
31class DirDef;
32class FileDef;
33class FileList;
34class MemberDef;
35class NamespaceDef;
37class OutputList;
38
39// --- Set of files
40
41using FileDefSet = std::unordered_set<const FileDef*>;
42
43enum class IncludeKind : uint32_t
44{
45 // bits
46 IncludeSystem = 0x0001,
47 IncludeLocal = 0x0002,
50 ImportSystem = 0x0010, // C++20 header import
51 ImportLocal = 0x0020, // C++20 header import
52 ImportModule = 0x0040 // C++20/Java module import
53};
54
55inline constexpr uint32_t operator|(IncludeKind a, IncludeKind b) { return static_cast<uint32_t>(a) | static_cast<uint32_t>(b); }
56inline constexpr uint32_t operator|(uint32_t a, IncludeKind b) { return a | static_cast<uint32_t>(b); }
57inline constexpr uint32_t operator&(IncludeKind a, uint32_t mask) { return static_cast<uint32_t>(a) & mask; }
58
59// masks
65
69
70/** Class representing the data associated with a \#include statement. */
81
82class IncludeInfoList final : public std::vector<IncludeInfo>
83{
84};
85
86bool compareFileDefs(const FileDef *fd1, const FileDef *fd2);
87
88/** A model of a file symbol.
89 *
90 * An object of this class contains all file information that is gathered.
91 * This includes the members and compounds defined in the file.
92 *
93 * The member writeDocumentation() can be used to generate the page of
94 * documentation to HTML and LaTeX.
95 */
96class FileDef : public DefinitionMutable, public Definition
97{
98 public:
100 // ----------------------------------------------------------------------
101
102 /*! Returns the unique file name (this may include part of the path). */
103 virtual DString fileName() const = 0;
104
105 /*! Returns the name of the verbatim copy of this file (if any). */
106 virtual DString includeName() const = 0;
107
109
111
112 /*! Returns the absolute path including the file name. */
113 virtual DString absFilePath() const = 0;
114
115 /*! Returns the name as it is used in the documentation */
116 virtual const DString &docName() const = 0;
117
118 /*! Returns true if this file is a source file. */
119 virtual bool isSource() const = 0;
120
121 virtual bool isDocumentationFile() const = 0;
122
123 virtual const Definition *getSourceDefinition(int lineNr) const = 0;
124 virtual const MemberDef *getSourceMember(int lineNr) const = 0;
125
126 /*! Returns the absolute path of this file. */
127 virtual DString getPath() const = 0;
128
129 /*! Returns version of this file. */
130 virtual DString getVersion() const = 0;
131
132 virtual bool isIncluded(const DString &name) const = 0;
133
134 virtual DirDef *getDirDef() const = 0;
135 virtual ModuleDef *getModuleDef() const = 0;
136 virtual const LinkedRefMap<NamespaceDef> &getUsedNamespaces() const = 0;
137 virtual const LinkedRefMap<const Definition> &getUsedDefinitions() const = 0;
138 virtual const IncludeInfoList &includeFileList() const = 0;
139 virtual const IncludeInfoList &includedByFileList() const = 0;
140 virtual void getAllIncludeFilesRecursively(StringVector &incFiles) const = 0;
141
143 virtual const MemberLists &getMemberLists() const = 0;
144
145 /* user defined member groups */
146 virtual const MemberGroupList &getMemberGroups() const = 0;
147 virtual const NamespaceLinkedRefMap &getNamespaces() const = 0;
148 virtual const ConceptLinkedRefMap &getConcepts() const = 0;
149 virtual const ClassLinkedRefMap &getClasses() const = 0;
150
151 virtual DString title() const = 0;
152 virtual bool hasDetailedDescription() const = 0;
153 virtual DString fileVersion() const = 0;
154
155 virtual bool subGrouping() const = 0;
156
157 virtual void countMembers() = 0;
158 virtual int numDocMembers() const = 0;
159 virtual int numDecMembers() const = 0;
160
161 //---------------------------------
162
163 virtual void addSourceRef(int line,const Definition *d,const MemberDef *md) = 0;
164
165 virtual void writeDocumentation(OutputList &ol) = 0;
166 virtual void writeMemberPages(OutputList &ol) = 0;
167 virtual void writeTagFile(TextStream &t) = 0;
168
169 virtual void writeSourceHeader(OutputList &ol) = 0;
170 virtual void writeSourceBody(OutputList &ol,ClangTUParser *clangParser) = 0;
171 virtual void writeSourceFooter(OutputList &ol) = 0;
172 virtual void parseSource(ClangTUParser *clangParser) = 0;
173 virtual void setDiskName(const DString &name) = 0;
174
175 virtual void insertMember(MemberDef *md) = 0;
176 virtual void insertClass(ClassDef *cd) = 0;
177 virtual void insertConcept(ConceptDef *cd) = 0;
178 virtual void insertNamespace(NamespaceDef *nd) = 0;
179 virtual void removeMember(MemberDef *md) = 0;
180 virtual void computeAnchors() = 0;
181
182 virtual void setDirDef(DirDef *dd) = 0;
183 virtual void setModuleDef(ModuleDef *mod) = 0;
184
185 virtual void addUsingDirective(NamespaceDef *nd) = 0;
186 virtual void addUsingDeclaration(const Definition *d) = 0;
187 virtual void combineUsingRelations() = 0;
188
189 virtual bool generateSourceFile() const = 0;
190 virtual void sortMemberLists() = 0;
191
192 virtual void addIncludeDependency(const FileDef *fd,const DString &incName,IncludeKind kind) = 0;
193 virtual void addIncludedByDependency(const FileDef *fd,const DString &incName,IncludeKind kind) = 0;
194
195 virtual void addMembersToMemberGroup() = 0;
197 virtual void findSectionsInDocumentation() = 0;
198 virtual void addIncludedUsingDirectives(FileDefSet &visitedFiles) = 0;
199
200 virtual void addListReferences() = 0;
201 virtual void addRequirementReferences() = 0;
202
203 // include graph related members
204 virtual bool hasIncludeGraph() const = 0;
205 virtual bool hasIncludedByGraph() const = 0;
206
207 virtual void overrideIncludeGraph(bool e) = 0;
208 virtual void overrideIncludedByGraph(bool e) = 0;
209
210 /** Returns true if this file is visible in the index.
211 * The parameter \a genSourceFile is set to true if this file is only linkable as a source file.
212 */
213 virtual bool visibleInIndex(bool &genSourceFile) const = 0;
214};
215
216std::unique_ptr<FileDef> createFileDef(const DString &p,const DString &n,const DString &ref=DString(),const DString &dn=DString());
217
218
219// --- Cast functions
220
222const FileDef *toFileDef(const Definition *d);
223
224// ------------------
225
226class FileList final : public std::vector<const FileDef *>
227{
228};
229
231{
232 FilesInDir(const DString &p) : path(p) {}
234 std::vector<const FileDef *> files;
235};
236
237#endif
238
Clang parser object for a single translation unit, which consists of a source file and the directly o...
Definition clangparser.h:25
A abstract class representing of a compound symbol.
Definition classdef.h:100
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition dstring.h:84
The common base class of all entity definitions found in the sources.
Definition definition.h:77
virtual const DString & name() const =0
A model of a directory symbol.
Definition dirdef.h:108
A model of a file symbol.
Definition filedef.h:97
virtual void addUsingDeclaration(const Definition *d)=0
virtual void removeMember(MemberDef *md)=0
virtual void setModuleDef(ModuleDef *mod)=0
virtual const NamespaceLinkedRefMap & getNamespaces() const =0
virtual void insertClass(ClassDef *cd)=0
virtual void findSectionsInDocumentation()=0
virtual DString fileName() const =0
virtual DString getPath() const =0
virtual void writeDocumentation(OutputList &ol)=0
virtual DString fileVersion() const =0
virtual const MemberGroupList & getMemberGroups() const =0
virtual void countMembers()=0
virtual void computeAnchors()=0
virtual void setDiskName(const DString &name)=0
virtual void insertConcept(ConceptDef *cd)=0
virtual void addIncludedUsingDirectives(FileDefSet &visitedFiles)=0
virtual void addIncludeDependency(const FileDef *fd, const DString &incName, IncludeKind kind)=0
virtual bool isIncluded(const DString &name) const =0
virtual const Definition * getSourceDefinition(int lineNr) const =0
virtual bool hasDetailedDescription() const =0
virtual bool hasIncludedByGraph() const =0
virtual void writeTagFile(TextStream &t)=0
virtual DString includeName() const =0
virtual void overrideIncludeGraph(bool e)=0
virtual const MemberDef * getSourceMember(int lineNr) const =0
virtual ModuleDef * getModuleDef() const =0
virtual void writeSourceHeader(OutputList &ol)=0
virtual DString getVersion() const =0
virtual bool generateSourceFile() const =0
virtual void addSourceRef(int line, const Definition *d, const MemberDef *md)=0
virtual DString absFilePath() const =0
virtual const DString & docName() const =0
virtual const LinkedRefMap< NamespaceDef > & getUsedNamespaces() const =0
virtual const LinkedRefMap< const Definition > & getUsedDefinitions() const =0
virtual int numDocMembers() const =0
virtual bool visibleInIndex(bool &genSourceFile) const =0
Returns true if this file is visible in the index.
virtual void sortMemberLists()=0
virtual void setDirDef(DirDef *dd)=0
virtual const ClassLinkedRefMap & getClasses() const =0
virtual DString includeDependencyGraphFileName() const =0
virtual void addListReferences()=0
virtual bool isSource() const =0
virtual void addIncludedByDependency(const FileDef *fd, const DString &incName, IncludeKind kind)=0
virtual bool hasIncludeGraph() const =0
virtual void parseSource(ClangTUParser *clangParser)=0
virtual const IncludeInfoList & includeFileList() const =0
virtual void getAllIncludeFilesRecursively(StringVector &incFiles) const =0
virtual int numDecMembers() const =0
virtual void writeSourceFooter(OutputList &ol)=0
virtual void writeSourceBody(OutputList &ol, ClangTUParser *clangParser)=0
virtual void writeMemberPages(OutputList &ol)=0
virtual bool subGrouping() const =0
virtual const MemberLists & getMemberLists() const =0
virtual DString includedByDependencyGraphFileName() const =0
virtual void addUsingDirective(NamespaceDef *nd)=0
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual void addMembersToMemberGroup()=0
virtual DString title() const =0
virtual void overrideIncludedByGraph(bool e)=0
virtual bool isDocumentationFile() const =0
virtual void distributeMemberGroupDocumentation()=0
virtual void addRequirementReferences()=0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const IncludeInfoList & includedByFileList() const =0
virtual void combineUsingRelations()=0
virtual DirDef * getDirDef() const =0
virtual void insertMember(MemberDef *md)=0
virtual void insertNamespace(NamespaceDef *nd)=0
IncludeInfo()
Definition filedef.h:74
IncludeKind kind
Definition filedef.h:79
IncludeInfo(const FileDef *fd, const DString &in, IncludeKind k)
Definition filedef.h:75
const FileDef * fileDef
Definition filedef.h:77
DString includeName
Definition filedef.h:78
Container class representing a vector of objects with keys.
Definition linkedmap.h:232
A model of a class/file/namespace member symbol.
Definition memberdef.h:45
A list of MemberDef objects as shown in documentation sections.
Definition memberlist.h:126
Wrapper class for the MemberListType type.
Definition types.h:346
An abstract interface of a namespace symbol.
Class representing a list of output generators that are written to in parallel.
Definition outputlist.h:311
Text streaming class that buffers data.
Definition textstream.h:36
#define ABSTRACT_BASE_CLASS(cls)
Macro to implement rule of 5 for an abstract base class.
Definition construct.h:20
std::vector< std::string > StringVector
Definition containers.h:33
DString includeClose(SrcLangExt lang, IncludeKind kind)
Definition filedef.cpp:82
constexpr uint32_t IncludeKind_ObjCMask
Definition filedef.h:64
constexpr uint32_t operator|(IncludeKind a, IncludeKind b)
Definition filedef.h:55
DString includeOpen(SrcLangExt lang, IncludeKind kind)
Definition filedef.cpp:69
bool compareFileDefs(const FileDef *fd1, const FileDef *fd2)
Definition filedef.cpp:1966
FileDef * toFileDef(Definition *d)
Definition filedef.cpp:1973
std::unique_ptr< FileDef > createFileDef(const DString &p, const DString &n, const DString &ref=DString(), const DString &dn=DString())
Definition filedef.cpp:267
IncludeKind
Definition filedef.h:44
@ ImportLocal
Definition filedef.h:51
@ ImportModule
Definition filedef.h:52
@ IncludeLocal
Definition filedef.h:47
@ ImportSystemObjC
Definition filedef.h:48
@ ImportLocalObjC
Definition filedef.h:49
@ IncludeSystem
Definition filedef.h:46
@ ImportSystem
Definition filedef.h:50
constexpr uint32_t operator&(IncludeKind a, uint32_t mask)
Definition filedef.h:57
constexpr uint32_t IncludeKind_ImportMask
Definition filedef.h:62
constexpr uint32_t IncludeKind_SystemMask
Definition filedef.h:61
constexpr uint32_t IncludeKind_LocalMask
Definition filedef.h:60
DString includeStatement(SrcLangExt lang, IncludeKind kind)
Definition filedef.cpp:52
std::unordered_set< const FileDef * > FileDefSet
Definition filedef.h:41
Definition dstring.h:913
FilesInDir(const DString &p)
Definition filedef.h:232
DString path
Definition filedef.h:233
std::vector< const FileDef * > files
Definition filedef.h:234
SrcLangExt
Definition types.h:207