#include #include #include #include class BufferedReader { public: PackageStream* ps; char* buf; int buf_size = 0; int pos = 0; explicit BufferedReader(PackageStream* stream) { ps = stream; buf = new char[stream->PackageLen()]; } int32_t Read(char* output_buffer, int32_t buffer_len) { int32_t i; for (i = 0; i < buffer_len; ++i, ++pos) { if (pos == buf_size) { buf_size = ps->ReadPackage(buf); pos = 0; } if (buf_size == 0) break; output_buffer[i] = buf[pos]; } return i; } ~BufferedReader() { delete[] buf; } };