⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filemap.h

📁 这一款新闻类业务的源码
💻 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 + -