#include <string>
#include <cstring>
#include <algorithm>
using std::string;
using std::memcpy;
class BufferedReader {
public:
explicit BufferedReader(PackageStream* stream) {
int written = 0;
int pkg_len = stream->PackageLen();
do {
char pkg[pkg_len + 1] = { '\0' };
written = stream->ReadPackage(pkg);
pkg[pkg_len + 1] = '\0';
this->len += written;
string out(pkg);
this->buff += pkg;
} while (written != 0);
}
int32_t Read(char* output_buffer, int32_t buffer_len) {
int size = min(buffer_len, this->len - this->pos);
for (int i = 0; i < size; i++) {
output_buffer[i] = this->buff[this->pos + i];
}
this->pos += size;
return size;
}
private:
string buff = "";
int32_t len = 0;
int32_t pos = 0;
};