1 // Copyright (C) 2002-2012 Nikolaus Gebhardt 2 // This file is part of the "Irrlicht Engine". 3 // For conditions of distribution and use, see copyright notice in irrlicht.h 4 5 #ifndef __C_MOUNT_READER_H_INCLUDED__ 6 #define __C_MOUNT_READER_H_INCLUDED__ 7 8 #include "IrrCompileConfig.h" 9 10 #ifdef __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_ 11 12 #include "IFileSystem.h" 13 #include "CFileList.h" 14 15 namespace irr 16 { 17 namespace io 18 { 19 20 //! Archiveloader capable of loading MountPoint Archives 21 class CArchiveLoaderMount : public IArchiveLoader 22 { 23 public: 24 25 //! Constructor 26 CArchiveLoaderMount(io::IFileSystem* fs); 27 28 //! returns true if the file maybe is able to be loaded by this class 29 //! based on the file extension (e.g. ".zip") 30 virtual bool isALoadableFileFormat(const io::path& filename) const; 31 32 //! Check if the file might be loaded by this class 33 /** Check might look into the file. 34 \param file File handle to check. 35 \return True if file seems to be loadable. */ 36 virtual bool isALoadableFileFormat(io::IReadFile* file) const; 37 38 //! Check to see if the loader can create archives of this type. 39 /** Check based on the archive type. 40 \param fileType The archive type to check. 41 \return True if the archile loader supports this type, false if not */ 42 virtual bool isALoadableFileFormat(E_FILE_ARCHIVE_TYPE fileType) const; 43 44 //! Creates an archive from the filename 45 /** \param file File handle to check. 46 \return Pointer to newly created archive, or 0 upon error. */ 47 virtual IFileArchive* createArchive(const io::path& filename, bool ignoreCase, bool ignorePaths) const; 48 49 //! creates/loads an archive from the file. 50 //! \return Pointer to the created archive. Returns 0 if loading failed. 51 virtual IFileArchive* createArchive(io::IReadFile* file, bool ignoreCase, bool ignorePaths) const; 52 53 private: 54 io::IFileSystem* FileSystem; 55 }; 56 57 //! A File Archive which uses a mountpoint 58 class CMountPointReader : public virtual IFileArchive, virtual CFileList 59 { 60 public: 61 62 //! Constructor 63 CMountPointReader(IFileSystem *parent, const io::path& basename, 64 bool ignoreCase, bool ignorePaths); 65 66 //! opens a file by index 67 virtual IReadFile* createAndOpenFile(u32 index); 68 69 //! opens a file by file name 70 virtual IReadFile* createAndOpenFile(const io::path& filename); 71 72 //! returns the list of files 73 virtual const IFileList* getFileList() const; 74 75 //! get the class Type getType()76 virtual E_FILE_ARCHIVE_TYPE getType() const { return EFAT_FOLDER; } 77 78 private: 79 80 core::array<io::path> RealFileNames; 81 82 IFileSystem *Parent; 83 void buildDirectory(); 84 }; 85 } // io 86 } // irr 87 88 #endif // __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_ 89 #endif // __C_MOUNT_READER_H_INCLUDED__ 90