Used shared pointers and string streams to read data from the CEterPackManager

This commit is contained in:
2024-12-24 06:54:43 +02:00
parent 603f2207ef
commit c21c99393d
50 changed files with 363 additions and 3668 deletions

View File

@@ -6,16 +6,9 @@
#include "../eterBase/Stl.h"
#include "FileProvider.h"
#include "EterPack.h"
class CEterPackManager : public CSingleton<CEterPackManager>
{
public:
struct SCache
{
BYTE* m_abBufData;
DWORD m_dwBufSize;
};
public:
enum ESearchModes
{
@@ -25,49 +18,37 @@ class CEterPackManager : public CSingleton<CEterPackManager>
typedef std::list<std::shared_ptr<FileProvider>> TEterPackList;
typedef std::unordered_map<std::string, std::shared_ptr<FileProvider>, stringhash> TEterPackMap;
typedef std::unordered_map<std::string, std::shared_ptr<FileProvider>, stringhash> TFileMap;
typedef std::shared_ptr<std::vector<char>> TPackDataPtr;
public:
CEterPackManager();
virtual ~CEterPackManager();
void SetCacheMode();
void SetRelativePathMode();
void LoadStaticCache(const char* c_szFileName);
void SetSearchMode(bool bPackFirst);
int GetSearchMode();
bool Get(CMappedFile & rMappedFile, const char * c_szFileName, LPCVOID * pData);
bool GetFromPack(CMappedFile & rMappedFile, const char * c_szFileName, LPCVOID * pData);
bool GetFromFile(CMappedFile & rMappedFile, const char * c_szFileName, LPCVOID * pData);
bool Get(const std::string& fileName, TPackDataPtr& dataPtr);
bool Get(const std::string& fileName, std::stringstream& dataStream);
bool isExist(const char * c_szFileName);
bool isExistInPack(const char * c_szFileName);
bool RegisterPack(const char * c_szName, const char * c_szDirectory, const BYTE* c_pbIV = NULL);
std::string ConvertFileName(std::string fileName);
const TFileMap& GetFileMap();
protected:
bool CompareName(const char * c_szDirectoryName, DWORD iLength, const char * c_szFileName);
std::shared_ptr<FileProvider> FindPack(const char* c_szPathName);
SCache* __FindCache(DWORD dwFileNameHash);
void __ClearCacheMap();
bool GetFromPack(const std::string& fileName, TPackDataPtr& dataPtr);
bool GetFromFile(const std::string& fileName, TPackDataPtr& dataPtr);
protected:
bool m_bTryRelativePath;
bool m_isCacheMode;
int m_iSearchMode;
std::unordered_map<DWORD, std::shared_ptr<FileProvider>> m_FileDict;
TEterPackMap m_PackMap;
std::unordered_map<DWORD, SCache> m_kMap_dwNameKey_kCache;
std::vector<std::shared_ptr<std::vector<char>>> keepDataReferencedArray;
TFileMap m_FileMap;
TEterPackMap m_PackMap;
CRITICAL_SECTION m_csFinder;
};