#include <cassert>
#include <string>
#include <sstream>
+#include <vector>
+class Instruction;
class Disassembler;
class InformationManager;
+class QXmlStreamWriter;
+class QXmlStreamReader;
class BasicBlock {
public:
- BasicBlock(uint64_t start_address, Disassembler * disassembler,
- InformationManager* manager)
- : start_address(start_address)
- , disassembler(disassembler)
- , manager(manager) {
- next_blocks[0] = 0;
- next_blocks[1] = 0;
- }
-
- uint64_t getStartAddress() const {
- return start_address;
- }
-
- uint64_t getEndAddress() const {
- return end_address;
- }
+ InformationManager* getManager() const {return manager;}
+ uint64_t getStartAddress() const {return start_address;}
+ uint64_t getEndAddress() const {return end_address;}
+ void setStartAddress(uint64_t address) {start_address = address;}
+ void setEndAddress(uint64_t address) {end_address = address;}
uint64_t getNextBlock(size_t index) const {
assert(index < 2);
next_blocks[index] = address;
}
- void setStartAddress(uint64_t address) {
- start_address = address;
- }
-
- void setEndAddress(uint64_t address) {
- end_address = address;
- }
-
std::string getName() const {
std::stringstream s;
s << "BLOCK_" << std::hex << start_address << '_' << end_address;
return s.str();
}
- Disassembler * getDisassembler() const {
- return disassembler;
- }
+ std::vector<Instruction> getInstructions() const;
+ void serialize(QXmlStreamWriter& stream);
+ static BasicBlock* deserialize(QXmlStreamReader& stream, InformationManager* manager);
- InformationManager* getManager() const {
- return manager;
- }
private:
+ BasicBlock(uint64_t start_address, InformationManager* manager)
+ : start_address(start_address)
+ , end_address(0)
+ , manager(manager) {
+ next_blocks[0] = 0;
+ next_blocks[1] = 0;
+ }
+
uint64_t start_address;
uint64_t end_address;
Disassembler* disassembler;
InformationManager* manager;
uint64_t next_blocks[2];
+
+ friend class InformationManager;
};
#endif