diff options
author | David Corrales | 2007-08-01 22:07:50 +0000 |
---|---|---|
committer | David Corrales | 2007-08-01 22:07:50 +0000 |
commit | 1400d28bfb37fc94f3c44dec0a4d0cef65fb8fb7 (patch) | |
tree | 57e08541d48d6a98fc7f700f75dade472a2878bb /backends/factories/abstract-fs-factory.h | |
parent | 9752c75f407c8bd82006222433fcc3618b9e82bb (diff) | |
download | scummvm-rg350-1400d28bfb37fc94f3c44dec0a4d0cef65fb8fb7.tar.gz scummvm-rg350-1400d28bfb37fc94f3c44dec0a4d0cef65fb8fb7.tar.bz2 scummvm-rg350-1400d28bfb37fc94f3c44dec0a4d0cef65fb8fb7.zip |
Initial commit of the new BaseFile implementation. It provides a common ground for file objects across platforms and divides responsibilities between the Common::File class and a base file implementation.
Also rearranged the factories into a new directory for clarity.
Note 1: The posix-file.h and cpp files are for testing only. Only the ds, ps2 and symbian architecture will use special BaseFile based objects.
Note 2: The current code does not yet make use of this new structure, since the Common::File remains intact.
svn-id: r28395
Diffstat (limited to 'backends/factories/abstract-fs-factory.h')
-rw-r--r-- | backends/factories/abstract-fs-factory.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/backends/factories/abstract-fs-factory.h b/backends/factories/abstract-fs-factory.h new file mode 100644 index 0000000000..b06ad63228 --- /dev/null +++ b/backends/factories/abstract-fs-factory.h @@ -0,0 +1,56 @@ +#ifndef ABSTRACT_FILESYSTEM_FACTORY_H +#define ABSTRACT_FILESYSTEM_FACTORY_H + +#include "common/str.h" +#include "backends/fs/abstract-fs.h" +#include "backends/file/base-file.h" + +/** + * Creates concrete FilesystemNode objects depending on the current architecture. + */ +class AbstractFilesystemFactory { +public: + typedef Common::String String; + + /** + * Destructor. + */ + virtual ~AbstractFilesystemFactory() {} + + /** + * Returns a node representing the "current directory". + * If your system does not support this concept, you can either try to + * emulate it or simply return some "sensible" default directory node, + * e.g. the same value as getRoot() returns. + */ + virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const = 0; + + /** + * Construct a node based on a path; the path is in the same format as it + * would be for calls to fopen(). + * + * Furthermore getNodeForPath(oldNode.path()) should create a new node + * identical to oldNode. Hence, we can use the "path" value for persistent + * storage e.g. in the config file. + * + * @param path The path string to create a FilesystemNode for. + */ + virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const = 0; + + /** + * Returns a special node representing the filesystem root. + * The starting point for any file system browsing. + * + * On Unix, this will be simply the node for / (the root directory). + * On Windows, it will be a special node which "contains" all drives (C:, D:, E:). + */ + virtual AbstractFilesystemNode *makeRootFileNode() const = 0; + + /** + * Creates a base file usable by the Common::File wrapper to implement several + * methods. + */ + virtual BaseFile *makeBaseFile() const = 0; +}; + +#endif /*ABSTRACT_FILESYSTEM_FACTORY_H*/ |