/* * Hash.h * * Copyright (C) 2009 Matthias Schiffer * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License along * with this program. If not, see . */ #ifndef MAD_COMMON_HASH_H_ #define MAD_COMMON_HASH_H_ #include "export.h" #include #include #include #include #include #include namespace Mad { namespace Common { class MAD_COMMON_EXPORT Hash { private: Hash(); class MAD_COMMON_EXPORT Hashes { private: std::map map; std::vector list; void addHash(const Core::String &name, unsigned id) { Core::String lowerName = name; lowerName.toLower(); map.insert(std::make_pair(lowerName, id)); list.push_back(name); } public: const std::vector& getList() const { return list; } const std::map& getMap() const { return map; } Hashes(); }; static const Hashes hashes; public: static const std::vector& getHashList() { return hashes.getList(); } static bool isHashSupported(const Core::String &method) { Core::String lowerMethod = method; lowerMethod.toLower(); return (hashes.getMap().find(lowerMethod) != hashes.getMap().end()); } static std::vector hash(const std::vector &in, unsigned int method) throw (Core::Exception); static std::vector hash(const std::vector &in, const Core::String &method) throw (Core::Exception) { Core::String lowerMethod = method; lowerMethod.toLower(); std::map::const_iterator methodIt = hashes.getMap().find(lowerMethod); if(methodIt == hashes.getMap().end()) throw(Core::Exception(Core::Exception::NOT_IMPLEMENTED)); return hash(in, methodIt->second); } static std::vector hash(const Core::String &in, unsigned int method) throw (Core::Exception) { std::string str = in.toUTF8(); return hash(std::vector(str.begin(), str.end()), method); } static std::vector hash(const Core::String &in, const Core::String &method) throw (Core::Exception) { std::string str = in.toUTF8(); return hash(std::vector(str.begin(), str.end()), method); } }; } } #endif /* MAD_COMMON_HASH_H_ */