retdec
basic_block.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_COMMON_BASIC_BLOCK_H
8 #define RETDEC_COMMON_BASIC_BLOCK_H
9 
10 #include <set>
11 #include <tuple>
12 
13 #include "retdec/common/address.h"
14 #include "retdec/common/range.h"
15 
16 struct cs_insn;
17 
18 namespace retdec {
19 namespace common {
20 
21 class BasicBlock : public AddressRange
22 {
23  public:
25 
26  public:
28  std::set<Address> preds;
30  std::set<Address> succs;
31 
33  struct CallEntry
34  {
37 
38  bool operator<(const CallEntry& o) const
39  {
40  return std::tie(srcAddr, targetAddr)
41  < std::tie(o.srcAddr, o.targetAddr);
42  }
43  };
44  std::set<CallEntry> calls;
45 
51  std::vector<cs_insn*> instructions;
52 };
53 
54 } // namespace common
55 } // namespace retdec
56 
57 #endif
Definition: address.h:21
Definition: basic_block.h:22
std::set< Address > preds
Start addresses of predecessor basic blocks.
Definition: basic_block.h:28
std::set< CallEntry > calls
Definition: basic_block.h:44
std::set< Address > succs
Start addresses of successor basic blocks.
Definition: basic_block.h:30
std::vector< cs_insn * > instructions
Definition: basic_block.h:51
Definition: range.h:45
Address, address pair and other derived class representation.
Declaration of templated Range class.
Range< Address > AddressRange
Definition: address.h:53
Definition: archive_wrapper.h:19
All the calls in this basic block.
Definition: basic_block.h:34
Address srcAddr
Definition: basic_block.h:35
bool operator<(const CallEntry &o) const
Definition: basic_block.h:38
Address targetAddr
Definition: basic_block.h:36