/*!****************************************************************************
@file PVRTMemoryFileSystem.h
@copyright Copyright (c) Imagination Technologies Limited.
@brief Memory file system for resource files.
******************************************************************************/
#ifndef _PVRTMEMORYFILE_H_
#define _PVRTMEMORYFILE_H_
#include "PVRTGlobal.h"
#include <stddef.h>
/*!****************************************************************************
@class CPVRTMemoryFileSystem
@brief Memory file system for resource files.
******************************************************************************/
class CPVRTMemoryFileSystem
{
public:
/*!***************************************************************************
@brief Constructor. Creates a CPVRTMemoryFileSystem object based on the parameters supplied.
@param[in] pszFilename Name of file to register
@param[in] pBuffer Pointer to file data
@param[in] Size File size
@param[in] bCopy Name and data should be copied?
*****************************************************************************/
CPVRTMemoryFileSystem(const char* pszFilename, const void* pBuffer, size_t Size, bool bCopy = false);
/*!***************************************************************************
@fn RegisterMemoryFile
@param[in] pszFilename Name of file to register
@param[in] pBuffer Pointer to file data
@param[in] Size File size
@param[in] bCopy Name and data should be copied?
@brief Registers a block of memory as a file that can be looked up
by name.
*****************************************************************************/
static void RegisterMemoryFile(const char* pszFilename, const void* pBuffer, size_t Size, bool bCopy = false);
/*!***************************************************************************
@fn GetFile
@param[in] pszFilename Name of file to open
@param[out] ppBuffer Pointer to file data
@param[out] pSize File size
@return true if the file was found in memory, false otherwise
@brief Looks up a file in the memory file system by name. Returns a
pointer to the file data as well as its size on success.
*****************************************************************************/
static bool GetFile(const char* pszFilename, const void** ppBuffer, size_t* pSize);
/*!***************************************************************************
@fn GetNumFiles
@return The number of registered files
@brief Getter for the number of registered files
*****************************************************************************/
static int GetNumFiles();
/*!***************************************************************************
@fn GetFilename
@param[in] i32Index Index of file
@return A pointer to the filename of the requested file
@brief Looks up a file in the memory file system by name. Returns a
pointer to the file data as well as its size on success.
*****************************************************************************/
static const char* GetFilename(int i32Index);
protected:
/*!***************************************************************************
@class CAtExit
@brief Provides a deconstructor for platforms that don't support the atexit() function.
*****************************************************************************/
class CAtExit
{
public:
/*!***************************************************************************
@brief Destructor of CAtExit class. Workaround for platforms that
don't support the atexit() function. This deletes any memory
file system data.
*****************************************************************************/
~CAtExit();
};
static CAtExit s_AtExit;
friend class CAtExit;
/*!***************************************************************************
@struct SFileInfo
@brief Struct which contains information on a single file.
*****************************************************************************/
struct SFileInfo
{
const char* pszFilename; ///< File name.
const void* pBuffer; ///< Pointer to file data.
size_t Size; ///< File size.
bool bAllocated; ///< File was allocated. If true, this file will be deleted on exit.
};
static SFileInfo* s_pFileInfo;
static int s_i32NumFiles;
static int s_i32Capacity;
};
#endif // _PVRTMEMORYFILE_H_
/*****************************************************************************
End of file (PVRTMemoryFileSystem.h)
*****************************************************************************/