From 39b9d1bf544e0fe0d7d889a791a6b94818be5dd4 Mon Sep 17 00:00:00 2001 From: black Date: Thu, 12 Jun 2025 15:04:00 +0300 Subject: [PATCH] register finalization --- emulator/components/Register.cpp | 16 +++++++--------- emulator/components/Register.h | 33 +++++++++++++++++++++++++------- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/emulator/components/Register.cpp b/emulator/components/Register.cpp index d80c76a..4d5e48b 100644 --- a/emulator/components/Register.cpp +++ b/emulator/components/Register.cpp @@ -5,17 +5,15 @@ #include "Register.h" -Register* Register::getInstance() { - if (m_instance == nullptr) { - m_instance = new Register(); - } else { - m_instance = new Register(); - } - return m_instance; +Register& Register::getInstance() { + static Register instance; + return instance; } -void Register::setRegister() { +void Register::setRegister(const int reg, const int value) { + m_registers[reg] = value; } -int Register::getRegister(int r) { +int Register::getRegister(const int reg) const { + return m_registers[reg]; } diff --git a/emulator/components/Register.h b/emulator/components/Register.h index d8fa141..c6c2ced 100644 --- a/emulator/components/Register.h +++ b/emulator/components/Register.h @@ -5,6 +5,8 @@ #ifndef REGISTER_H #define REGISTER_H +/// Eine Registerklasse als Singleton implementiert. +/// Als Speicher (Registers) wird ein int Array genutzt. class Register { @@ -12,19 +14,36 @@ class Register { private: Register() = default; + /// Singleton instance static Register *m_instance; + /// "Echter" Register Speicher + int m_registers[32]; public: - static Register* getInstance(); + /// Singleton Logik + Register(const Register &) = delete; + Register(const Register &&) = delete; + Register& operator=(const Register &) = delete; + Register& operator=(const Register &&) = delete; + ~Register() = default; - void setRegister(); + static Register& getInstance(); - int getRegister(int r); + /** + * Speichert den angegebenen Wert im angegebenen Register + * + * @param reg Die Position des Registers + * @param value Der Wert für das Register + */ + void setRegister(int reg, int value); + + /** + * + * @param reg Die Position des Registers + * @return Der Wert des Registers + */ + int getRegister(int reg) const; }; -Register *Register::m_instance = nullptr; - - - #endif //REGISTER_H