#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); this->buff += pkg; } while (written != 0); } int32_t Read(char* output_buffer, int32_t buffer_len) { int size = min(buffer_len, this->len); string sub = this->buff.substr(this->pos, size); snprintf(output_buffer, this->len + 1, "%s", sub.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; };