#pragma once

class BufferedReader {
private:
    std::string data_;
    PackageStream* stream;
public:
    explicit BufferedReader(PackageStream* stream) {
        this->stream = stream;
    }
    int32_t Read(char* output_buffer, int32_t buffer_len) {
        std::unique_ptr<char[]> buf(new char[stream->PackageLen()]);
        int len = 1, n = 0;
        while (len != 0 && n < buffer_len) {
            len = stream->ReadPackage(buf.get());
            //cout << buf.get() << ' ' << len << endl;
            for (int i = 0; i < len; i++) {
                output_buffer[n++] = buf[i];
            }
        }
        return n;
    }
};