64 lines
1.7 KiB
C++
64 lines
1.7 KiB
C++
//
|
|
// Created by black on 06.07.25.
|
|
//
|
|
|
|
#ifndef PROGRAMLOADER_H
|
|
#define PROGRAMLOADER_H
|
|
#include <fstream>
|
|
#include <map>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
/// Der ProgramLoader, zuständig für das Lesen und Parsen des Quellcodes
|
|
|
|
class ProgramLoader {
|
|
private:
|
|
/**
|
|
* Der private Konstruktor für ProgramLoader
|
|
* */
|
|
explicit ProgramLoader() = default;
|
|
|
|
std::map<std::string, std::streampos> m_labels;
|
|
|
|
public:
|
|
/// Singleton Logik
|
|
ProgramLoader(const ProgramLoader &) = delete;
|
|
|
|
ProgramLoader(const ProgramLoader &&) = delete;
|
|
|
|
ProgramLoader &operator=(const ProgramLoader &) = delete;
|
|
|
|
ProgramLoader &operator=(const ProgramLoader &&) = delete;
|
|
|
|
/**
|
|
* Gibt die Singleton Instanz des ProgramLoaders zurück
|
|
*
|
|
* @return ProgramLoader Instanz
|
|
*/
|
|
static ProgramLoader *getInstance();
|
|
|
|
/**
|
|
* Parst eine Zeile des Assembly Codes und gibt diese als sortierten Vektor zurück
|
|
*
|
|
* @param input Eine Zeile aus dem Assembly Code
|
|
* @return Ein Vektor mit Befehl und dessen Argumenten
|
|
*/
|
|
static std::vector<std::string> parseLine(const std::string &input);
|
|
|
|
/**
|
|
* Durchscucht das aktuelle Programm nach Labeln und speichert diese zusammen mit den Zeilennummern in einer Map
|
|
*/
|
|
void indexFile(std::ifstream &m_programFile);
|
|
|
|
/**
|
|
* Gibt die Position des Streams (virtuellen Lesekopfes) im aktuellen Quellcode zurück
|
|
*
|
|
* @param label Das Label, dessen Streamposition zurückgegeben werden soll
|
|
* @return Die Streamposition des angegebenen Labels
|
|
*/
|
|
[[nodiscard]] std::streampos getStreamPosition(const std::string &label) const;
|
|
};
|
|
|
|
|
|
#endif //PROGRAMLOADER_H
|