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 125 of file dotincldepgraph.cpp.

126{
127 m_inverse = inverse;
128 ASSERT(fd!=nullptr);
131 DString tmp_url=fd->getReference()+"$"+fd->getOutputFileBase();
132 DString tooltip = fd->briefDescriptionAsTooltip();
133 m_startNode = new DotNode(this,
134 fd->docName(),
135 tooltip,
136 tmp_url,
137 true); // root node
139 m_usedNodes.emplace(fd->absFilePath().str(),m_startNode);
141
142 int maxNodes = Config_getInt(DOT_GRAPH_MAX_NODES);
143 DotNodeDeque openNodeQueue;
144 openNodeQueue.push_back(m_startNode);
145 determineVisibleNodes(openNodeQueue,maxNodes);
146 openNodeQueue.clear();
147 openNodeQueue.push_back(m_startNode);
148 determineTruncatedNodes(openNodeQueue);
149}
const std::string & str() const
Definition dstring.h:649
virtual DString briefDescriptionAsTooltip() const =0
virtual DString getReference() const =0
virtual DString getOutputFileBase() const =0
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:390
DotNode(DotGraph *graph, const DString &lab, const DString &tip, const DString &url, bool rootNode=false, const ClassDef *cd=nullptr)
Definition dotnode.cpp:326
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 dstring.h:28

References FileDef::absFilePath(), ASSERT, Definition::briefDescriptionAsTooltip(), buildGraph(), Config_getInt, determineTruncatedNodes(), determineVisibleNodes(), FileDef::docName(), DotNode::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 151 of file dotincldepgraph.cpp.

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

References DotNode::deleteNodes(), and m_startNode.

Member Function Documentation

◆ buildGraph()

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

Definition at line 24 of file dotincldepgraph.cpp.

25{
26 const IncludeInfoList &includeFiles = m_inverse ? fd->includedByFileList() : fd->includeFileList();
27 for (const auto &ii : includeFiles)
28 {
29 const FileDef *bfd = ii.fileDef;
30 DString in = ii.includeName;
31 //printf(">>>> in='%s' bfd=%p\n",qPrint(ii->includeName),bfd);
32 bool doc=true,src=false;
33 if (bfd)
34 {
35 in = bfd->absFilePath();
36 doc = bfd->isLinkable() && !bfd->isHidden();
37 src = bfd->generateSourceFile();
38 }
39 if (doc || src || !Config_getBool(HIDE_UNDOC_RELATIONS))
40 {
41 DString url="";
42 if (bfd) url=bfd->getOutputFileBase();
43 if (!doc && src)
44 {
45 url=bfd->getSourceFileBase();
46 }
47 auto it = m_usedNodes.find(in.str());
48 if (it!=m_usedNodes.end()) // file is already a node in the graph
49 {
50 DotNode *bn = it->second;
52 bn->addParent(n);
53 bn->setDistance(distance);
54 }
55 else
56 {
57 DString tmp_url;
58 DString tooltip;
59 if (bfd)
60 {
61 tmp_url=doc || src ? bfd->getReference()+"$"+url : DString();
62 tooltip = bfd->briefDescriptionAsTooltip();
63 }
64 DotNode *bn = new DotNode(this,
65 ii.includeName, // label
66 tooltip, // tip
67 tmp_url, // url
68 false, // rootNode
69 nullptr); // cd
71 bn->addParent(n);
72 m_usedNodes.emplace(in.str(),bn);
73 bn->setDistance(distance);
74
75 if (bfd) buildGraph(bn,bfd,distance+1);
76 }
77 }
78 }
79}
DString()=default
virtual bool isLinkable() const =0
virtual bool isHidden() const =0
virtual DString getSourceFileBase() const =0
friend class DotNode
Definition dotgraph.h:36
void addParent(DotNode *n)
Definition dotnode.cpp:355
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:338
@ 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, DotNode::DotNode(), DString::DString(), 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(), diskName(), and DotInclDepGraph().

◆ computeTheGraph()

void DotInclDepGraph::computeTheGraph ( )
overrideprotectedvirtual

Implements DotGraph.

Definition at line 168 of file dotincldepgraph.cpp.

169{
172}
static void computeGraph(DotNode *root, GraphType gt, GraphOutputFormat format, const DString &rank, bool renderParents, bool backArrows, const DString &title, DString &graphStr)
Definition dotgraph.cpp:299
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 100 of file dotincldepgraph.cpp.

101{
102 while (!queue.empty())
103 {
104 DotNode *n = queue.front();
105 queue.pop_front();
106 if (n->isVisible() && n->isTruncated()==DotNode::Unknown)
107 {
108 bool truncated = false;
109 for (const auto &dn : n->children())
110 {
111 if (!dn->isVisible())
112 {
113 truncated = true;
114 }
115 else
116 {
117 queue.push_back(dn);
118 }
119 }
120 n->markAsTruncated(truncated);
121 }
122 }
123}
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 diskName(), and DotInclDepGraph().

◆ determineVisibleNodes()

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

Definition at line 81 of file dotincldepgraph.cpp.

82{
83 while (!queue.empty() && maxNodes>0)
84 {
85 DotNode *n = queue.front();
86 queue.pop_front();
87 if (!n->isVisible() && n->distance()<=Config_getInt(MAX_DOT_GRAPH_DEPTH)) // not yet processed
88 {
89 n->markAsVisible();
90 maxNodes--;
91 // add direct children
92 for (const auto &dn : n->children())
93 {
94 queue.push_back(dn);
95 }
96 }
97 }
98}
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 diskName(), and DotInclDepGraph().

◆ diskName()

DString DotInclDepGraph::diskName ( ) const
private

◆ getBaseName()

DString DotInclDepGraph::getBaseName ( ) const
overrideprotectedvirtual

Implements DotGraph.

Definition at line 156 of file dotincldepgraph.cpp.

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

References m_inclByDepFileName, m_inclDepFileName, and m_inverse.

◆ getMapLabel()

DString DotInclDepGraph::getMapLabel ( ) const
overrideprotectedvirtual

Implements DotGraph.

Definition at line 174 of file dotincldepgraph.cpp.

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

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

◆ isTooBig()

bool DotInclDepGraph::isTooBig ( ) const

Definition at line 205 of file dotincldepgraph.cpp.

206{
207 return numNodes()>=Config_getInt(DOT_GRAPH_MAX_NODES);
208}

References Config_getInt, and numNodes().

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

◆ isTrivial()

bool DotInclDepGraph::isTrivial ( ) const

Definition at line 200 of file dotincldepgraph.cpp.

201{
202 return m_startNode->children().empty();
203}

References DotNode::children(), and m_startNode.

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

◆ numNodes()

int DotInclDepGraph::numNodes ( ) const

Definition at line 210 of file dotincldepgraph.cpp.

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

References DotNode::children(), and m_startNode.

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

◆ writeDocbook()

void DotInclDepGraph::writeDocbook ( TextStream & t)

Definition at line 223 of file dotincldepgraph.cpp.

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

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 186 of file dotincldepgraph.cpp.

194{
196
197 return DotGraph::writeGraph(out, graphFormat, textFormat, path, fileName, relPath, generateImageMap, graphId);
198}
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:114

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 215 of file dotincldepgraph.cpp.

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

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: