#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;
}
~BufferedReader() {
delete[] pack;
}
};