Advertisement
sve_vash

Untitled

Oct 29th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. class BufferedReader {
  2. public:
  3. explicit BufferedReader(PackageStream* stream) {
  4. str = stream;
  5. buffer = new char[str->PackageLen()];
  6. pos = 0;
  7. sizeBuf = 0;
  8. }
  9. int32_t Read(char* output_buffer, int32_t buffer_len) {
  10. int32_t sizeinit = buffer_len;
  11. while (buffer_len > 0) {
  12. if (pos == sizeBuf) {
  13. sizeBuf = str->ReadPackage(buffer);
  14. if (sizeBuf == 0) {
  15. delete [] buffer;
  16. return sizeinit - buffer_len;
  17. }
  18. }
  19. if (sizeBuf - pos < buffer_len) {
  20. memcpy(output_buffer, buffer + pos, sizeBuf - pos);
  21. pos = 0;
  22. buffer_len -= sizeBuf - pos;
  23. sizeBuf = str->ReadPackage(buffer);
  24. if (sizeBuf == 0) {
  25. delete [] buffer;
  26. return sizeinit - buffer_len;
  27. }
  28. } else {
  29. memcpy(output_buffer, buffer + pos, buffer_len);
  30. pos += buffer_len;
  31. buffer_len = 0;
  32. }
  33. }
  34. return sizeinit;
  35. }
  36.  
  37. private:
  38. int32_t pos, sizeBuf;
  39. char* buffer;
  40. PackageStream* str;
  41. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement