#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 *output_buffer, int32_t buffer_len) { int32_t i = 0; while (i < buffer_len && package_size) { if (pos == package_size) { package_size = sourse_in->ReadPackage(package); pos = 0; } i++; ++pos; output_buffer[i] = package[pos]; } return i; } ~BufferedReader() { delete[] package; } };