#include <libwccl/lexicon/lexicon.h> #include <libpwrutils/util.h> #include <libwccl/exception.h> #include <libpwrutils/foreach.h> #include <boost/make_shared.hpp> #include <unicode/unistr.h> namespace Wccl { const UnicodeString& Lexicon::translate(const UnicodeString &key) const { static UnicodeString empty; map_t::const_iterator i = map_.find(key); if (i == map_.end()) { return empty; } return i->second; } boost::shared_ptr<StrSet> Lexicon::translate(const StrSet& set) const { boost::shared_ptr<StrSet> ret_set = boost::make_shared<StrSet>(); foreach(const UnicodeString& s, set.get_value()) { const UnicodeString& v = translate(s); if (!v.isEmpty()) { ret_set->insert(v); } } return ret_set; } void Lexicon::insert(const UnicodeString& key, const UnicodeString& value) { if (has_key(key)) { throw InvalidArgument("key", "Duplicated key in lexicon: " + PwrNlp::to_utf8(key)); } if (key.isEmpty()) { throw InvalidArgument("key", "Empty key string in lexicon."); } if (value.isEmpty()) { throw InvalidArgument("value", "Empty value string in lexicon."); } map_[key] = value; } } /* end ns Wccl */