10#ifndef GUIRESOURCEFILE_HANDLER__H_
11#define GUIRESOURCEFILE_HANDLER__H_
14#include "eC_TList_doubleLinked.h"
17#include "GUIComponentManager.h"
22#define GETRESHANDLER CGUIComponentManager::GetInstance().GetResourceFileHandler()
271 eC_Bool
SetResourceFile(
const eC_String& rkResourceFilePath,
const eC_Bool& bEmulateROMFile =
false);
296 eC_Bool
AddMemoryResource(
const eC_String& kResourceName,
const eC_UInt uiResourceSize, eC_UByte* pubResourceLocation);
335 inline void SetDiskBuffering(eC_Bool bBufferFileFromDisk) { m_bBufferFileFromDisk = bBufferFileFromDisk; }
345 struct ResourceFileHeader_t
347 ResourceFileHeader_t() :
348 uiResourceVersion(0),
358 eC_UInt uiResourceVersion;
359 eC_UInt uiHeaderLength;
362 eC_UInt uiAlignmentBytes;
368 struct ResourceFileInfo_t
370 ResourceFileInfo_t() :
371 kResourceFileHeader(),
372 pkResourceFileHandle(NULL),
373 pkResourceFileName(NULL),
374 pubResourceData(NULL),
378 ResourceFileHeader_t kResourceFileHeader;
379 eC_File* pkResourceFileHandle;
380 const eC_String* pkResourceFileName;
381 const eC_UByte* pubResourceData;
382 eC_UByte ubSegmentIndex;
387 struct MemoryFileInfo_t
390 pkMemoryFileName(NULL),
392 pubMemoryFileLocation(NULL)
395 const eC_String* pkMemoryFileName;
396 eC_UInt uiMemoryFileSize;
397 eC_UByte* pubMemoryFileLocation;
401 struct FileSearchEntry_t
403 FileSearchEntry_t() :
412 eC_UInt uiArrayOffset;
413 eC_UByte ubSegmentIndex;
417 struct FileHandleEntry_t
419 FileHandleEntry_t() :
422 iIndexInAvailableFiles(-1),
426 eC_File* pkFileHandle;
427 eC_UByte* pubFileBuffer;
428 eC_Int iIndexInAvailableFiles;
429 eC_UByte ubSegmentIndex;
430 eC_Bool
operator==(
const FileHandleEntry_t& rhs)
const {
return pkFileHandle == rhs.pkFileHandle; }
434 struct FileSearchResult_t
436 FileSearchResult_t() :
437 iFileIndex(FILE_NOT_FOUND_INDEX),
442 eC_UByte ubSegmentIndex;
470 static int FileSearchEntryComparator(
const void* first,
const void* second)
472 const FileSearchEntry_t *firstEntry =
static_cast<const FileSearchEntry_t*
>(first);
473 const FileSearchEntry_t *secondEntry =
static_cast<const FileSearchEntry_t*
>(second);
475 if (firstEntry->kPath < secondEntry->kPath)
477 else if (firstEntry->kPath > secondEntry->kPath)
487 ResourceFileHeader_t ReadResourceHeader(eC_File* pkHeaderFile);
493 void SetupSearchTable(
const ResourceFileInfo_t& rkFileInfo);
495 void RemoveSegmentFromSearchTable(
const ResourceFileInfo_t& rkFileInfo);
503 FileSearchResult_t SearchForFile(
const eC_String& kFilePath);
512 eC_Int OpenFileFromDisk(
const eC_String& kPath, FileHandleEntry_t& newFile,
const BufferingStrategy_t eBufferingStrategy);
521 eC_Int OpenFileFromResourceFile(
const eC_String& kPath, FileHandleEntry_t& newFile,
const BufferingStrategy_t eBufferingStrategy);
528 eC_File* GetMemoryResource(
const eC_String& kResourceName);
536 eC_Int OpenFileFromMemory(
const eC_String& kPath, FileHandleEntry_t& newFile);
538 void RemoveResourceEntry(
const eC_UInt& uiIndex);
549 enum GUIResourceMode_t {RESOURCE_NONE, RESOURCE_HEADER, RESOURCE_FILE};
554 FILE_OPEN_SUCCESS = 0,
555 FILE_OPEN_FAILURE = -1
560 FILE_NOT_FOUND_INDEX = -1,
561 RESOURCE_READ_BUFFER_SIZE = 256
566 eC_TArray<ResourceFileInfo_t> m_kResourceFileInfo;
568 FileSearchEntry_t* m_pkFileSearchTable;
569 eC_UInt m_uiFileSearchEntryCount;
570 eC_String m_kResourcePrefix;
572 eC_UByte m_ubLoadedSegmentCount;
573 eC_Bool m_bBufferFileFromDisk;
574 eC_Bool m_bBufferHeader;
central component-manager
Definition: GUIComponentManager.h:62
Class for file handling in Guiliani.
Definition: GUIResourceFileHandler.h:195
eC_Bool GetFileInformation(const eC_String &kPath, eC_UInt &uiFileSize, const eC_UByte **ppubData)
eC_File * Open(const eC_String &kPath, const BufferingStrategy_t eBufferingStrategy=BUFFERING_DEFAULT)
void SetDiskBuffering(eC_Bool bBufferFileFromDisk)
Definition: GUIResourceFileHandler.h:335
const eC_String & GetResourcePathPrefix() const
Definition: GUIResourceFileHandler.h:324
eC_Bool SetResourceData(const eC_UByte *pubResourceData)
eC_Bool SetResourceFile(const eC_String &rkResourceFilePath, const eC_Bool &bEmulateROMFile=false)
static void CreateInstance()
eC_Bool Close(eC_File *file)
eC_Bool RemoveResourceData(const eC_UByte *pubResourceData)
void SetHeaderBuffering(eC_Bool bBufferHeader)
Definition: GUIResourceFileHandler.h:341
FileOpenOrder_t
Enumeration for the order in which files are opened.
Definition: GUIResourceFileHandler.h:201
@ RESOURCE_FILE_FIRST
First try opening from resource file.
Definition: GUIResourceFileHandler.h:202
@ RESOURCE_FILE_LAST
First try opening from disk.
Definition: GUIResourceFileHandler.h:203
BufferingStrategy_t
Enumeration for the buffering strategy to use when opening a file.
Definition: GUIResourceFileHandler.h:208
@ BUFFERING_OFF
Do not use buffering.
Definition: GUIResourceFileHandler.h:209
@ BUFFERING_ALWAYS
Always use.
Definition: GUIResourceFileHandler.h:210
@ BUFFERING_DEFAULT
Use previously set buffering strategy.
Definition: GUIResourceFileHandler.h:211
void UnloadResourceFile()
void SetResourcePathPrefix(const eC_String &kResourcePrefix)
eC_Bool AddMemoryResource(const eC_String &kResourceName, const eC_UInt uiResourceSize, eC_UByte *pubResourceLocation)
static void DeleteInstance()
void SetFileOpenOrder(const FileOpenOrder_t eFileOpenOrder)
Definition: GUIResourceFileHandler.h:329
eC_Bool RemoveMemoryResource(const eC_String &kResourceName)
eC_Bool RemoveResourceFile(const eC_String &rkResourceFilePath)
bool operator==(const NSmartPtr::SharedPtr< C1 > &a, const NSmartPtr::SharedPtr< C2 > &b)
Definition: SharedPtr.h:240