diff options
Diffstat (limited to 'qtmips_machine/memory.h')
-rw-r--r-- | qtmips_machine/memory.h | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/qtmips_machine/memory.h b/qtmips_machine/memory.h index 1df23ae..1b56d7c 100644 --- a/qtmips_machine/memory.h +++ b/qtmips_machine/memory.h @@ -14,7 +14,7 @@ public: void write_hword(std::uint32_t offset, std::uint16_t value); void write_word(std::uint32_t offset, std::uint32_t value); - virtual std::uint8_t read_byte(std::uint32_t offset) = 0; + virtual std::uint8_t read_byte(std::uint32_t offset) const = 0; std::uint16_t read_hword(std::uint32_t offset); std::uint32_t read_word(std::uint32_t offset); @@ -26,11 +26,20 @@ signals: class MemorySection : public MemoryAccess { public: MemorySection(std::uint32_t length); + MemorySection(const MemorySection&); ~MemorySection(); + void write_byte(std::uint32_t offset, std::uint8_t value); - std::uint8_t read_byte(std::uint32_t offset); + std::uint8_t read_byte(std::uint32_t offset) const; + + std::uint32_t length() const; + const std::uint8_t* data() const; + + bool operator==(const MemorySection&) const; + bool operator!=(const MemorySection&) const; + private: - std::uint32_t length; + std::uint32_t len; std::uint8_t *dt; }; @@ -48,13 +57,27 @@ class Memory : public MemoryAccess { Q_OBJECT public: Memory(); + Memory(const Memory&); ~Memory(); - MemorySection *get_section(std::uint32_t address, bool create); // returns section containing given address + + MemorySection *get_section(std::uint32_t address, bool create) const; // returns section containing given address void write_byte(std::uint32_t address, std::uint8_t value); - std::uint8_t read_byte(std::uint32_t address); + std::uint8_t read_byte(std::uint32_t address) const; + + bool operator==(const Memory&) const; + bool operator!=(const Memory&) const; + + const union MemoryTree *get_memorytree_root() const; + private: union MemoryTree *mt_root; static union MemoryTree *allocate_section_tree(); + static void free_section_tree(union MemoryTree*, size_t depth); + static bool compare_section_tree(const union MemoryTree*, const union MemoryTree*, size_t depth); + static bool is_zero_section_tree(const union MemoryTree*, size_t depth); + static union MemoryTree *copy_section_tree(const union MemoryTree*, size_t depth); }; +Q_DECLARE_METATYPE(Memory) + #endif // MEMORY_H |