#pragma once
#include <string>
#include <memory>
using namespace std;
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<char[]> 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;
};