1 #pragma once
2 
3 #include "Types.h"
4 #include "Stream.h"
5 
6 class CCsoImageStream : public Framework::CStream
7 {
8 public:
9 	CCsoImageStream(Framework::CStream* baseStream);
10 	virtual ~CCsoImageStream();
11 
12 	virtual void Seek(int64 pos, Framework::STREAM_SEEK_DIRECTION whence) override;
13 	virtual uint64 Tell() override;
14 	virtual bool IsEOF() override;
15 	virtual uint64 Read(void* dest, uint64 bytes) override;
16 	virtual uint64 Write(const void* src, uint64 bytes) override;
17 
18 private:
19 	void ReadFileHeader();
20 	void InitializeBuffers();
21 	uint64 GetTotalSize() const;
22 	uint32 ReadFromNextFrame(uint8* dest, uint64 maxBytes);
23 	uint64 ReadBaseAt(uint64 pos, uint8* dest, uint64 bytes);
24 	void DecompressFrame(uint32 frame, uint64 readBufferSize);
25 
26 	Framework::CStream* m_baseStream;
27 	uint32 m_frameSize;
28 	uint8 m_frameShift;
29 	uint8 m_indexShift;
30 	uint8* m_readBuffer;
31 	uint8* m_zlibBuffer;
32 	uint32 m_zlibBufferFrame;
33 	uint32* m_index;
34 	uint64 m_totalSize;
35 	uint64 m_position;
36 };
37