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

Representation of an call graph. More...

#include <src/dotcallgraph.h>

Inheritance diagram for DotCallGraph:
Collaboration diagram for DotCallGraph:

Public Member Functions

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

Static Public Member Functions

static bool isTrivial (const MemberDef *md, bool inverse)

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

void buildGraph (DotNode *n, const MemberDef *md, int distance)
void determineVisibleNodes (DotNodeDeque &queue, int &maxNodes)
void determineTruncatedNodes (DotNodeDeque &queue)

Private Attributes

DotNodem_startNode
DotNodeMap m_usedNodes
bool m_inverse
DString m_diskName
const Definitionm_scope

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 call graph.

Definition at line 28 of file dotcallgraph.h.

Constructor & Destructor Documentation

◆ DotCallGraph()

DotCallGraph::DotCallGraph ( const MemberDef * md,
bool inverse )

Definition at line 122 of file dotcallgraph.cpp.

123{
124 m_inverse = inverse;
125 m_diskName = md->getOutputFileBase()+"_"+md->anchor();
126 m_scope = md->getOuterScope();
127 DString uniqueId = getUniqueId(md);
128 DString name;
129 if (Config_getBool(HIDE_SCOPE_NAMES))
130 {
131 name = md->name();
132 }
133 else
134 {
135 name = md->qualifiedName();
136 }
137 DString tooltip = md->briefDescriptionAsTooltip();
138 m_startNode = new DotNode(this,
139 linkToText(md->getLanguage(),name,false),
140 tooltip,
141 uniqueId,
142 true // root node
143 );
145 m_usedNodes.emplace(uniqueId.str(),m_startNode);
147
148 int maxNodes = Config_getInt(DOT_GRAPH_MAX_NODES);
149 DotNodeDeque openNodeQueue;
150 openNodeQueue.push_back(m_startNode);
151 determineVisibleNodes(openNodeQueue,maxNodes);
152 openNodeQueue.clear();
153 openNodeQueue.push_back(m_startNode);
154 determineTruncatedNodes(openNodeQueue);
155}
const std::string & str() const
Definition dstring.h:645
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual const DString & name() const =0
virtual DString briefDescriptionAsTooltip() const =0
virtual DString qualifiedName() const =0
virtual DString anchor() const =0
virtual Definition * getOuterScope() const =0
virtual DString getOutputFileBase() const =0
void buildGraph(DotNode *n, const MemberDef *md, int distance)
DotNode * m_startNode
const Definition * m_scope
DotNodeMap m_usedNodes
DString m_diskName
void determineTruncatedNodes(DotNodeDeque &queue)
void determineVisibleNodes(DotNodeDeque &queue, int &maxNodes)
friend class DotNode
Definition dotgraph.h:36
void setDistance(int distance)
Definition dotnode.cpp:392
#define Config_getInt(name)
Definition config.h:34
#define Config_getBool(name)
Definition config.h:33
static DString getUniqueId(const MemberDef *md)
DString linkToText(SrcLangExt lang, const DString &link, bool ignoreDots)
Definition util.cpp:2265

References Definition::anchor(), Definition::briefDescriptionAsTooltip(), buildGraph(), Config_getBool, Config_getInt, determineTruncatedNodes(), determineVisibleNodes(), DotGraph::DotNode, Definition::getLanguage(), Definition::getOuterScope(), Definition::getOutputFileBase(), getUniqueId(), linkToText(), m_diskName, m_inverse, m_scope, m_startNode, m_usedNodes, Definition::name(), Definition::qualifiedName(), DotNode::setDistance(), and DString::str().

◆ ~DotCallGraph()

DotCallGraph::~DotCallGraph ( )
override

Definition at line 157 of file dotcallgraph.cpp.

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

References DotNode::deleteNodes(), and m_startNode.

Member Function Documentation

◆ buildGraph()

void DotCallGraph::buildGraph ( DotNode * n,
const MemberDef * md,
int distance )
private

Definition at line 35 of file dotcallgraph.cpp.

36{
37 auto refs = m_inverse ? md->getReferencedByMembers() : md->getReferencesMembers();
38 for (const auto &rmd : refs)
39 {
40 if (rmd->isCallable())
41 {
42 DString uniqueId = getUniqueId(rmd);
43 auto it = m_usedNodes.find(uniqueId.str());
44 if (it!=m_usedNodes.end()) // file is already a node in the graph
45 {
46 DotNode *bn = it->second;
48 bn->addParent(n);
49 bn->setDistance(distance);
50 }
51 else
52 {
53 DString name;
54 if (Config_getBool(HIDE_SCOPE_NAMES))
55 {
56 name = rmd->getOuterScope()==m_scope ?
57 rmd->name() : rmd->qualifiedName();
58 }
59 else
60 {
61 name = rmd->qualifiedName();
62 }
63 DString tooltip = rmd->briefDescriptionAsTooltip();
64 DotNode *bn = new DotNode(
65 this,
66 linkToText(rmd->getLanguage(),name,false),
67 tooltip,
68 uniqueId,
69 0 //distance
70 );
72 bn->addParent(n);
73 bn->setDistance(distance);
74 m_usedNodes.emplace(uniqueId.str(),bn);
75
76 buildGraph(bn,rmd,distance+1);
77 }
78 }
79 }
80}
virtual const MemberVector & getReferencedByMembers() const =0
virtual const MemberVector & getReferencesMembers() 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

References DotNode::addChild(), DotNode::addParent(), EdgeInfo::Blue, buildGraph(), Config_getBool, DotGraph::DotNode, Definition::getReferencedByMembers(), Definition::getReferencesMembers(), getUniqueId(), linkToText(), m_inverse, m_scope, m_usedNodes, Definition::name(), DotNode::setDistance(), EdgeInfo::Solid, and DString::str().

Referenced by buildGraph(), and DotCallGraph().

◆ computeTheGraph()

void DotCallGraph::computeTheGraph ( )
overrideprotectedvirtual

Implements DotGraph.

Definition at line 167 of file dotcallgraph.cpp.

168{
173 m_inverse ? "RL" : "LR",
174 false,
175 m_inverse,
177 m_theGraph);
178}
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
@ CallGraph
Definition dotgraph.h:31

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

◆ determineTruncatedNodes()

void DotCallGraph::determineTruncatedNodes ( DotNodeDeque & queue)
private

Definition at line 101 of file dotcallgraph.cpp.

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

◆ determineVisibleNodes()

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

Definition at line 82 of file dotcallgraph.cpp.

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

◆ getBaseName()

DString DotCallGraph::getBaseName ( ) const
overrideprotectedvirtual

Implements DotGraph.

Definition at line 162 of file dotcallgraph.cpp.

163{
164 return m_diskName + (m_inverse ? "_icgraph" : "_cgraph");
165}

References m_diskName, and m_inverse.

◆ getMapLabel()

DString DotCallGraph::getMapLabel ( ) const
overrideprotectedvirtual

Implements DotGraph.

Definition at line 180 of file dotcallgraph.cpp.

181{
182 return m_baseName;
183}
DString m_baseName
Definition dotgraph.h:94

References DotGraph::m_baseName.

◆ isTooBig()

bool DotCallGraph::isTooBig ( ) const

Definition at line 204 of file dotcallgraph.cpp.

205{
206 return numNodes()>=Config_getInt(DOT_GRAPH_MAX_NODES);
207}
int numNodes() const

References Config_getInt, and numNodes().

Referenced by MemberDefImpl::_writeCallerGraph(), and MemberDefImpl::_writeCallGraph().

◆ isTrivial() [1/2]

bool DotCallGraph::isTrivial ( ) const

◆ isTrivial() [2/2]

bool DotCallGraph::isTrivial ( const MemberDef * md,
bool inverse )
static

Definition at line 214 of file dotcallgraph.cpp.

215{
216 auto refs = inverse ? md->getReferencedByMembers() : md->getReferencesMembers();
217 for (const auto &rmd : refs)
218 {
219 if (rmd->isCallable())
220 {
221 return false;
222 }
223 }
224 return true;
225}

References Definition::getReferencedByMembers(), and Definition::getReferencesMembers().

◆ numNodes()

int DotCallGraph::numNodes ( ) const

Definition at line 209 of file dotcallgraph.cpp.

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

References DotNode::children(), and m_startNode.

Referenced by MemberDefImpl::_writeCallerGraph(), MemberDefImpl::_writeCallGraph(), and isTooBig().

◆ writeGraph()

DString DotCallGraph::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 185 of file dotcallgraph.cpp.

193{
195
196 return DotGraph::writeGraph(out, graphFormat, textFormat, path, fileName, relPath, generateImageMap, graphId);
197}
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::endCallGraph(), HtmlGenerator::endCallGraph(), LatexGenerator::endCallGraph(), and RTFGenerator::endCallGraph().

Member Data Documentation

◆ m_diskName

DString DotCallGraph::m_diskName
private

Definition at line 56 of file dotcallgraph.h.

Referenced by DotCallGraph(), and getBaseName().

◆ m_inverse

bool DotCallGraph::m_inverse
private

Definition at line 55 of file dotcallgraph.h.

Referenced by buildGraph(), computeTheGraph(), DotCallGraph(), and getBaseName().

◆ m_scope

const Definition* DotCallGraph::m_scope
private

Definition at line 57 of file dotcallgraph.h.

Referenced by buildGraph(), and DotCallGraph().

◆ m_startNode

DotNode* DotCallGraph::m_startNode
private

Definition at line 53 of file dotcallgraph.h.

Referenced by computeTheGraph(), DotCallGraph(), isTrivial(), numNodes(), and ~DotCallGraph().

◆ m_usedNodes

DotNodeMap DotCallGraph::m_usedNodes
private

Definition at line 54 of file dotcallgraph.h.

Referenced by buildGraph(), and DotCallGraph().


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