diff options
Diffstat (limited to 'src/plugins/boost')
-rw-r--r-- | src/plugins/boost/FileLocator.cpp | 91 | ||||
-rw-r--r-- | src/plugins/boost/FileLocator.hpp | 92 |
2 files changed, 0 insertions, 183 deletions
diff --git a/src/plugins/boost/FileLocator.cpp b/src/plugins/boost/FileLocator.cpp deleted file mode 100644 index 9ab398e..0000000 --- a/src/plugins/boost/FileLocator.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - Ousía - Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. -*/ - -#include "FileLocator.hpp" - -#include <boost/filesystem.hpp> - -#include <fstream> - -namespace ousia { - -void FileLocator::addSearchPath(const std::string &path, - std::set<ResourceType> types) -{ - // Canonicalize the given path - std::string canonicalPath = - boost::filesystem::canonical(path).generic_string(); - - // Insert the path for all given types. - for (auto &type : types) { - auto it = searchPaths.find(type); - if (it != searchPaths.end()) { - it->second.push_back(canonicalPath); - } else { - searchPaths.insert({type, {canonicalPath}}); - } - } -} - -bool FileLocator::doLocate(Resource &resource, const std::string &path, - const ResourceType type, - const std::string &relativeTo) const -{ - boost::filesystem::path base(relativeTo); - if (boost::filesystem::exists(base)) { - // Look if 'relativeTo' is a directory already. - if (!boost::filesystem::is_directory(base)) { - // If not we use the parent directory. - base = base.parent_path(); - } - - // Use the / operator to append the path. - base /= path; - - // If we already found a fitting resource there, use that. - if (boost::filesystem::exists(base)) { - std::string location = - boost::filesystem::canonical(base).generic_string(); - resource = Resource(true, *this, type, location); - return true; - } - } - - // Otherwise look in the search paths. - auto it = searchPaths.find(type); - if (it != searchPaths.end()) { - for (boost::filesystem::path p : it->second) { - p /= path; - if (boost::filesystem::exists(p)) { - std::string location = - boost::filesystem::canonical(p).generic_string(); - resource = Resource(true, *this, type, location); - return true; - } - } - } - return false; -} - -std::unique_ptr<std::istream> FileLocator::doStream( - const std::string &location) const -{ - std::unique_ptr<std::istream> ifs{new std::ifstream(location)}; - return std::move(ifs); -} -} diff --git a/src/plugins/boost/FileLocator.hpp b/src/plugins/boost/FileLocator.hpp deleted file mode 100644 index ffe5c8f..0000000 --- a/src/plugins/boost/FileLocator.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/* - Ousía - Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifndef _OUSIA_FILE_LOCATOR_HPP_ -#define _OUSIA_FILE_LOCATOR_HPP_ - -#include <core/resource/Resource.hpp> -#include <core/resource/ResourceLocator.hpp> - -#include <map> -#include <set> -#include <vector> - -namespace ousia { - -/** - * A ResourceLocator is a class able to locate resources in some way, usually - * on the hard drive. - * - * We specify this as an abstract superclass to have an interface layer between - * the program core and possible future extensions in terms of resource - * locations (e.g. online resources, .zip files, etc.). - */ -class FileLocator : public ResourceLocator { -public: - /** - * Type alias representing a Res - */ - using SearchPaths = std::map<ResourceType, std::vector<std::string>>; - -private: - /** - * Internal variable containing all stored search paths. - */ - SearchPaths searchPaths; - -protected: - bool doLocate(Resource &resource, const std::string &path, - const ResourceType type, - const std::string &relativeTo) const override; - - std::unique_ptr<std::istream> doStream( - const std::string &location) const override; - -public: - FileLocator() : searchPaths() {} - - /** - * Adds a search paths for the given types. - * - * @param path is a fully qualified/canonical path to a directory. - * @param types is a set of Resource Types. The FileLocator will look for - * resources of the specified types at the given path in the - * future. - */ - void addSearchPath(const std::string &path, std::set<ResourceType> types); - - /** - * Adds a search path. Implicitly adds the search path for the "unknown" - * - * @param path is a fully qualified/canonical path to a directory. - * @param types is a set of Resource Types. The FileLocator will look for - * resources of the specified types at the given path in the - * future. - */ - void addSearchPath(const std::string &path); - - /** - * Returns the backing map containing all search paths for a given type. - * This is read-only. - */ - const SearchPaths &getSearchPaths() const { return searchPaths; } -}; -} - -#endif /* _OUSIA_FILE_LOCATOR_HPP_ */ - |