Doxygen
Loading...
Searching...
No Matches
dirdef.h
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Copyright (C) 1997-2020 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 DIRDEF_H
17#define DIRDEF_H
18
19#include <vector>
20#include <map>
21
22#include "dstring.h"
23#include "linkedmap.h"
24#include "definition.h"
25
26class DirDef;
27class DirList;
28class FileDef;
29class FileList;
30class FilePair;
31class OutputList;
32class UsedDir;
33
34bool compareDirDefs(const DirDef *item1, const DirDef *item2);
35
36// ------------------
37
38/** Class representing a pair of FileDef objects */
40{
41 public:
42 FilePair(const FileDef *src,const FileDef *dst) : m_src(src), m_dst(dst) {}
43 const FileDef *source() const { return m_src; }
44 const FileDef *destination() const { return m_dst; }
45 static DString key(const FileDef *srcFd,const FileDef *dstFd);
46 private:
47 const FileDef *m_src;
48 const FileDef *m_dst;
49};
50
51// ------------------
52
53/** A linked map of file pairs */
54class FilePairLinkedMap final : public LinkedMap<FilePair>
55{
56};
57
58// ------------------
59
60/** Usage information of a directory. */
62{
63 public:
64 UsedDir(const DirDef *dir);
65
66 /**
67 * Take up dependency between files.
68 * @param[in] srcFd dependent file which depends on dstFd
69 * @param[in] dstFd dependee file on which srcFd depends on
70 * @param[in] srcDirect true iff the source dependency was the direct (not inherited from a sub dir)
71 * @param[in] dstDirect true iff the destination dependency was direct (not inherited from a sub dir)
72 */
73 void addFileDep(const FileDef *srcFd,const FileDef *dstFd, bool srcDirect, bool dstDirect);
74 FilePair *findFilePair(const DString &name);
75 const FilePairLinkedMap &filePairs() const { return m_filePairs; }
76 const DirDef *dir() const { return m_dir; }
77
78 /** Returns true iff any of the dependencies between source and destination files are
79 * direct (i.e\. not "inherited" from sub directories)
80 */
81 bool hasDirectDeps() const { return m_hasDirectDeps; }
82
83 /** Returns true iff any of the dependencies from the source file to the destination file are
84 * directly coming from a file in the source directory (i.e\. not inherited via sub directories)
85 */
86 bool hasDirectSrcDeps() const { return m_hasDirectSrcDeps; }
87
88 /** Returns true iff any of the dependencies from the source file to the destination file are
89 * directly targeting a file in the destination directory (i.e\. not inherited via sub directories)
90 */
91 bool hasDirectDstDeps() const { return m_hasDirectDstDeps; }
92
93 void sort();
94
95 private:
96 const DirDef *m_dir;
98
99 bool m_hasDirectDeps = false;
100 bool m_hasDirectSrcDeps = false;
101 bool m_hasDirectDstDeps = false;
102};
103
104// ------------------
105
106/** A model of a directory symbol. */
107class DirDef : public DefinitionMutable, public Definition
108{
109 public:
110 class UsedDirLinkedMap final : public LinkedMap<UsedDir> {};
111
112 // accessors
113 virtual const DString shortName() const = 0;
114 virtual void addSubDir(DirDef *subdir) = 0;
115 virtual const FileList &getFiles() const = 0;
116 virtual void addFile(FileDef *fd) = 0;
117 virtual const DirList &subDirs() const = 0;
118 virtual bool hasSubdirs() const = 0;
119 virtual int level() const = 0;
120 virtual DirDef *parent() const = 0;
121 virtual int dirIndex() const = 0;
122 virtual const UsedDirLinkedMap &usedDirs() const = 0;
123 virtual bool isParentOf(const DirDef *dir) const = 0;
124 virtual bool depGraphIsTrivial() const = 0;
125 virtual DString shortTitle() const = 0;
126 virtual bool hasDetailedDescription() const = 0;
127
128 // generate output
129 virtual void writeDocumentation(OutputList &ol) = 0;
130 virtual void writeTagFile(TextStream &t) = 0;
131
132 virtual void setDiskName(const DString &name) = 0;
133 virtual void setDirIndex(int index) = 0;
134 virtual void sort() = 0;
135 virtual void setParent(DirDef *parent) = 0;
136 virtual void setLevel() = 0;
137 virtual void addUsesDependency(const DirDef *usedDir,const FileDef *srcFd,
138 const FileDef *dstFd,bool srcDirect, bool dstDirect) = 0;
139 virtual void computeDependencies() = 0;
140 virtual void findSectionsInDocumentation() = 0;
141 virtual void addListReferences() = 0;
142 virtual void addRequirementReferences() = 0;
143
144 // directory graph related members
145 virtual bool hasDirectoryGraph() const = 0;
146 virtual void overrideDirectoryGraph(bool e) = 0;
147};
148
149// --- Cast functions
150
152const DirDef *toDirDef(const Definition *d);
153
154/** A usage relation between two directories. */
156{
157 public:
158 DirRelation(const DString &name,const DirDef *src,UsedDir *dst)
159 : m_name(name), m_src(src), m_dst(dst) {}
160 const DirDef *source() const { return m_src; }
161 UsedDir *destination() const { return m_dst; }
163 DString getOutputFileBase() const { return m_name; }
164
165 private:
167 const DirDef *m_src;
169};
170
171/** A linked map of directories */
172class DirLinkedMap final : public LinkedMap<DirDef>
173{
174};
175
176/** A list of directories. */
177class DirList final : public std::vector<const DirDef*>
178{
179};
180
181class DirRelationLinkedMap final : public LinkedMap<DirRelation>
182{
183};
184
185// ------------------
186
187void buildDirectories();
190
191#endif
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition dstring.h:88
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
virtual int level() const =0
virtual void sort()=0
virtual bool isParentOf(const DirDef *dir) const =0
virtual void addListReferences()=0
virtual void setLevel()=0
virtual void writeDocumentation(OutputList &ol)=0
virtual void addFile(FileDef *fd)=0
virtual void computeDependencies()=0
virtual void addSubDir(DirDef *subdir)=0
virtual void findSectionsInDocumentation()=0
virtual const DString shortName() const =0
virtual int dirIndex() const =0
virtual DString shortTitle() const =0
virtual DirDef * parent() const =0
virtual void writeTagFile(TextStream &t)=0
virtual void addUsesDependency(const DirDef *usedDir, const FileDef *srcFd, const FileDef *dstFd, bool srcDirect, bool dstDirect)=0
virtual void setDiskName(const DString &name)=0
virtual bool hasDetailedDescription() const =0
virtual void setParent(DirDef *parent)=0
virtual bool hasDirectoryGraph() const =0
virtual bool depGraphIsTrivial() const =0
virtual void addRequirementReferences()=0
virtual const DirList & subDirs() const =0
virtual void overrideDirectoryGraph(bool e)=0
virtual const UsedDirLinkedMap & usedDirs() const =0
virtual void setDirIndex(int index)=0
virtual const FileList & getFiles() const =0
virtual bool hasSubdirs() const =0
A linked map of directories.
Definition dirdef.h:173
A list of directories.
Definition dirdef.h:178
DString m_name
Definition dirdef.h:166
const DirDef * m_src
Definition dirdef.h:167
UsedDir * destination() const
Definition dirdef.h:161
DString getOutputFileBase() const
Definition dirdef.h:163
UsedDir * m_dst
Definition dirdef.h:168
void writeDocumentation(OutputList &ol)
Definition dirdef.cpp:959
DirRelation(const DString &name, const DirDef *src, UsedDir *dst)
Definition dirdef.h:158
const DirDef * source() const
Definition dirdef.h:160
A model of a file symbol.
Definition filedef.h:97
Class representing a pair of FileDef objects.
Definition dirdef.h:40
const FileDef * m_dst
Definition dirdef.h:48
const FileDef * destination() const
Definition dirdef.h:44
FilePair(const FileDef *src, const FileDef *dst)
Definition dirdef.h:42
static DString key(const FileDef *srcFd, const FileDef *dstFd)
Definition dirdef.cpp:923
const FileDef * source() const
Definition dirdef.h:43
const FileDef * m_src
Definition dirdef.h:47
A linked map of file pairs.
Definition dirdef.h:55
Container class representing a vector of objects with keys.
Definition linkedmap.h:36
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
Usage information of a directory.
Definition dirdef.h:62
bool m_hasDirectDstDeps
Definition dirdef.h:101
void sort()
Definition dirdef.cpp:844
FilePairLinkedMap m_filePairs
Definition dirdef.h:97
bool hasDirectDstDeps() const
Returns true iff any of the dependencies from the source file to the destination file are directly ta...
Definition dirdef.h:91
bool m_hasDirectDeps
Definition dirdef.h:99
FilePair * findFilePair(const DString &name)
Definition dirdef.cpp:857
void addFileDep(const FileDef *srcFd, const FileDef *dstFd, bool srcDirect, bool dstDirect)
Take up dependency between files.
Definition dirdef.cpp:836
const DirDef * dir() const
Definition dirdef.h:76
UsedDir(const DirDef *dir)
Definition dirdef.cpp:831
bool hasDirectSrcDeps() const
Returns true iff any of the dependencies from the source file to the destination file are directly co...
Definition dirdef.h:86
bool hasDirectDeps() const
Returns true iff any of the dependencies between source and destination files are direct (i....
Definition dirdef.h:81
const FilePairLinkedMap & filePairs() const
Definition dirdef.h:75
bool m_hasDirectSrcDeps
Definition dirdef.h:100
const DirDef * m_dir
Definition dirdef.h:96
bool compareDirDefs(const DirDef *item1, const DirDef *item2)
Definition dirdef.cpp:1208
void buildDirectories()
Definition dirdef.cpp:1095
void computeDirDependencies()
Definition dirdef.cpp:1169
DirDef * toDirDef(Definition *d)
Definition dirdef.cpp:1215
void generateDirDocs(OutputList &ol)
Definition dirdef.cpp:1186