diff options
author | Benjamin Paassen <bpaassen@techfak.uni-bielefeld.de> | 2014-12-11 17:58:58 +0100 |
---|---|---|
committer | Benjamin Paassen <bpaassen@techfak.uni-bielefeld.de> | 2014-12-11 17:58:58 +0100 |
commit | 0e2d827e5c0b47e3c8604e94b773f31dcd448ff1 (patch) | |
tree | 29bc11198df7e9bff9154c9fc51c4750854e9434 /src/plugins | |
parent | d51f1d3e9307124c93d3a8ca9c26f48420c10c50 (diff) |
First draft. Tested search path adding mechanism.
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/boost/FileLocator.cpp | 56 | ||||
-rw-r--r-- | src/plugins/boost/FileLocator.hpp | 22 |
2 files changed, 74 insertions, 4 deletions
diff --git a/src/plugins/boost/FileLocator.cpp b/src/plugins/boost/FileLocator.cpp new file mode 100644 index 0000000..fdbe4d6 --- /dev/null +++ b/src/plugins/boost/FileLocator.cpp @@ -0,0 +1,56 @@ +/* + 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 <fstream> + +namespace ousia { + +void FileLocator::addSearchPath(const boost::filesystem::path &path, + std::set<ResourceLocator::Type> types) +{ + for (auto &type : types) { + // retrieve the path vector for the given type. + auto it = searchPaths.find(type); + if (it != searchPaths.end()) { + it->second.push_back(path); + } else { + std::vector<boost::filesystem::path> v{path}; + searchPaths.insert({type, v}); + } + } +} + +ResourceLocator::Location FileLocator::locate(const std::string &path, + const std::string &relativeTo, + const Type type) const +{ + // TODO: Implement Properly + ResourceLocator::Location l(false, *this, type, ""); + return l; +} + +std::unique_ptr<std::istream> FileLocator::stream( + 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 index 50a77db..41826b8 100644 --- a/src/plugins/boost/FileLocator.hpp +++ b/src/plugins/boost/FileLocator.hpp @@ -19,10 +19,14 @@ #ifndef _OUSIA_FILE_LOCATOR_HPP_ #define _OUSIA_FILE_LOCATOR_HPP_ +#include <core/ResourceLocator.hpp> + #include <map> #include <set> +#include <vector> + +#include <boost/filesystem/path.hpp> -#include <core/ResourceLocator.hpp> namespace ousia { @@ -36,10 +40,10 @@ namespace ousia { */ class FileLocator : public ResourceLocator { private: - map<ResourceLocator::Type, std::vector<std::string>> searchPaths; + std::map<ResourceLocator::Type, std::vector<boost::filesystem::path>> searchPaths; public: - FileLocator() searchpaths() {} + FileLocator() : searchPaths() {} /** * Adds a search paths for the given types. @@ -49,9 +53,19 @@ public: * resources of the specified types at the given path in the * future. */ - void addSearchPath(const std::string &path, + void addSearchPath(const boost::filesystem::path &path, std::set<ResourceLocator::Type> types); + /** + * Returns the backing map containing all search paths for a given type. + * This is read-only. + */ + const std::map<ResourceLocator::Type, std::vector<boost::filesystem::path>> & + getSearchPaths() const + { + return searchPaths; + } + Location locate(const std::string &path, const std::string &relativeTo, const Type type) const override; |