#pragma once

class BufferedReader {
 public:
    explicit BufferedReader(PackageStream* stream) : stream_(stream) {}
    int32_t Read(char* output_buffer, int32_t buffer_len) {
        int64_t len = 0;
        int64_t dif = 0;
        while (len < buffer_len) {
            dif = stream_->ReadPackage(output_buffer + len);
                if (dif != stream_->PackageLen()) break;
            len += dif;
        }
        return len + dif > buffer_len ? buffer_len : len + dif;
    }

 private:
    PackageStream* stream_;
};