1 /*************************************************************************** 2 * Copyright (C) 2005-2019 by the FIFE team * 3 * http://www.fifengine.net * 4 * This file is part of FIFE. * 5 * * 6 * FIFE is free software; you can redistribute it and/or * 7 * modify it under the terms of the GNU Lesser General Public * 8 * License as published by the Free Software Foundation; either * 9 * version 2.1 of the License, or (at your option) any later version. * 10 * * 11 * This library is distributed in the hope that it will be useful, * 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 14 * Lesser General Public License for more details. * 15 * * 16 * You should have received a copy of the GNU Lesser General Public * 17 * License along with this library; if not, write to the * 18 * Free Software Foundation, Inc., * 19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * 20 ***************************************************************************/ 21 22 #ifndef FIFE_VFS_VFSSOURCEPROVIDER_H 23 #define FIFE_VFS_VFSSOURCEPROVIDER_H 24 25 // Standard C++ library includes 26 #include <string> 27 28 // 3rd party library includes 29 30 // FIFE includes 31 // These includes are split up in two parts, separated by one empty line 32 // First block: files included from the FIFE root src directory 33 // Second block: files included from the same folder 34 #include "util/base/exception.h" 35 36 namespace FIFE { 37 38 class VFSSource; 39 40 /** VFSSourceProvider abstract baseclass 41 * 42 * If you add support for a new archive-type (like the fallout1&dat files) you should 43 * also create a new VFSSourceProvider for your VFSSource - once this is done 44 * its very easy to load new archives even without knowing their real type. 45 * @see VFS 46 * @see VFSSource 47 * @see VFSSourceFactory 48 */ 49 class VFSSourceProvider{ 50 public: 51 VFSSourceProvider(const std::string& name); 52 virtual ~VFSSourceProvider(); 53 54 /** Returns the name of this VFSSourceProvider 55 * 56 * @return name 57 */ 58 const std::string& getName() const; 59 60 /** Get the VFS this provider is using. Providers will not be able to locate 61 * sources before a VFS is set. VFS::addProvider sets this automatically. 62 */ 63 void setVFS(VFS* vfs); 64 getVFS()65 VFS* getVFS() const { 66 if(!m_vfs) throw NotSet("Attempt to load from VFSSourceProvider without setting a VFS!"); 67 return m_vfs; 68 } 69 70 /** Check if a given file is readable for this VFSSource 71 * 72 * 73 * @param file the filename to check 74 * @return true if readable, false otherwise 75 */ 76 virtual bool isReadable(const std::string& file) const = 0; 77 78 /** Create a new instance of a VFSSource initialized with the given file 79 * 80 * @param file the filename to open (the archive-file) 81 * @return the new VFSSource 82 */ 83 virtual VFSSource* createSource(const std::string& file) = 0; 84 85 /** Get the source instance of the path 86 * 87 * @param path The source path 88 * @return A VFSSource or NULL of none is present 89 */ 90 virtual VFSSource* getSource(const std::string& path) const = 0; 91 92 /** Check whether the provider already has created a source with that path 93 * 94 * @param path The path to the source 95 * @return true if the provider has already created a source with that path, false if not 96 */ 97 virtual bool hasSource(const std::string & path) const = 0; 98 99 private: 100 101 VFS* m_vfs; 102 std::string m_name; 103 }; 104 } 105 106 #endif 107