ArchiveGenerator.h
Go to the documentation of this file.00001 00012 #ifndef __ArchiveGenerator_H__ 00013 #define __ArchiveGenerator_H__ 00014 00015 // Includes 00016 #include "Array.h" 00017 #include "DynamicBuffer.h" 00018 00019 // Forward declares 00020 class DynamicBuffer; 00021 class Platform_FileSystem_Directory; 00022 00023 // ArchiveGenerator 00024 class ArchiveGenerator 00025 { 00026 public: 00027 enum Phase 00028 { 00029 Phase_NotStarted, 00030 Phase_Initializing, 00031 Phase_ScanningDirectory, 00032 Phase_AddingFile, 00033 Phase_CreatingHeaders, 00034 Phase_WritingArchive, 00035 Phase_GeneratingArray, 00036 Phase_Done, 00037 }; 00038 struct ProgressData 00039 { 00040 Phase phase; 00041 char text[1024]; 00042 }; 00043 typedef void (*ProgressCallback)(ProgressData& data); 00044 00045 00049 ArchiveGenerator(ProgressCallback progressCallback = 0); 00050 00057 void GenerateCPP( 00058 const char* directoryPath, 00059 const char* archiveFilename, 00060 const char* archiveName 00061 ); 00062 00068 void GenerateFile( 00069 const char* directoryPath, 00070 const char* archiveFilename 00071 ); 00072 00073 private: 00074 struct DirectoryEntry; 00075 00080 void CreateArchive(const char* directoryName); 00081 00085 void ProcessDirectory( 00086 int rootPathLength, 00087 Platform_FileSystem_Directory* directory, 00088 DirectoryEntry* directoryEntry 00089 ); 00090 00091 void WriteDirectoryList( 00092 DynamicBuffer* buffer, 00093 DirectoryEntry* directoryEntry, 00094 int offset 00095 ); 00096 00097 void SetProgress(Phase phase, const char* text); 00098 private: 00099 ProgressCallback progressCallback_; 00100 ProgressData progressData_; 00101 00102 struct FileEntry 00103 { 00104 char filename[260]; 00105 int offset; 00106 int size; 00107 }; 00108 struct DirectoryEntry 00109 { 00110 char name[260]; 00111 Array<DirectoryEntry> subDirectories; 00112 Array<FileEntry> files; 00113 }; 00114 00115 DirectoryEntry root_; 00116 DynamicBuffer filedata_; 00117 }; 00118 00119 00120 #endif /* __ArchiveGenerator_H__ */
Reproduction/republishing of any material on this site without permission is strictly prohibited.
