#pragma once #include #include class BufferedReader { public: explicit BufferedReader(PackageStream* bfr_s) : bfr_s(bfr_s) { bfr = ""; i = 0; } int32_t Read(char* out_bfr, int32_t bfr_len) { this->size = bfr_s->PackageLen(); std::unique_ptr buf(new char[size]); int32_t n = 0; for (; i < size && n < bfr_len && i != 0; i++) out_bfr[n++] = bfr[i]; for (; size > 0 && n < bfr_len;) { size = bfr_s->ReadPackage(buf.get()); bfr = ""; for (int32_t x = 0; x < size; x++) bfr += buf[x]; for (i = 0; i < size && n < bfr_len; i++) out_bfr[n++] = buf[i]; } return n; } private: int32_t size; int32_t i; PackageStream* bfr_s; std::string bfr; };