From b2e3fdef0f142eb0be9f14dccd934b6e41fbde16 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 7 Feb 2014 01:11:52 +0100 Subject: storage/local: hide the class declarations Hide inside CreateLocalStorage(). --- src/storage/plugins/LocalStorage.cxx | 55 ++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'src/storage/plugins/LocalStorage.cxx') diff --git a/src/storage/plugins/LocalStorage.cxx b/src/storage/plugins/LocalStorage.cxx index 0d45c9dcc..23e87c1b5 100644 --- a/src/storage/plugins/LocalStorage.cxx +++ b/src/storage/plugins/LocalStorage.cxx @@ -19,9 +19,58 @@ #include "config.h" #include "LocalStorage.hxx" +#include "storage/StorageInterface.hxx" #include "storage/FileInfo.hxx" #include "util/Error.hxx" #include "fs/FileSystem.hxx" +#include "fs/AllocatedPath.hxx" +#include "fs/DirectoryReader.hxx" + +#include + +class LocalDirectoryReader final : public StorageDirectoryReader { + AllocatedPath base_fs; + + DirectoryReader reader; + + std::string name_utf8; + +public: + LocalDirectoryReader(AllocatedPath &&_base_fs) + :base_fs(std::move(_base_fs)), reader(base_fs) {} + + bool HasFailed() { + return reader.HasFailed(); + } + + /* virtual methods from class StorageDirectoryReader */ + virtual const char *Read() override; + virtual bool GetInfo(bool follow, FileInfo &info, + Error &error) override; +}; + +class LocalStorage final : public Storage { + const std::string base_utf8; + const AllocatedPath base_fs; + +public: + LocalStorage(const char *_base_utf8, Path _base_fs) + :base_utf8(_base_utf8), base_fs(_base_fs) {} + + /* virtual methods from class Storage */ + virtual bool GetInfo(const char *uri_utf8, bool follow, FileInfo &info, + Error &error) override; + + virtual StorageDirectoryReader *OpenDirectory(const char *uri_utf8, + Error &error) override; + + virtual std::string MapUTF8(const char *uri_utf8) const override; + + virtual AllocatedPath MapFS(const char *uri_utf8) const override; + +private: + AllocatedPath MapFS(const char *uri_utf8, Error &error) const; +}; static bool Stat(Path path, bool follow, FileInfo &info, Error &error) @@ -144,3 +193,9 @@ LocalDirectoryReader::GetInfo(bool follow, FileInfo &info, Error &error) AllocatedPath::Build(base_fs, reader.GetEntry()); return Stat(path_fs, follow, info, error); } + +Storage * +CreateLocalStorage(const char *base_utf8, Path base_fs) +{ + return new LocalStorage(base_utf8, base_fs); +} -- cgit v1.2.3