#include <string>
#include <algorithm>
class BufferedReader {
public:
explicit BufferedReader(PackageStream* stream): stream_(stream) {}
int32_t Read(char* output_buffer, int32_t buffer_len) {
std::string s;
int len = stream_->PackageLen();
char* chararray = new char[len];
while (s.length() < buffer_len) {
int temp = stream_->ReadPackage(chararray);
for (int i = 0; i < temp; i++) {
s += chararray[i];
}
if (temp < len) {
break;
}
}
int length_buf = std::min<int>(buffer_len, s.length());
for (int i = 0; i < length_buf; ++i) {
output_buffer[i] = s[i];
}
return length_buf;
}
private:
PackageStream* stream_;
};