code cleanup and fixes

This commit is contained in:
black
2025-07-08 21:04:04 +02:00
parent ab77f7118a
commit 09d2b178d6
8 changed files with 107 additions and 71 deletions

View File

@@ -5,32 +5,35 @@
#include "Manager.h"
#include <iostream>
#include <utility>
#include <filesystem>
#include "components/Alu.h"
namespace fs = std::filesystem;
Manager::~Manager() {
std::cout << "Schließe Quellcode Datei: '" << m_path << "'" << "\n" << std::flush;
m_programFile.close();
}
Manager *Manager::getInstance() {
Manager &Manager::getInstance() {
static Manager instance;
return &instance;
return instance;
}
int Manager::run() {
if (!m_programFile.is_open()) {
std::cerr << "Bitte zuerst die init() Methode aufrufen!" << "\n" << std::flush;
}
ProgramLoader::getInstance()->indexFile(m_programFile);
/// Die Position des Streams (virtueller Lesekopf) muss nach dem Indexen wieder zurückgesetzt werden
ProgramLoader::getInstance().indexFile(m_programFile);
// Die Position des Streams (virtueller Lesekopf) muss nach dem Indexen wieder zurückgesetzt werden
m_programFile.clear();
m_programFile.seekg(0);
// Bearbeite jede Zeile des Quellcodes in der ALU
std::string line;
while (std::getline(m_programFile, line)) {
auto lineVector = ProgramLoader::parseLine(line);
// Sollte die aktuelle Zeile leer sein, überspringe die ALU
if (lineVector.empty()) continue;
Alu::calculate(lineVector);
}
@@ -48,11 +51,15 @@ std::streampos Manager::getStreamPosition() {
void Manager::init(const std::string &program_path) {
m_path = program_path;
std::cout << "Öffne Quellcode Datei: '" << m_path << "'" << "\n" << std::flush;
//Überprüfe, ob die Datei existiert
if (!fs::exists(m_path)) {
std::cerr << "Datei existiert nicht: " << m_path << "\n" << std::flush;
return;
}
m_programFile.open(m_path);
// Sollte die Datei nicht geöffnet worden sein, gib den Fehler aus
if (!m_programFile.is_open()) {
std::cerr << "Datei konnte nicht geöffnet werden: " << m_path << "\n" << std::flush;
std::cerr << "fail (z.B. Zugriffsrechte): " << m_programFile.fail() << "\n" << std::flush;
@@ -62,12 +69,14 @@ void Manager::init(const std::string &program_path) {
}
std::streampos Manager::getNextStreamLineOffset() {
/// Speichert das aktuelle stream offset
// Speichert das aktuelle stream offset
const auto positionBefore = m_programFile.tellg();
/// Geht eine Zeile nach vorne zum nächsten Befehl (PC+4) und speichert den offset
// Geht eine Zeile nach vorne zum nächsten Befehl (PC+4) und speichert den offset
gotoNextStreamLine();
const auto positionAfter = m_programFile.tellg();
/// Geht zum offset vom Anfang zurück und gibt die nächste Adresse (PC+4) zurück
// Geht zum offset vom Anfang zurück und gibt die nächste Adresse (PC+4) zurück
m_programFile.seekg(positionBefore);
return positionAfter;
}