Files
LayaNative2.0/Conch/source/common/downloadCache/JCFileTable.h
T
2020-11-11 16:17:13 +08:00

100 lines
2.1 KiB
C++

/**
@file JCFileTable.h
@brief
@author James
@version 1.0
@date 2016_5_11
*/
#ifndef __JCFileTable_H__
#define __JCFileTable_H__
#include <vector>
namespace laya
{
class JCFileTable
{
public:
struct Info
{
unsigned int fileid;
unsigned int chksum;
};
public:
JCFileTable();
~JCFileTable();
void init();
/** @brief 根据字符串创建dcc表。
* @param[in] p_pszStr dcc信息。每一行描述一个文件
* @return 返回文件个数。
*/
int initByString( const char* p_pszStr );
void save();
/** @brief 检查是否是需要缓存的文件
* @param[in] 文件ID
* @param[in]
* @return
*/
bool find(unsigned int p_nFileID, unsigned int& p_nChkSum);
/** @brief 下面是对表的操作。建议不要用。可能会由于崩溃等问题损坏表。
* @param[in] 文件ID
* @param[in]
* @return
*/
void addFile( unsigned int p_nFileID, unsigned int p_nChkSum );
/** @brief 从表中删除一个文件
* @param[in] 文件ID
*/
void delFile( unsigned int p_nFileID );
protected:
/** @brief 只修改表。不保存
* @param[in] 文件ID
* @param[in]
*/
void _addFile( unsigned int p_nFileID, unsigned int p_nChkSum );
//
/** @brief 这个会返回一个不可靠的指针。所以不允许外部访问
* @param[in] 文件ID
* @return 返回一个可靠的指针
*/
inline Info* getInfo(unsigned int p_nFileID)
{
unsigned char idx = (p_nFileID>>24)&0xff;
std::vector<Info>& b = m_AllItem[idx];
for( int i=0,sz=(int)b.size(); i<sz; i++)
{
Info& curI = b[i];
if(curI.fileid==p_nFileID )
{
return &curI;
}
}
return 0;
}
protected:
std::vector<Info> m_AllItem[256];
};
}
//------------------------------------------------------------------------------
#endif //__JCFileTable_H__
//-----------------------------END FILE--------------------------------