#ifndef INCLUDE_WEBM_FILE_READER_H_
#define INCLUDE_WEBM_FILE_READER_H_
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <memory>
#include "./reader.h"
#include "./status.h"
namespace webm {
class FileReader : public Reader {
public:
FileReader() = default;
explicit FileReader(FILE* file);
FileReader(FileReader&& other);
FileReader& operator=(FileReader&& other);
Status Read(std::size_t num_to_read, std::uint8_t* buffer,
std::uint64_t* num_actually_read) override;
Status Skip(std::uint64_t num_to_skip,
std::uint64_t* num_actually_skipped) override;
Status Seek(std::uint64_t seek_position);
std::uint64_t Position() const override;
private:
struct FileCloseFunctor {
void operator()(FILE* file) const {
if (file)
std::fclose(file);
}
};
std::unique_ptr<FILE, FileCloseFunctor> file_;
std::uint64_t position_ = 0;
};
}
#endif