#include <string>
#include <cstring>
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);
if (written > 0) {
cout << endl << "writting: " << out << endl;
}
this->buff += pkg;
} while (written != 0);
cout << "BufferedReader: " << this->buff << endl;
}
int32_t Read(char* output_buffer, int32_t buffer_len) {
int len = min(buffer_len, this->len);
strcpy(output_buffer, this->buff.substr(this->pos, len).c_str());
this->pos += len;
return len;
}
private:
string buff = "";
int32_t len = 0;
int32_t pos = 0;
};