ArchiveManager.h
Go to the documentation of this file.00001 00010 #ifndef __ArchiveManager_H__ 00011 #define __ArchiveManager_H__ 00012 00013 // Includes 00014 #include "Singleton.h" 00015 #include "Array.h" 00016 #include "StringId.h" 00017 #include "HashTable.h" 00018 #include "HashTableKey_StringId.h" 00019 00020 // Forward declares 00021 class ArchiveFile; 00022 class ArchiveDirectory; 00023 class Archive; 00024 class Filename; 00025 00026 00027 // ArchiveManager 00028 class ArchiveManager:public Singleton<ArchiveManager> 00029 { 00030 public: 00031 ArchiveManager(); 00032 00033 virtual ~ArchiveManager(); 00034 00035 void LoadArchive( 00036 const Filename& filename 00037 ); 00038 00039 void LoadArchive( 00040 const void* memoryBuffer, 00041 int size 00042 ); 00043 00044 void UnloadArchive( 00045 const Filename& filename 00046 ); 00047 00048 void UnloadArchive( 00049 const void* memoryBuffer 00050 ); 00051 00052 void UnloadAllArchives(); 00053 00054 void RescanHardDrive(); 00055 00056 ArchiveFile* GetFile( 00057 const Filename& filename 00058 ) const; 00059 00060 00061 const ArchiveDirectory* GetDirectory( 00062 const Filename& path 00063 ) const; 00064 00065 private: 00066 StringId GetRootDirectory(const char* path) const; 00067 bool RootDirectoryExists(StringId directoryName) const; 00068 void ClearDirectoryCache(); 00069 private: 00070 struct ArchiveEntry 00071 { 00072 StringId rootDirectory; 00073 StringId filename; 00074 const void* memoryBuffer; 00075 Archive* archive; 00076 }; 00077 00078 Array<ArchiveEntry> archives_; 00079 00080 Array<StringId> rootDirectories_; 00081 00082 mutable HashTable<HashTableKey_StringId,ArchiveDirectory*> directoryCache_; 00083 }; 00084 00085 #define siArchiveManager ArchiveManager::GetInstance() 00086 00087 #endif /* __ArchiveManager_H__ */
Reproduction/republishing of any material on this site without permission is strictly prohibited.
