#pragma once #include "Stream.h" #include #include typedef struct _chd_file chd_file; typedef struct chd_core_file core_file; class CChdImageStream : public Framework::CStream { public: CChdImageStream(std::unique_ptr baseStream); virtual ~CChdImageStream(); uint32 GetUnitSize() const; virtual void Seek(int64 pos, Framework::STREAM_SEEK_DIRECTION whence) override; virtual uint64 Tell() override; virtual bool IsEOF() override; virtual uint64 Read(void* dest, uint64 bytes) override; virtual uint64 Write(const void* src, uint64 bytes) override; protected: uint64 GetTotalSize() const; std::unique_ptr m_baseStream; core_file* m_file = nullptr; chd_file* m_chd = nullptr; uint64 m_unitCount = 0; uint32 m_unitSize = 0; uint32 m_hunkSize = 0; uint64 m_position = 0; std::vector m_hunkBuffer; uint32 m_hunkBufferIdx = ~0U; };