#pragma once

//kbunarc.kpi の KbGzFile.cpp/h から
//CreateClone 対応コードを除去

//#define TGZ_SUPPORT

#include "kpi_impl.h"

//#ifdef  TGZ_SUPPORT

class KbGzFile : public KbKpiFileImpl
{//gzip 圧縮されたファイルを IKpiFile で扱えるようにするクラス
 //tgz に対応するために使う
 //IKpiUnArcModule::Open の IKpiFile* の代わりに使用されることになるため、
 //CreateClone に対応しなければならない。
 //
 //アーカイブがある程度小さければそれなりの速度で動作するが、
 //ファイルの終端に近い部分へのシークが遅い（初回のみ）ので、
 //大きなアーカイブだと非常に低速
private:
    /*struct Shared //CreateClone されたインスタンスと共有するデータ
    {
        CRITICAL_SECTION cs;
        LONG       cRef;  
        IKpiFile  *pFile;
        void*      gzFile;
        DWORD      dwSize;
    };*/
    //Shared* m_pShared;
    IKpiFile *m_pFile;
    void   *m_gzFile;
    DWORD   m_dwSize;
    UINT64  m_qwPos;//現在のファイルポインタ

    //void  __fastcall Lock(void){EnterCriticalSection(&m_pShared->cs);}
    //void  __fastcall Unlock(void){LeaveCriticalSection(&m_pShared->cs);}

    //KbGzFile(Shared *pShared);
    virtual ~KbGzFile(void);
public:
    KbGzFile(void);
    DWORD  WINAPI Read(void *pBuffer, DWORD dwSize);
    UINT64 WINAPI Seek(__int64 i64Pos, DWORD dwOrigin);
    UINT64 WINAPI GetSize(void);
    //BOOL   WINAPI CreateClone(IKpiFile **ppFile);
    BOOL __fastcall Open(IKpiFile *pFile);
};

//#endif //TGZ_SUPPORT

