#pragma once
#include <string>
class BufferedReader {
public:
explicit BufferedReader(PackageStream* stream): stream(stream) {
arr = "";
i = 0;
}
int32_t Read(char* output_buffer, int32_t buffer_len) {
this-> len = stream->PackageLen();
std::unique_ptr<char[]> buf(new char[len]);
int32_t n = 0;
for (; i < len && n < buffer_len && i != 0; i++) {
output_buffer[n++] = arr[i];
}
for (; len > 0 && n < buffer_len;) {
len = stream->ReadPackage(buf.get());
arr = "";
for (int32_t cp = 0; cp < len; cp++) {
arr += buf[cp];
}
for (i = 0; i < len && n < buffer_len; i++) {
output_buffer[n++] = buf[i];
}
}
return n;
}
private:
int32_t len;
int32_t i;
PackageStream* stream;
std::string arr;
};