#pragma once class BufferedReader { public: PackageStream* buff_st; char* pack; int pack_size, pos; explicit BufferedReader(PackageStream* stream) { buff_st = stream; pack = new char[stream->PackageLen()]; pos = 0; pack_size = 0; } int32_t Read(char* output_buffer, int buffer_len) { int i; for (i = 0; i < buffer_len; i++, pos++) { if (pos == pack_size) { pack_size = buff_st->ReadPackage(pack); pos = 0; if (pack_size == 0) break; } output_buffer[i] = pack[pos]; } return i; } };