#include #include "NOD/Util.hpp" #include "NOD/IDiscIO.hpp" #include "NOD/IFileIO.hpp" namespace NOD { class DiscIOISO : public IDiscIO { std::unique_ptr m_fio; public: DiscIOISO(const SystemString& fpin) : m_fio(std::move(NewFileIO(fpin))) {} class ReadStream : public IReadStream { friend class DiscIOISO; std::unique_ptr fp; ReadStream(std::unique_ptr&& fpin) : fp(std::move(fpin)) {} public: uint64_t read(void* buf, uint64_t length) {return fp->read(buf, length);} uint64_t position() const {return fp->position();} void seek(int64_t offset, int whence) {fp->seek(offset, whence);} }; std::unique_ptr beginReadStream(uint64_t offset) const { return std::unique_ptr(new ReadStream(std::move(m_fio->beginReadStream(offset)))); } class WriteStream : public IWriteStream { friend class DiscIOISO; std::unique_ptr fp; WriteStream(std::unique_ptr&& fpin) : fp(std::move(fpin)) {} public: uint64_t write(const void* buf, uint64_t length) { return fp->write(buf, length); } }; std::unique_ptr beginWriteStream(uint64_t offset) const { return std::unique_ptr(new WriteStream(std::move(m_fio->beginWriteStream(offset)))); } }; std::unique_ptr NewDiscIOISO(const SystemChar* path) { return std::unique_ptr(new DiscIOISO(path)); } }