diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-25 18:55:19 +0100 |
---|---|---|
committer | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-25 18:55:19 +0100 |
commit | 1a6236c184d7ffe3551d417b656aee31b15d1948 (patch) | |
tree | 30d7a3a8b6101b5060ecd7f704c70f0c72bd5e27 /src/core/resource/Resource.cpp | |
parent | bfafa64765de7a6002c2e84daefc84811278a51a (diff) |
Added functions for dealing with ResourceTypes
Diffstat (limited to 'src/core/resource/Resource.cpp')
-rw-r--r-- | src/core/resource/Resource.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/core/resource/Resource.cpp b/src/core/resource/Resource.cpp index 349c82a..ff3c77f 100644 --- a/src/core/resource/Resource.cpp +++ b/src/core/resource/Resource.cpp @@ -16,11 +16,39 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <core/common/Utils.hpp> + #include "Resource.hpp" #include "ResourceLocator.hpp" namespace ousia { +/* Helper functions for the internal maps */ + +static std::unordered_map<ResourceType, std::string, Utils::EnumHash> reverseMap( + const std::unordered_map<std::string, ResourceType> &m) +{ + std::unordered_map<ResourceType, std::string, Utils::EnumHash> res; + for (auto e : m) { + res.emplace(e.second, e.first); + } + return res; +} + +/* Internal maps */ + +static const std::unordered_map<std::string, ResourceType> + NAME_RESOURCE_TYPE_MAP{{"document", ResourceType::DOCUMENT}, + {"domain", ResourceType::DOMAIN_DESC}, + {"typesystem", ResourceType::TYPESYSTEM}, + {"attributes", ResourceType::ATTRIBUTES}, + {"stylesheet", ResourceType::STYLESHEET}, + {"script", ResourceType::SCRIPT}, + {"data", ResourceType::DATA}}; + +static const std::unordered_map<ResourceType, std::string, Utils::EnumHash> + RESOURCE_TYPE_NAME_MAP = reverseMap(NAME_RESOURCE_TYPE_MAP); + /* Class Resource */ Resource::Resource() @@ -39,6 +67,32 @@ std::unique_ptr<std::istream> Resource::stream() const return locator->stream(location); } +std::string Resource::getResourceTypeName(ResourceType resourceType) +{ + auto it = RESOURCE_TYPE_NAME_MAP.find(resourceType); + if (it != RESOURCE_TYPE_NAME_MAP.end()) { + return it->second; + } + return "unknown"; +} + +ResourceType Resource::getResourceTypeByName(const std::string &name) +{ + std::string normName = Utils::toLower(name); + auto it = NAME_RESOURCE_TYPE_MAP.find(normName); + if (it != NAME_RESOURCE_TYPE_MAP.end()) { + return it->second; + } + return ResourceType::UNKNOWN; +} + +/* Operators */ + +std::ostream &operator<<(std::ostream &os, ResourceType resourceType) +{ + return os << Resource::getResourceTypeName(resourceType); +} + /* NullResource instance */ const Resource NullResource{}; |