doxygen
dirdef.h
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 
20 #include <vector>
21 #include <map>
22 
23 #include "qcstring.h"
24 #include "linkedmap.h"
25 #include "definition.h"
26 
27 class FileList;
28 class FileDef;
29 class OutputList;
30 class UsedDir;
31 class FilePair;
32 class FilePairDict;
33 class DirDef;
34 class DirList;
35 
36 bool compareDirDefs(const DirDef *item1, const DirDef *item2);
37 
38 // ------------------
39 
41 class FilePair
42 {
43  public:
44  FilePair(const FileDef *src,const FileDef *dst) : m_src(src), m_dst(dst) {}
45  const FileDef *source() const { return m_src; }
46  const FileDef *destination() const { return m_dst; }
47  static QCString key(const FileDef *srcFd,const FileDef *dstFd);
48  private:
49  const FileDef *m_src;
50  const FileDef *m_dst;
51 };
52 
53 // ------------------
54 
56 class FilePairLinkedMap : public LinkedMap<FilePair>
57 {
58 };
59 
60 // ------------------
61 
63 class UsedDir
64 {
65  public:
66  UsedDir(const DirDef *dir);
67 
75  void addFileDep(const FileDef *srcFd,const FileDef *dstFd, bool srcDirect, bool dstDirect);
76  FilePair *findFilePair(const QCString &name);
77  const FilePairLinkedMap &filePairs() const { return m_filePairs; }
78  const DirDef *dir() const { return m_dir; }
79 
83  bool hasDirectDeps() const { return m_hasDirectDeps; }
84 
88  bool hasDirectSrcDeps() const { return m_hasDirectSrcDeps; }
89 
93  bool hasDirectDstDeps() const { return m_hasDirectDstDeps; }
94 
95  void sort();
96 
97  private:
98  const DirDef *m_dir;
99  FilePairLinkedMap m_filePairs;
100 
101  bool m_hasDirectDeps = false;
102  bool m_hasDirectSrcDeps = false;
103  bool m_hasDirectDstDeps = false;
104 };
105 
106 // ------------------
107 
109 class DirDef : public DefinitionMutable, public Definition
110 {
111  public:
112  class UsedDirLinkedMap : public LinkedMap<UsedDir> {};
113 
114  // accessors
115  virtual const QCString shortName() const = 0;
116  virtual void addSubDir(DirDef *subdir) = 0;
117  virtual const FileList &getFiles() const = 0;
118  virtual void addFile(const FileDef *fd) = 0;
119  virtual const DirList &subDirs() const = 0;
120  virtual bool hasSubdirs() const = 0;
121  virtual int level() const = 0;
122  virtual DirDef *parent() const = 0;
123  virtual int dirIndex() const = 0;
124  virtual const UsedDirLinkedMap &usedDirs() const = 0;
125  virtual bool isParentOf(const DirDef *dir) const = 0;
126  virtual bool depGraphIsTrivial() const = 0;
127  virtual QCString shortTitle() const = 0;
128  virtual bool hasDetailedDescription() const = 0;
129 
130  // generate output
131  virtual void writeDocumentation(OutputList &ol) = 0;
132  virtual void writeTagFile(TextStream &t) = 0;
133 
134  virtual void setDiskName(const QCString &name) = 0;
135  virtual void setDirIndex(int index) = 0;
136  virtual void sort() = 0;
137  virtual void setParent(DirDef *parent) = 0;
138  virtual void setLevel() = 0;
139  virtual void addUsesDependency(const DirDef *usedDir,const FileDef *srcFd,
140  const FileDef *dstFd,bool srcDirect, bool dstDirect) = 0;
141  virtual void computeDependencies() = 0;
142 
143  // directory graph related members
144  virtual bool hasDirectoryGraph() const = 0;
145  virtual void overrideDirectoryGraph(bool e) = 0;
146 };
147 
148 // --- Cast functions
149 
150 DirDef *toDirDef(Definition *d);
151 const DirDef *toDirDef(const Definition *d);
152 
155 {
156  public:
157  DirRelation(const QCString &name,const DirDef *src,UsedDir *dst)
158  : m_name(name), m_src(src), m_dst(dst) {}
159  const DirDef *source() const { return m_src; }
160  UsedDir *destination() const { return m_dst; }
161  void writeDocumentation(OutputList &ol);
162  QCString getOutputFileBase() const { return m_name; }
163 
164  private:
165  QCString m_name;
166  const DirDef *m_src;
167  UsedDir *m_dst;
168 };
169 
171 class DirLinkedMap : public LinkedMap<DirDef>
172 {
173 };
174 
176 class DirList : public std::vector<const DirDef*>
177 {
178 };
179 
180 class DirRelationLinkedMap : public LinkedMap<DirRelation>
181 {
182 };
183 
184 // ------------------
185 
186 void buildDirectories();
187 void generateDirDocs(OutputList &ol);
188 void computeDirDependencies();
189 
190 #endif
A linked map of directories.
Definition: dirdef.h:171
bool hasDirectDeps() const
Returns true iff any of the dependencies between source and destination files are direct (i...
Definition: dirdef.h:83
The common base class of all entity definitions found in the sources.
Definition: definition.h:75
Text streaming class that buffers data.
Definition: textstream.h:35
A model of a file symbol.
Definition: filedef.h:98
A usage relation between two directories.
Definition: dirdef.h:154
bool hasDirectDstDeps() const
Returns true iff any of the dependencies from the source file to the destination file are directly ta...
Definition: dirdef.h:93
Class representing a pair of FileDef objects.
Definition: dirdef.h:41
bool hasDirectSrcDeps() const
Returns true iff any of the dependencies from the source file to the destination file are directly co...
Definition: dirdef.h:88
Usage information of a directory.
Definition: dirdef.h:63
A list of directories.
Definition: dirdef.h:176
Definition: definition.h:305
Definition: dirdef.h:180
A model of a directory symbol.
Definition: dirdef.h:109
Container class representing a vector of objects with keys.
Definition: linkedmap.h:35
Definition: filedef.h:221
Class representing a list of output generators that are written to in parallel.
Definition: outputlist.h:530
Definition: dirdef.h:112
This is an alternative implementation of QCString.
Definition: qcstring.h:93
A linked map of file pairs.
Definition: dirdef.h:56