#pragma once #include "ReferenceCounter.h" namespace Framework { class Text; class StreamReader { public: //! Ließt aus der Datei //! \param bytes Ein Array, der mit Bytes aus der Resource gefüllt //! werden soll \param len Wie viele Bytes aus der Resource gelesen //! werden sollen virtual void lese(char* bytes, int len) = 0; //! Ließt die nächste zeile der Resource ein //! \return Die gelesene Zeile als Text mit zeilenumbruch virtual Text* leseZeile() = 0; //! Prüft, ob die Resource vollständig gelesen wurde //! return 1, wenn die Resource vollständig gelesen wurde. 0, sonst virtual bool istEnde() const = 0; }; class Reader : public StreamReader { public: //! Setzt die Position des Bytes, das als nächstes gelesen werden soll //! \param pos Der Index des Bytes //! \param ende 1, wenn der Index vom ende der Resource zählt. 0, wenn //! der Index vom Beginn der Resource zählt virtual void setLPosition(__int64 pos, bool ende) = 0; //! Gibt den Index des Bytes aus der Resource zurück, welches als //! nächstes gelesen werden würde return -1, falls ein Fehler //! aufgetreten ist. Sonst die Position des Lesezeigers virtual __int64 getLPosition() const = 0; //! Gibt die Anzahl der zu lesenden Bytes zurück virtual __int64 getSize() const = 0; }; class ByteArrayReader : public Reader, public ReferenceCounter { private: int length; const char* buffer; bool deleteBuffer; int position; public: //! \param buffer der Buffer der gelesen werden soll //! \param length Die länge des buffers //! \param deleteBuffer true, wenn der buffer automatisch mit delete[] //! gelöscht werden soll DLLEXPORT ByteArrayReader( const char* buffer, int length, bool deleteBuffer); DLLEXPORT ~ByteArrayReader(); //! Ließt aus der Datei //! \param bytes Ein Array, der mit Bytes aus der Resource gefüllt //! werden soll \param len Wie viele Bytes aus der Resource gelesen //! werden sollen DLLEXPORT void lese(char* bytes, int len) override; //! Ließt die nächste zeile der Resource ein //! \return Die gelesene Zeile als Text mit zeilenumbruch DLLEXPORT Text* leseZeile() override; //! Prüft, ob die Resource vollständig gelesen wurde //! return 1, wenn die Resource vollständig gelesen wurde. 0, sonst DLLEXPORT bool istEnde() const override; //! Setzt die Position des Bytes, das als nächstes gelesen werden soll //! \param pos Der Index des Bytes //! \param ende 1, wenn der Index vom ende der Resource zählt. 0, wenn //! der Index vom Beginn der Resource zählt DLLEXPORT void setLPosition(__int64 pos, bool ende) override; //! Gibt den Index des Bytes aus der Resource zurück, welches als //! nächstes gelesen werden würde return -1, falls ein Fehler //! aufgetreten ist. Sonst die Position des Lesezeigers DLLEXPORT __int64 getLPosition() const override; //! Gibt die Anzahl der zu lesenden Bytes zurück DLLEXPORT __int64 getSize() const override; }; } // namespace Framework