#include #include #include 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 size = min(buffer_len, this->len); snprintf(output_buffer, this->len, "%s", this->buff.substr(this->pos, size).c_str()); string out(output_buffer); size = out.size(); this->pos += size; return size; } private: string buff = ""; int32_t len = 0; int32_t pos = 0; };