#pragma once

class BufferedReader {
public:
    PackageStream* buff_st;
    char* pack;
    int pack_size, pos;
    explicit BufferedReader(PackageStream* stream) {
        buff_st = stream;
        pack = new char[stream->PackageLen()];
        pos = 0;
        pack_size = 0;
    }
    int32_t Read(char* output_buffer, int buffer_len) {
        int i;
        for(i = 0; i < buffer_len; i++, pos++) {
            if(pos == pack_size) {
                pack_size = buff_st->ReadPackage(pack);
                pos = 0;
                if(pack_size == 0)
                    break;
            }
            output_buffer[i] = pack[pos];
        }
        return i;
    }
};