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