Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб |
Требуется реализовать класс BufferedReader
со следующим интерфейсом:
class BufferedReader {
public:
explicit BufferedReader(PackageStream* stream);
int32_t Read(char* output_buffer, int32_t buffer_len);
};
В конструктор BufferedReader
передается указатель на объект класса PackageStream
(см. описание ниже), с помощью которого будут считываться пакеты некоторой длины.
Метод int32_t Read(char* output_buffer, int32_t buffer_len)
записывает по указателю output_buffer
пакет длины не более buffer_len
и возвращает реальный размер записанного пакета (это число может быть меньше, чем заданная длина, если строка закончилась раньше).
Интерфейс класса PackageStream
:
class PackageStream {
public:
PackageStream(std::string source, int32_t package_len);
int32_t PackageLen() const;
int32_t ReadPackage(char* output_package);
};
В конструктор PackageStream
передается строка source
, из которой впоследствии побайтово будут считываться пакеты длины package_len
и, собственно, длина пакетов package_len
.
Метод int32_t PackageLen()
возвращает длину пакета (package_len
), который считывает метод ReadPackage
.
Метод int32_t ReadPackage(char* output_package)
записывает по указателю output_package
пакет длины не более package_len
и возвращает реальный размер записанного пакета.
Файл с решением должен содержать только реализацию описанного класса, без функции main.