#pragma once

#include "kpi_impl.h"
#include "zlib.h"

class KbGzFile : public KbKpiFileImpl
{//GZ 圧縮されたファイルを IKpiFile で扱えるようにする
 //シークが遅いが呼ばれないので支障なし
 //シークが頻繁に呼ばれるようになるなら kbunarc.kpi の KbGzFile.cpp を
 //組み込んだ方が良いかもしれない（kbvgm.kpi に組み込むのは大げさ過ぎる）

private:
    IKpiFile *m_pFile;
    z_stream  m_zStream;
    BYTE      m_temp[16384];
    UINT64    m_qwPos;  //現在の位置
    DWORD     m_dwSize; //展開後のサイズ
    DWORD     m_dwStart;//実際のデータの先頭(TAR.GZ対応)
    DWORD     m_dwEnd;  //実際のデータの終端(TAR.GZ対応)

    virtual ~KbGzFile(void);
    void SkipTarHeader(void);
public:
    KbGzFile(void);
    DWORD  WINAPI GetFileName(wchar_t* pszName, DWORD dwSize) {return m_pFile->GetFileName(pszName, dwSize);}
    DWORD  WINAPI Read(void *pBuffer, DWORD dwSize);
    UINT64 WINAPI Seek(__int64 i64Pos, DWORD dwOrigin);
    UINT64 WINAPI GetSize(void);
    BOOL __fastcall Open(IKpiFile *pFile);
};


