📄 filemap.h
字号:
/*===========================================================================
包明辉 CFileMap , 读文件缓冲 , 分为3块缓冲区。
主要方法:boolean CFileMap_GetData(CFileMap* pMap , uint32 nIndex , uint32 nSize , boolean* bEnd)
FILE: FileMap.h
===========================================================================*/
//#include "HeaderData.h"
#include "AEEAppGen.h"
#include "AEEHeap.h"
#include "AEEFile.h"
#ifndef BBC_BAO_FILEMAP_2006_8_23
#define BBC_BAO_FILEMAP_2006_8_23
//////////////////////////////////////////////////////////////////////////
//可变宏,根据手机的情况调节
#define READSIZE 512 //注意此数大小必须小于等于下面的宏值#
#define BUFFERSIZE 512 //缓冲区的大小是这个数值的三倍
//////////////////////////////////////////////////////////////////////////
//内部常量不要改变
#define NOW_READ 0xffffffff
#define PERV_PAGE 0
#define NEXT_PAGE 2
#define ANOW_PAGE 1
//////////////////////////////////////////////////////////////////////////
//释放
#define FILEMAP_FREE(p) CFileMap_Release((CFileMap**)&(p))
//////////////////////////////////////////////////////////////////////////
//回调事件类型
typedef enum
{
FILEMAP_NONE = 0
,FILEMAP_REDA
,FILEMAP_IERR
}FileMapNotifyCode;
//////////////////////////////////////////////////////////////////////////
//回调传递信息
typedef struct _NotifyPar
{
void* m_pvUser;
FileMapNotifyCode m_code;
void* m_pDataBeg;
void* m_pDataEnd;
uint32 m_nMaxDataSize; //缓冲区间可读的安全范围
}CNotifyPar;
typedef void (*PFNRBBNOTIFY)(CNotifyPar* pNotify); //利用setTimer形式回调必须只能有一个参数
//////////////////////////////////////////////////////////////////////////
//主结构
typedef struct _FileMap
{
AEEApplet* m_pThis;
CNotifyPar m_tagNotifyPar;
IFile* m_pFile;
PFNRBBNOTIFY m_pReCall;
//////////////////////////////////////////////////////////////////////////
boolean m_bIsBu; //是否需要分三块替换缓冲
byte m_nBlockIdx; //当前要写缓冲区的索引
uint32 m_nReadSize; //一共要读取的数目
uint32 m_nReadIdx; //当前读取的数目
//////////////////////////////////////////////////////////////////////////
uint32 m_nTotalSize; //文件总大小
uint32 m_nLstPgSize; //最后一叶的大小
int32 m_nTotalPage; //一共的缓冲区块数
byte m_Buffer[3][BUFFERSIZE]; //3块缓冲区
uint32 m_nIndex; //当前文件位置偏移0开始
}CFileMap;
CFileMap* CFileMap_New( IFileMgr* pFileMgr ,
const char* pszFileName , //要打开的文件名
PFNRBBNOTIFY pReCall , //接受数据的回调用函数
void* pvUser , //返回调用指针
AEEApplet* pThis);
boolean CFileMap_GetData(CFileMap* pMap ,
uint32 nIndex , //在文件的偏移位置
uint32 nSize , //要读的字节数
boolean* bEnd);
uint32 CFileMap_GetFileSize(CFileMap* pMap); //获得文件的大小
uint32 CFileMap_GetFileIndex(CFileMap* pMap); //获得文件当前位置
void CFileMap_Release(CFileMap** ppFileMap);
//////////////////////////////////////////////////////////////////////////
//TOOL内部函数
uint32 MoveFilePoint(CFileMap* pMap , int32 nGotoPage);
boolean FileRead(CFileMap* pMap , //返回值表示是否开始读文件
byte nBufferBlock , //要读写的块位置缓冲开始
uint32 nBufferCount); //读文件的数
void FileReadStep(CFileMap* pMap); //读文件回调
boolean ReCall(CFileMap* pMap, FileMapNotifyCode code);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -