1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-04-11 11:31:52 +02:00
vcmi/lib/Filesystem/CFilesystemLoader.h
Ivan Savenko b3c17d2788 large filesystem update. Filesysytem is now fully functional, everything should work.
- completely replaced CLodHandler, removed bitmaph and spriteh
- replaced CLodStream in favour of CCompressedStream (2 new files)
- renamed CResourceLoaderFactory and ResourceIndetifier to shorter names
NOTES:
- campaign loading is currently broken. Will fix.
- I am going to remove several unused files in several days (e.g. LodHandler)
2012-08-01 12:02:54 +00:00

94 lines
2.4 KiB
C++

/*
* CFilesystemLoader.h, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#pragma once
#include "ISimpleResourceLoader.h"
class CFileInfo;
class CInputStream;
/**
* A class which can scan and load files of directories.
*/
class DLL_LINKAGE CFilesystemLoader : public ISimpleResourceLoader
{
public:
/**
* Default c-tor.
*/
CFilesystemLoader();
/**
* Ctor.
*
* @param baseDirectory Specifies the base directory and their sub-directories which should be indexed.
* @param depth - recursion depth of subdirectories search. 0 = no recursion
*
* @throws std::runtime_error if the base directory is not a directory or if it is not available
*/
explicit CFilesystemLoader(const std::string & baseDirectory, size_t depth = 16);
/**
* Ctor.
*
* @param baseDirectory Specifies the base directory and their sub-directories which should be indexed.
*
* @throws std::runtime_error if the base directory is not a directory or if it is not available
*/
explicit CFilesystemLoader(const CFileInfo & baseDirectory, size_t depth = 16);
/**
* Opens a base directory to be read and indexed.
*
* @param baseDirectory Specifies the base directory and their sub-directories which should be indexed.
*
* @throws std::runtime_error if the base directory is not a directory or if it is not available
*/
void open(const std::string & baseDirectory, size_t depth);
/**
* Loads a resource with the given resource name.
*
* @param resourceName The unqiue resource name in space of the filesystem.
* @return a input stream object, not null
*/
std::unique_ptr<CInputStream> load(const std::string & resourceName) const;
/**
* Checks if the file entry exists.
*
* @return true if the entry exists, false if not.
*/
bool existsEntry(const std::string & resourceName) const;
/**
* Gets all entries in the filesystem.
*
* @return a list of all entries in the filesystem.
*/
std::list<std::string> getEntries() const;
/**
* Gets the origin of the archive loader.
*
* @return the file path to directory with archive (e.g. path/to/h3/mp3)
*/
std::string getOrigin() const;
private:
/** The base directory which is scanned and indexed. */
std::string baseDirectory;
/** A list of files in the directory */
std::list<CFileInfo> fileList;
};