#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 - 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; };