2021-07-16 10:54:45 -04:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "Stream.h"
|
2021-07-16 11:02:35 -04:00
|
|
|
#include <vector>
|
2023-01-05 19:12:38 -05:00
|
|
|
#include <memory>
|
2021-07-16 10:54:45 -04:00
|
|
|
|
|
|
|
typedef struct _chd_file chd_file;
|
2022-09-28 09:31:49 -04:00
|
|
|
typedef struct chd_core_file core_file;
|
2021-07-16 10:54:45 -04:00
|
|
|
|
|
|
|
class CChdImageStream : public Framework::CStream
|
|
|
|
{
|
|
|
|
public:
|
2022-12-31 12:19:04 -05:00
|
|
|
CChdImageStream(std::unique_ptr<Framework::CStream> baseStream);
|
2022-12-31 11:57:40 -05:00
|
|
|
virtual ~CChdImageStream();
|
2022-04-29 10:03:58 -04:00
|
|
|
|
2022-12-31 11:57:40 -05:00
|
|
|
uint32 GetUnitSize() const;
|
2023-01-06 12:26:39 -05:00
|
|
|
|
2021-07-16 10:54:45 -04:00
|
|
|
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;
|
|
|
|
|
2022-12-31 11:57:40 -05:00
|
|
|
protected:
|
2021-07-16 10:54:45 -04:00
|
|
|
uint64 GetTotalSize() const;
|
|
|
|
|
2022-12-31 12:19:04 -05:00
|
|
|
std::unique_ptr<Framework::CStream> m_baseStream;
|
2021-07-21 09:35:11 -04:00
|
|
|
core_file* m_file = nullptr;
|
2021-07-16 10:54:45 -04:00
|
|
|
chd_file* m_chd = nullptr;
|
2025-01-03 19:06:50 -05:00
|
|
|
uint64 m_unitCount = 0;
|
2022-12-31 11:57:40 -05:00
|
|
|
uint32 m_unitSize = 0;
|
2021-07-16 10:54:45 -04:00
|
|
|
uint32 m_hunkSize = 0;
|
|
|
|
uint64 m_position = 0;
|
|
|
|
std::vector<uint8> m_hunkBuffer;
|
2021-07-16 11:02:35 -04:00
|
|
|
uint32 m_hunkBufferIdx = ~0U;
|
2021-07-16 10:54:45 -04:00
|
|
|
};
|