retdec
graphviz_cfg_writer.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_LLVMIR2HLL_GRAPHS_CFG_CFG_WRITERS_GRAPHVIZ_CFG_WRITER_H
8 #define RETDEC_LLVMIR2HLL_GRAPHS_CFG_CFG_WRITERS_GRAPHVIZ_CFG_WRITER_H
9 
10 #include <ostream>
11 #include <set>
12 #include <string>
13 
16 
17 namespace retdec {
18 namespace llvmir2hll {
19 
20 class CFG;
21 
31 public:
32  static ShPtr<CFGWriter> create(ShPtr<CFG> cfg, std::ostream &out);
33 
34  virtual std::string getId() const override;
35  virtual bool emitCFG() override;
36 
37 private:
39  using NodeSet = std::set<ShPtr<CFG::Node>>;
40 
41 private:
42  GraphvizCFGWriter(ShPtr<CFG> cfg, std::ostream &out);
43 
45  NodeSet &emittedNodes);
46  void emitNode(ShPtr<CFG::Node> node);
47  void emitEdge(ShPtr<CFG::Edge> edge);
48  void emitStmt(ShPtr<Statement> stmt);
49 };
50 
51 } // namespace llvmir2hll
52 } // namespace retdec
53 
54 #endif
A base class of all control-flow graph (CFG) writers.
A base class of all control-flow graph (CFG) writers.
Definition: cfg_writer.h:28
ShPtr< CFG > cfg
CFG to be emitted.
Definition: cfg_writer.h:55
std::ostream & out
Stream, where the resulting CFG will be emitted.
Definition: cfg_writer.h:58
A CFG writer in the dot format (graphviz).
Definition: graphviz_cfg_writer.h:30
void emitNode(ShPtr< CFG::Node > node)
Emits the given node to out.
Definition: graphviz_cfg_writer.cpp:168
virtual bool emitCFG() override
Emits the given CFG into the given output stream.
Definition: graphviz_cfg_writer.cpp:111
std::set< ShPtr< CFG::Node > > NodeSet
Set of nodes.
Definition: graphviz_cfg_writer.h:39
static ShPtr< CFGWriter > create(ShPtr< CFG > cfg, std::ostream &out)
Creates a new graphviz CFG writer.
Definition: graphviz_cfg_writer.cpp:103
virtual std::string getId() const override
Returns the ID of the writer.
Definition: graphviz_cfg_writer.cpp:107
void emitStmt(ShPtr< Statement > stmt)
Emits the given statement to out.
Definition: graphviz_cfg_writer.cpp:200
void emitNodesByBreathFirstTraversal(ShPtr< CFG::Node > startNode, NodeSet &emittedNodes)
Emits nodes starting from startNode by using a breadth-first traversal.
Definition: graphviz_cfg_writer.cpp:142
void emitEdge(ShPtr< CFG::Edge > edge)
Emits the given edge to out.
Definition: graphviz_cfg_writer.cpp:188
GraphvizCFGWriter(ShPtr< CFG > cfg, std::ostream &out)
Constructs a new graphviz CFG writer.
Definition: graphviz_cfg_writer.cpp:94
A library providing API for working with back-end IR.
std::shared_ptr< T > ShPtr
An alias for a shared pointer.
Definition: smart_ptr.h:18
Definition: archive_wrapper.h:19
Declarations, aliases, macros, etc. for the use of smart pointers.