#pragma once class BufferedReader { public: PackageStream* buff_st; char* pack; int pack_size = 0, pos = 0; explicit BufferedReader(PackageStream* stream) { buff_st = stream; pack = new char[stream->PackageLen()]; } 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; } };