Reader.h 3.3 KB

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