Doxygen
Loading...
Searching...
No Matches
DotInclDepGraph Class Referencefinal

Representation of an include dependency graph. More...

#include <src/dotincldepgraph.h>

Inheritance diagram for DotInclDepGraph:
Collaboration diagram for DotInclDepGraph:

Public Member Functions

 DotInclDepGraph (const FileDef *fd, bool inverse)
 ~DotInclDepGraph () override
DString writeGraph (TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const DString &path, const DString &fileName, const DString &relPath, bool writeImageMap=true, int graphId=-1)
bool isTrivial () const
bool isTooBig () const
int numNodes () const
void writeXML (TextStream &t)
void writeDocbook (TextStream &t)
Public Member Functions inherited from DotGraph
 DotGraph ()
virtual ~DotGraph ()=default

Protected Member Functions

DString getBaseName () const override
DString getMapLabel () const override
void computeTheGraph () override
Protected Member Functions inherited from DotGraph
int getNextNodeNumber ()
 returns the node number.
int getNextEdgeNumber ()
 returns the edge number.
DString writeGraph (TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const DString &path, const DString &fileName, const DString &relPath, bool writeImageMap=true, int graphId=-1)
virtual DString absMapName () const
virtual DString getImgAltText () const
DString absBaseName () const
DString absDotName () const
DString imgName () const
DString absImgName () const
DString relImgName () const

Private Member Functions

DString diskName () const
void buildGraph (DotNode *n, const FileDef *fd, int distance)
void determineVisibleNodes (DotNodeDeque &queue, int &maxNodes)
void determineTruncatedNodes (DotNodeDeque &queue)

Private Attributes

DotNodem_startNode
DotNodeMap m_usedNodes
DString m_inclDepFileName
DString m_inclByDepFileName
bool m_inverse

Additional Inherited Members

Static Protected Member Functions inherited from DotGraph
static void writeGraphHeader (TextStream &t, const DString &title=DString())
static void writeGraphFooter (TextStream &t)
static void computeGraph (DotNode *root, GraphType gt, GraphOutputFormat format, const DString &rank, bool renderParents, bool backArrows, const DString &title, DString &graphStr)
Protected Attributes inherited from DotGraph
GraphOutputFormat m_graphFormat = GraphOutputFormat::BITMAP
EmbeddedOutputFormat m_textFormat = EmbeddedOutputFormat::Html
Dir m_dir
DString m_fileName
DString m_relPath
bool m_generateImageMap = false
int m_graphId = 0
DString m_absPath
DString m_baseName
DString m_theGraph
bool m_regenerate = false
bool m_doNotAddImageToIndex = false
bool m_noDivTag = false
bool m_zoomable = true
bool m_urlOnly = false

Detailed Description

Representation of an include dependency graph.

Definition at line 29 of file dotincldepgraph.h.

Constructor & Destructor Documentation

◆ DotInclDepGraph()

DotInclDepGraph::DotInclDepGraph ( const FileDef * fd,
bool inverse )

Definition at line 127 of file dotincldepgraph.cpp.

128{
129 m_inverse = inverse;
130 ASSERT(fd!=nullptr);
133 DString tmp_url=fd->getReference()+"$"+fd->getOutputFileBase();
134 DString tooltip = fd->briefDescriptionAsTooltip();
135 m_startNode = new DotNode(this,
136 fd->docName(),
137 tooltip,
138 tmp_url,
139 true); // root node
141 m_usedNodes.emplace(fd->absFilePath().str(),m_startNode);
143
144 int maxNodes = Config_getInt(DOT_GRAPH_MAX_NODES);
145 DotNodeDeque openNodeQueue;
146 openNodeQueue.push_back(m_startNode);
147 determineVisibleNodes(openNodeQueue,maxNodes);
148 openNodeQueue.clear();
149 openNodeQueue.push_back(m_startNode);
150 determineTruncatedNodes(openNodeQueue);
151}
const std::string & str() const
Definition dstring.h:645
virtual DString briefDescriptionAsTooltip() const =0
virtual DString getReference() const =0
virtual DString getOutputFileBase() const =0
friend class DotNode
Definition dotgraph.h:36
void determineVisibleNodes(DotNodeDeque &queue, int &maxNodes)
DString m_inclDepFileName
DotNodeMap m_usedNodes
void determineTruncatedNodes(DotNodeDeque &queue)
DotNode * m_startNode
DString m_inclByDepFileName
void buildGraph(DotNode *n, const FileDef *fd, int distance)
void setDistance(int distance)
Definition dotnode.cpp:392
virtual DString absFilePath() const =0
virtual const DString & docName() const =0
virtual DString includeDependencyGraphFileName() const =0
virtual DString includedByDependencyGraphFileName() const =0
#define Config_getInt(name)
Definition config.h:34
#define ASSERT(x)
Definition message.h:142

References FileDef::absFilePath(), ASSERT, Definition::briefDescriptionAsTooltip(), buildGraph(), Config_getInt, determineTruncatedNodes(), determineVisibleNodes(), FileDef::docName(), DotGraph::DotNode, Definition::getOutputFileBase(), Definition::getReference(), FileDef::includedByDependencyGraphFileName(), FileDef::includeDependencyGraphFileName(), m_inclByDepFileName, m_inclDepFileName, m_inverse, m_startNode, m_usedNodes, DotNode::setDistance(), and DString::str().

◆ ~DotInclDepGraph()

DotInclDepGraph::~DotInclDepGraph ( )
override

Definition at line 153 of file dotincldepgraph.cpp.

154{
156}
static void deleteNodes(DotNode *node)
Definition dotnode.cpp:406

References DotNode::deleteNodes(), and m_startNode.

Member Function Documentation

◆ buildGraph()

void DotInclDepGraph::buildGraph ( DotNode * n,
const FileDef * fd,
int distance )
private

Definition at line 26 of file dotincldepgraph.cpp.

27{
28 const IncludeInfoList &includeFiles = m_inverse ? fd->includedByFileList() : fd->includeFileList();
29 for (const auto &ii : includeFiles)
30 {
31 const FileDef *bfd = ii.fileDef;
32 DString in = ii.includeName;
33 //printf(">>>> in='%s' bfd=%p\n",qPrint(ii->includeName),bfd);
34 bool doc=true,src=false;
35 if (bfd)
36 {
37 in = bfd->absFilePath();
38 doc = bfd->isLinkable() && !bfd->isHidden();
39 src = bfd->generateSourceFile();
40 }
41 if (doc || src || !Config_getBool(HIDE_UNDOC_RELATIONS))
42 {
43 DString url="";
44 if (bfd) url=bfd->getOutputFileBase();
45 if (!doc && src)
46 {
47 url=bfd->getSourceFileBase();
48 }
49 auto it = m_usedNodes.find(in.str());
50 if (it!=m_usedNodes.end()) // file is already a node in the graph
51 {
52 DotNode *bn = it->second;
54 bn->addParent(n);
55 bn->setDistance(distance);
56 }
57 else
58 {
59 DString tmp_url;
60 DString tooltip;
61 if (bfd)
62 {
63 tmp_url=doc || src ? bfd->getReference()+"$"+url : DString();
64 tooltip = bfd->briefDescriptionAsTooltip();
65 }
66 DotNode *bn = new DotNode(this,
67 ii.includeName, // label
68 tooltip, // tip
69 tmp_url, // url
70 false, // rootNode
71 nullptr); // cd
73 bn->addParent(n);
74 m_usedNodes.emplace(in.str(),bn);
75 bn->setDistance(distance);
76
77 if (bfd) buildGraph(bn,bfd,distance+1);
78 }
79 }
80 }
81}
virtual bool isLinkable() const =0
virtual bool isHidden() const =0
virtual DString getSourceFileBase() const =0
void addParent(DotNode *n)
Definition dotnode.cpp:357
void addChild(DotNode *n, EdgeInfo::Colors edgeColor=EdgeInfo::Purple, EdgeInfo::Styles edgeStyle=EdgeInfo::Solid, const DString &edgeLab=DString(), const DString &edgeURL=DString(), int edgeLabColor=-1)
Definition dotnode.cpp:340
@ Solid
Definition dotnode.h:35
virtual bool generateSourceFile() const =0
virtual const IncludeInfoList & includeFileList() const =0
virtual const IncludeInfoList & includedByFileList() const =0
#define Config_getBool(name)
Definition config.h:33

References FileDef::absFilePath(), DotNode::addChild(), DotNode::addParent(), EdgeInfo::Blue, Definition::briefDescriptionAsTooltip(), buildGraph(), Config_getBool, DotGraph::DotNode, FileDef::generateSourceFile(), Definition::getOutputFileBase(), Definition::getReference(), Definition::getSourceFileBase(), FileDef::includedByFileList(), FileDef::includeFileList(), Definition::isHidden(), Definition::isLinkable(), m_inverse, m_usedNodes, DotNode::setDistance(), EdgeInfo::Solid, and DString::str().

Referenced by buildGraph(), and DotInclDepGraph().

◆ computeTheGraph()

void DotInclDepGraph::computeTheGraph ( )
overrideprotectedvirtual

Implements DotGraph.

Definition at line 170 of file dotincldepgraph.cpp.

171{
174}
static void computeGraph(DotNode *root, GraphType gt, GraphOutputFormat format, const DString &rank, bool renderParents, bool backArrows, const DString &title, DString &graphStr)
Definition dotgraph.cpp:300
DString m_theGraph
Definition dotgraph.h:95
GraphOutputFormat m_graphFormat
Definition dotgraph.h:85
DString label() const
Definition dotnode.h:102
@ Dependency
Definition dotgraph.h:31

References DotGraph::computeGraph(), Dependency, DotNode::label(), DotGraph::m_graphFormat, m_inverse, m_startNode, and DotGraph::m_theGraph.

◆ determineTruncatedNodes()

void DotInclDepGraph::determineTruncatedNodes ( DotNodeDeque & queue)
private

Definition at line 102 of file dotincldepgraph.cpp.

103{
104 while (!queue.empty())
105 {
106 DotNode *n = queue.front();
107 queue.pop_front();
108 if (n->isVisible() && n->isTruncated()==DotNode::Unknown)
109 {
110 bool truncated = false;
111 for (const auto &dn : n->children())
112 {
113 if (!dn->isVisible())
114 {
115 truncated = true;
116 }
117 else
118 {
119 queue.push_back(dn);
120 }
121 }
122 n->markAsTruncated(truncated);
123 }
124 }
125}
bool isVisible() const
Definition dotnode.h:104
@ Unknown
Definition dotnode.h:76
DotNode & markAsTruncated(bool b=true)
Definition dotnode.h:121
const DotNodeRefVector & children() const
Definition dotnode.h:122
TruncState isTruncated() const
Definition dotnode.h:105

References DotNode::children(), DotGraph::DotNode, DotNode::isTruncated(), DotNode::isVisible(), DotNode::markAsTruncated(), and DotNode::Unknown.

Referenced by DotInclDepGraph().

◆ determineVisibleNodes()

void DotInclDepGraph::determineVisibleNodes ( DotNodeDeque & queue,
int & maxNodes )
private

Definition at line 83 of file dotincldepgraph.cpp.

84{
85 while (!queue.empty() && maxNodes>0)
86 {
87 DotNode *n = queue.front();
88 queue.pop_front();
89 if (!n->isVisible() && n->distance()<=Config_getInt(MAX_DOT_GRAPH_DEPTH)) // not yet processed
90 {
91 n->markAsVisible();
92 maxNodes--;
93 // add direct children
94 for (const auto &dn : n->children())
95 {
96 queue.push_back(dn);
97 }
98 }
99 }
100}
int distance() const
Definition dotnode.h:106
void markAsVisible(bool b=true)
Definition dotnode.h:120

References DotNode::children(), Config_getInt, DotNode::distance(), DotGraph::DotNode, DotNode::isVisible(), and DotNode::markAsVisible().

Referenced by DotInclDepGraph().

◆ diskName()

DString DotInclDepGraph::diskName ( ) const
private

References DotGraph::DotNode.

◆ getBaseName()

DString DotInclDepGraph::getBaseName ( ) const
overrideprotectedvirtual

Implements DotGraph.

Definition at line 158 of file dotincldepgraph.cpp.

159{
160 if (m_inverse)
161 {
162 return m_inclByDepFileName;
163 }
164 else
165 {
166 return m_inclDepFileName;
167 }
168}

References m_inclByDepFileName, m_inclDepFileName, and m_inverse.

◆ getMapLabel()

DString DotInclDepGraph::getMapLabel ( ) const
overrideprotectedvirtual

Implements DotGraph.

Definition at line 176 of file dotincldepgraph.cpp.

177{
178 if (m_inverse)
179 {
180 return escapeCharsInString(m_startNode->label(),false) + "dep";
181 }
182 else
183 {
184 return escapeCharsInString(m_startNode->label(),false);
185 }
186}
DString escapeCharsInString(const DString &name, bool allowDots, bool allowUnderscore)
Definition util.cpp:2688

References escapeCharsInString(), DotNode::label(), m_inverse, and m_startNode.

◆ isTooBig()

bool DotInclDepGraph::isTooBig ( ) const

Definition at line 207 of file dotincldepgraph.cpp.

208{
209 return numNodes()>=Config_getInt(DOT_GRAPH_MAX_NODES);
210}

References Config_getInt, and numNodes().

Referenced by FileDefImpl::writeIncludedByGraph(), and FileDefImpl::writeIncludeGraph().

◆ isTrivial()

bool DotInclDepGraph::isTrivial ( ) const

Definition at line 202 of file dotincldepgraph.cpp.

203{
204 return m_startNode->children().empty();
205}

References DotNode::children(), and m_startNode.

Referenced by generateXMLForFile(), FileDefImpl::writeIncludedByGraph(), and FileDefImpl::writeIncludeGraph().

◆ numNodes()

int DotInclDepGraph::numNodes ( ) const

Definition at line 212 of file dotincldepgraph.cpp.

213{
214 return static_cast<int>(m_startNode->children().size());
215}

References DotNode::children(), and m_startNode.

Referenced by isTooBig(), FileDefImpl::writeIncludedByGraph(), and FileDefImpl::writeIncludeGraph().

◆ writeDocbook()

void DotInclDepGraph::writeDocbook ( TextStream & t)

Definition at line 225 of file dotincldepgraph.cpp.

226{
227 for (const auto &[name,node] : m_usedNodes)
228 {
229 node->writeDocbook(t,false);
230 }
231}

References m_usedNodes.

◆ writeGraph()

DString DotInclDepGraph::writeGraph ( TextStream & t,
GraphOutputFormat gf,
EmbeddedOutputFormat ef,
const DString & path,
const DString & fileName,
const DString & relPath,
bool writeImageMap = true,
int graphId = -1 )

Definition at line 188 of file dotincldepgraph.cpp.

196{
198
199 return DotGraph::writeGraph(out, graphFormat, textFormat, path, fileName, relPath, generateImageMap, graphId);
200}
bool m_doNotAddImageToIndex
Definition dotgraph.h:97
DString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const DString &path, const DString &fileName, const DString &relPath, bool writeImageMap=true, int graphId=-1)
Definition dotgraph.cpp:115

References Html, DotGraph::m_doNotAddImageToIndex, and DotGraph::writeGraph().

Referenced by DocbookGenerator::endInclDepGraph(), HtmlGenerator::endInclDepGraph(), LatexGenerator::endInclDepGraph(), and RTFGenerator::endInclDepGraph().

◆ writeXML()

void DotInclDepGraph::writeXML ( TextStream & t)

Definition at line 217 of file dotincldepgraph.cpp.

218{
219 for (const auto &[name,node] : m_usedNodes)
220 {
221 node->writeXML(t,false);
222 }
223}

References m_usedNodes.

Referenced by generateXMLForFile().

Member Data Documentation

◆ m_inclByDepFileName

DString DotInclDepGraph::m_inclByDepFileName
private

Definition at line 59 of file dotincldepgraph.h.

Referenced by DotInclDepGraph(), and getBaseName().

◆ m_inclDepFileName

DString DotInclDepGraph::m_inclDepFileName
private

Definition at line 58 of file dotincldepgraph.h.

Referenced by DotInclDepGraph(), and getBaseName().

◆ m_inverse

bool DotInclDepGraph::m_inverse
private

◆ m_startNode

DotNode* DotInclDepGraph::m_startNode
private

◆ m_usedNodes

DotNodeMap DotInclDepGraph::m_usedNodes
private

Definition at line 57 of file dotincldepgraph.h.

Referenced by buildGraph(), DotInclDepGraph(), writeDocbook(), and writeXML().


The documentation for this class was generated from the following files: