Reader.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #pragma once
  2. #include "ReferenceCounter.h"
  3. namespace Framework
  4. {
  5. class Text;
  6. class StreamReader
  7. {
  8. public:
  9. //! Ließt aus der Datei
  10. //! \param bytes Ein Array, der mit Bytes aus der Resource gefüllt werden soll
  11. //! \param len Wie viele Bytes aus der Resource gelesen werden sollen
  12. virtual void lese(char* bytes, int len) = 0;
  13. //! Ließt die nächste zeile der Resource ein
  14. //! \return Die gelesene Zeile als Text mit zeilenumbruch
  15. virtual Text* leseZeile() = 0;
  16. //! Prüft, ob die Resource vollständig gelesen wurde
  17. //! return 1, wenn die Resource vollständig gelesen wurde. 0, sonst
  18. virtual bool istEnde() const = 0;
  19. };
  20. class Reader : public StreamReader
  21. {
  22. public:
  23. //! Setzt die Position des Bytes, das als nächstes gelesen werden soll
  24. //! \param pos Der Index des Bytes
  25. //! \param ende 1, wenn der Index vom ende der Resource zählt. 0, wenn der Index vom Beginn der Resource zählt
  26. virtual void setLPosition(__int64 pos, bool ende) = 0;
  27. //! Gibt den Index des Bytes aus der Resource zurück, welches als nächstes gelesen werden würde
  28. //! return -1, falls ein Fehler aufgetreten ist. Sonst die Position des Lesezeigers
  29. virtual __int64 getLPosition() const = 0;
  30. //! Gibt die Anzahl der zu lesenden Bytes zurück
  31. virtual __int64 getSize() const = 0;
  32. };
  33. class ByteArrayReader : public Reader, public ReferenceCounter
  34. {
  35. private:
  36. int length;
  37. const char* buffer;
  38. bool deleteBuffer;
  39. int position;
  40. public:
  41. //! \param buffer der Buffer der gelesen werden soll
  42. //! \param length Die länge des buffers
  43. //! \param deleteBuffer true, wenn der buffer automatisch mit delete[] gelöscht werden soll
  44. DLLEXPORT ByteArrayReader(const char* buffer, int length, bool deleteBuffer);
  45. DLLEXPORT ~ByteArrayReader();
  46. //! Ließt aus der Datei
  47. //! \param bytes Ein Array, der mit Bytes aus der Resource gefüllt werden soll
  48. //! \param len Wie viele Bytes aus der Resource gelesen werden sollen
  49. DLLEXPORT void lese(char* bytes, int len) override;
  50. //! Ließt die nächste zeile der Resource ein
  51. //! \return Die gelesene Zeile als Text mit zeilenumbruch
  52. DLLEXPORT Text* leseZeile() override;
  53. //! Prüft, ob die Resource vollständig gelesen wurde
  54. //! return 1, wenn die Resource vollständig gelesen wurde. 0, sonst
  55. DLLEXPORT bool istEnde() const override;
  56. //! Setzt die Position des Bytes, das als nächstes gelesen werden soll
  57. //! \param pos Der Index des Bytes
  58. //! \param ende 1, wenn der Index vom ende der Resource zählt. 0, wenn der Index vom Beginn der Resource zählt
  59. DLLEXPORT void setLPosition(__int64 pos, bool ende) override;
  60. //! Gibt den Index des Bytes aus der Resource zurück, welches als nächstes gelesen werden würde
  61. //! return -1, falls ein Fehler aufgetreten ist. Sonst die Position des Lesezeigers
  62. DLLEXPORT __int64 getLPosition() const override;
  63. //! Gibt die Anzahl der zu lesenden Bytes zurück
  64. DLLEXPORT __int64 getSize() const override;
  65. };
  66. }