#include #include #include class BufferedReader { public: PackageStream *sourse_in; char *package; int package_size; int pos; explicit BufferedReader(PackageStream *sourse) { sourse_in = sourse; package = new char[sourse->PackageLen()]; pos = 0; package_size = 0; } int32_t Read(char *out_buffer, int32_t buf_len) { int32_t i; for (i = 0; i < buf_len; ++i, ++pos) { if (pos == package_size) { package_size = sourse_in->ReadPackage(package); pos = 0; if (package_size == 0) break; } out_buffer[i] = package[pos]; } return i; } ~BufferedReader() { delete[] package; } };