Advertisement
sve_vash

Untitled

Oct 31st, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 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. int32_t indstr = 0;
  12. while (buffer_len > 0) {
  13. if (pos == sizeBuf) {
  14. sizeBuf = str->ReadPackage(buffer);
  15. pos = 0;
  16. if (sizeBuf == 0) {
  17. delete [] buffer;
  18. return sizeinit - buffer_len;
  19. }
  20. }
  21. if (sizeBuf - pos < buffer_len) {
  22. memcpy(output_buffer + indstr, buffer + pos, sizeBuf - pos);
  23. indstr += sizeBuf - pos;
  24. buffer_len -= (sizeBuf - pos);
  25. pos = 0;
  26. sizeBuf = str->ReadPackage(buffer);
  27. if (sizeBuf == 0) {
  28. delete [] buffer;
  29. return sizeinit - buffer_len;
  30. }
  31. } else {
  32. memcpy(output_buffer + indstr, buffer + pos, buffer_len);
  33. pos += buffer_len;
  34. buffer_len = 0;
  35. }
  36. }
  37. return sizeinit;
  38. }
  39.  
  40. private:
  41. int32_t pos, sizeBuf;
  42. char* buffer;
  43. PackageStream* str;
  44. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement