#ifndef __ROOT_HANDLER_H__
#define __ROOT_HANDLER_H__
#define CASC_MNDX_ROOT_SIGNATURE 0x58444E4D
#define CASC_TVFS_ROOT_SIGNATURE 0x53465654
#define CASC_DIABLO3_ROOT_SIGNATURE 0x8007D0C4
#define CASC_WOW_ROOT_SIGNATURE 0x4D465354
#define DUMP_LEVEL_ROOT_FILE 1
#define DUMP_LEVEL_ENCODING_FILE 2
#define DUMP_LEVEL_INDEX_ENTRIES 3
struct TRootHandler
{
public:
TRootHandler()
{
dwFeatures = 0;
}
virtual ~TRootHandler()
{}
virtual int Insert(const char * , PCASC_CKEY_ENTRY )
{
return ERROR_NOT_SUPPORTED;
}
virtual PCASC_CKEY_ENTRY GetFile(struct TCascStorage * , const char * )
{
return NULL;
}
virtual PCASC_CKEY_ENTRY GetFile(struct TCascStorage * , DWORD )
{
return NULL;
}
virtual PCASC_CKEY_ENTRY GetFile(size_t , char * , size_t )
{
return NULL;
}
virtual PCASC_CKEY_ENTRY Search(struct TCascSearch * , struct _CASC_FIND_DATA * )
{
return NULL;
}
virtual bool GetInfo(PCASC_CKEY_ENTRY , struct _CASC_FILE_FULL_INFO * )
{
return false;
}
virtual size_t Copy(TRootHandler * )
{
return 0;
}
virtual size_t GetMaxFileIndex()
{
return 0;
}
DWORD GetFeatures()
{
return dwFeatures;
}
protected:
DWORD dwFeatures; };
struct TFileTreeRoot : public TRootHandler
{
TFileTreeRoot(DWORD FileTreeFlags);
virtual ~TFileTreeRoot();
int Insert(const char * szFileName, PCASC_CKEY_ENTRY pCKeyEntry);
PCASC_CKEY_ENTRY GetFile(struct TCascStorage * hs, const char * szFileName);
PCASC_CKEY_ENTRY GetFile(struct TCascStorage * hs, DWORD FileDataId);
PCASC_CKEY_ENTRY GetFile(size_t nFileIndex, char * , size_t );
PCASC_CKEY_ENTRY Search(struct TCascSearch * pSearch, struct _CASC_FIND_DATA * pFindData);
bool GetInfo(PCASC_CKEY_ENTRY pCKeyEntry, struct _CASC_FILE_FULL_INFO * pFileInfo);
size_t Copy(TRootHandler * pRoot);
size_t GetMaxFileIndex();
protected:
CASC_FILE_TREE FileTree;
};
#endif