#pragma once #include #include #include #include #include class CRSPSystem; enum RspCodeType { RspCodeType_TASK, RspCodeType_SUBROUTINE, }; class RspCodeBlock { typedef std::vector RSPInstructions; typedef std::set Addresses; typedef std::unique_ptr RspCodeBlockPtr; typedef std::vector RspCodeBlocks; public: RspCodeBlock(CRSPSystem & System, uint32_t StartAddress, RspCodeType type); bool Valid() const; private: RspCodeBlock(); RspCodeBlock(const RspCodeBlock &); RspCodeBlock & operator=(const RspCodeBlock &); void Analyze(); RSPInstructions m_Instructions; uint32_t m_StartAddress; RspCodeType m_CodeType; CRSPSystem & m_System; Addresses m_BranchTargets; Addresses m_FunctionCalls; RspCodeBlocks m_FunctionBlocks; bool m_Valid; };