Reader.cpp 2.2 KB

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