// // Created by black on 06.07.25. // #ifndef PROGRAMLOADER_H #define PROGRAMLOADER_H #include #include #include #include /// 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 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 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