#include #include #include #include #include #include #include class BufferedReader { private: PackageStream* d; int shift = 0; char s[10000]; public: explicit BufferedReader(PackageStream* stream); int32_t Read(char* buf, int32_t bytes); }; BufferedReader::BufferedReader(PackageStream* stream) : d(stream) { } int32_t BufferedReader::Read(char* buf, int32_t bytes) { int count = bytes / d->PackageLen(), len = 0; for (int i = 0; i <= count; ++i) { len += d->ReadPackage(s + len); } if (len <= bytes) { memcpy(buf, s + shift, size_t(len)); shift += len; return shift; } if (len > bytes) { memcpy(buf, s + shift, size_t(bytes)); shift += bytes; return bytes; } return bytes; }