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

📄 io.h

📁 用VC在BREW平台上开发的手机游戏Superball的源代码
💻 H
字号:
/*
 *  BREW Extension Library
 *  Copyright (c) 2003-2005 ANYSOFT.CN 
 *  All Rights Reserved.
 */

/*!-----------------------------------
	@file		
	@brief		IO文件读写与对象的序列化

	
  -----------------------------------*/

/*!
	@defgroup	IO IO Module/IO文件读写与类的序列化
 */


#ifndef __IO_H
#define __IO_H

#include "CommonDEF.H"
#include "AppFrame.H"
#include "AEEFile.h"
#include "AEEShell.h"

#define SERIAL_LOAD		TRUE	//  用Serialize(SERIAL_LOAD)显式读取对象
#define SERIAL_SAVE		FALSE	//	用Serialize(SERIAL_LOAD)显式保存对象

#define USER_OBJ_ID		1

/*!
		@brief	在OnSerialize()中序列化开始时使用的宏	
		@param	BaseClass	基类名(SerialObj或派生于SerialObj)	 
		@param	_pFile		Serialize()传入的SafeFile指针	 
		@param	bLoading	读取或保存	 	
 */
#define BEGIN_SERIAL(BaseClass,pFile,bLoading)	\
	SafeFile*	_pFile		=pFile;\
	BOOL		_bLoading	=bLoading;\
	BaseClass##::OnSerialize(_pFile,_bLoading)

/*!
		@brief	在OnSerialize()中使用的宏,用于可序列化对象	
		@param	SerialObj	派生于SerialObj的类的对象	 
 */
#define SERIAL_OBJ(SerialObj)	\
	(SerialObj).OnSerialize(_pFile,_bLoading)

/*!
		@brief	在OnSerialize()中使用的宏,用于可序列化对象	
		@param	pSerialObj	派生于SerialObj的类的对象的指针	 	
 */
#define SERIAL_OBJ_EX(pSerialObj)	\
	(pSerialObj)->OnSerialize(_pFile,_bLoading)

/*!
		@brief	在OnSerialize()中使用的宏,用于非序列化对象
		@param	Data		需要序列化的变量	
 */
#define SERIAL_DATA(Data)	\
	do{\
		if (_bLoading)\
			_pFile->Read(&(Data),sizeof(Data));\
		else\
			_pFile->Write(&(Data),sizeof(Data));\
	}while(0)

/*!
		@brief	在OnSerialize()中使用的宏,用于非序列化对象	
		@param	pvBuf		需要序列化的变量的指针	 
		@param	dwBufSize	需要序列化的字节数	 
 */
#define SERIAL_DATA_EX(pvBuf,dwBufSize)	\
	do{\
		if (_bLoading)\
			_pFile->Read((pvBuf),(dwBufSize));\
		else\
			_pFile->Write((pvBuf),(dwBufSize));\
	}while(0)

/*!
		@brief	在OnSerialize()中序列化结束时使用的宏			
 */
#define END_SERIAL()



/*!
		@brief		用于读取对象
		@param		__pShell__		IShell指针
		@param		__dwID__		对象的全局唯一的ID,必须大于USER_OBJ_ID,
									INVALID_ID(-1)不可用	
 */
#define LOAD_OBJECT(__pShell__,__dwID__)	\
	do{\
		m_pShell	=(__pShell__);\
		m_dwID		=(__dwID__);\
		ASSERT(m_pShell);\
		ASSERT(m_dwID!=INVALID_ID);\
		VERIFY(Serialize(SERIAL_LOAD));\
	}while(0)

/*!
		@brief		用于保存对此项的宏
 */
#define SAVE_OBJECT()	\
	do{\
		if (m_bDirty)\
		{\
			VERIFY(Serialize(SERIAL_SAVE));\
			m_bDirty=FALSE;\
		}\
	}while(0)



/*!
	@ingroup	IO
	@brief		提供了对IFileMgr和IFile接口的封装,
				并提供了SafeMode以保证文件的完整性,
				大部分函数的说明请参看BREW SDK
 */
class SafeFile:public BREWObj
{
public:
	SafeFile(IShell* pShell=NULL);
	~SafeFile();

	BOOL	Create(IShell* pShell);
	void	Release(BOOL bOnlyMgr=FALSE);

	BOOL			IsSafeMode();
	OpenFileMode	GetOpenMode();

	BOOL	EnumInit(PCSTR pszDir,BOOL bDirs);
	BOOL	EnumNext(FileInfo* pInfo);
	BOOL	EnumNextEx(AEEFileInfoEx* pInfoEx); 

	BOOL	GetInfo(PCSTR pszName,FileInfo* pInfo);
	BOOL	GetInfoEx(PCSTR pszName,AEEFileInfoEx* pInfoEx); 

	BOOL	GetFileUseInfo(AEEFileUseInfo* pUseInfo);
	
	BOOL	SetDescription(PCSTR pszName,AECHAR* pszDesc);  

	DWORD	GetFreeSpace(PDWORD pdwTotal);
	BOOL 	TestExisting(PCSTR pszName);
	
	BOOL	CreateDir(PCSTR pszDir);
	BOOL	RemoveDir(PCSTR pszDir);

	BOOL	RemoveFile(PCSTR pszName);
	BOOL	RenameFile(PCSTR pszSrc,PCSTR pszDest) ;

	BOOL 	IncFileRef(PCSTR pszName);
	BOOL 	DecFileRef(PCSTR pszName);

	int 	GetLastError();

	BOOL	CreateFile(PCSTR pszFile,DWORD dwSize,BOOL bSafeMode=TRUE);			//!!!
	BOOL 	OpenFile(PCSTR pszFile,OpenFileMode Mode,BOOL bSafeMode=TRUE);		//!!!
	BOOL	CloseFile();														//!!!

	BOOL	SetFileNotify(PFNNOTIFY pfn,PVOID pvParam);
	BOOL 	CancelFileNotify(PFNNOTIFY pfn,PVOID pvParam);
	
	DWORD	SetCacheSize(DWORD dwSize);

	BOOL 	GetFileInfo(FileInfo * pInfo);
	BOOL 	GetFileInfoEx(AEEFileInfoEx* pInfoEx);
	
	BOOL	Seek(FileSeekType Type,SDWORD sdwOffset); 			//!!!
	DWORD	GetCurrentPos();									//!!!
	DWORD	Read(PVOID pvBuffer,DWORD dwCount);					
	DWORD	Write(PACKED const PVOID pvBuffer,DWORD dwCount);	

	BOOL	Truncate(DWORD dwNewSize);							//!!!
protected:
	BOOL	WriteFlag();
	BOOL	ClearFlag();
protected:
	IFileMgr*		m_pFileMgr;
	IFile*			m_pFile;

	BOOL			m_bSafeMode;
	OpenFileMode	m_OpenMode; 
};

typedef SafeFile* PSafeFile;


/*!
	@ingroup	IO
	@brief		该类提供了自动序列化功能
 */
class SerialObj:public BREWObj
{
public:
	SerialObj();
	virtual ~SerialObj();

	BOOL Serialize(BOOL bLoading);
	static BOOL PrepareFile(IShell* pShell,WORD wObjCount,DWORD dwDataSize);
	virtual void OnSerialize(PSafeFile pFile,BOOL bLoading);
public:
	BOOL		m_bDirty;
protected:
	IShell*		m_pShell;
	DWORD		m_dwID;
	DWORD		m_dwOffset;
};
typedef SerialObj* PSerialObj;

#endif

	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -