/*!**************************************************************************** @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) *****************************************************************************/