diff options
author | Arsentiy Milchakov <a.milchakov@corp.mail.ru> | 2016-07-20 22:51:27 +0300 |
---|---|---|
committer | Arsentiy Milchakov <a.milchakov@corp.mail.ru> | 2016-07-20 22:51:27 +0300 |
commit | 99f189642f6c5ae0139cc36ba5ba5106680d9de5 (patch) | |
tree | 6fa3ee843f0d2d3646d0acb619fc9bc788f03f89 /indexer/editable_map_object.cpp | |
parent | ae5272bc4708f55a946163a4228ad38138af82d0 (diff) |
review fixes
Diffstat (limited to 'indexer/editable_map_object.cpp')
-rw-r--r-- | indexer/editable_map_object.cpp | 86 |
1 files changed, 40 insertions, 46 deletions
diff --git a/indexer/editable_map_object.cpp b/indexer/editable_map_object.cpp index 3515027f97..e87414f626 100644 --- a/indexer/editable_map_object.cpp +++ b/indexer/editable_map_object.cpp @@ -38,25 +38,21 @@ bool ExtractName(StringUtf8Multilang const & names, int8_t const langCode, return true; } -size_t PushMwmLanguages(StringUtf8Multilang const & names, vector<string> const & mwmLanguages, vector<osm::LocalizedName> & result) +size_t PushMwmLanguages(StringUtf8Multilang const & names, vector<int8_t> const & mwmLanguages, + vector<osm::LocalizedName> & result) { size_t count = 0; - auto langCode = StringUtf8Multilang::kUnsupportedLanguageCode; static size_t const kMaxCountMwmLanguages = 2; - - for (auto const & language : mwmLanguages) + + for (size_t i = 0; i < mwmLanguages.size() && count < kMaxCountMwmLanguages; ++i) { - langCode = StringUtf8Multilang::GetLangIndex(language); - if (ExtractName(names, langCode, result)) + if (ExtractName(names, mwmLanguages[i], result)) ++count; - - if (count >= kMaxCountMwmLanguages) - return count; } return count; } -} +} // namespace namespace osm { @@ -100,37 +96,42 @@ StringUtf8Multilang const & EditableMapObject::GetName() const { return m_name; NamesDataSource EditableMapObject::GetNamesDataSource() const { - return GetNamesDataSource(m_name, GetMwmLanguages(), languages::GetCurrentNorm()); + const auto mwmInfo = GetID().m_mwmId.GetInfo(); + + if (!mwmInfo) + return NamesDataSource(); + + vector<int8_t> mwmLanguages; + mwmInfo->GetRegionData().GetLanguages(mwmLanguages); + + auto const userLangCode = StringUtf8Multilang::GetLangIndex(languages::GetCurrentNorm()); + + return GetNamesDataSource(m_name, mwmLanguages, userLangCode); } // static NamesDataSource EditableMapObject::GetNamesDataSource(StringUtf8Multilang const & source, - vector<string> const & nativeMwmLanguages, - string const & userLanguage) + vector<int8_t> const & mwmLanguages, + int8_t const userLangCode) { NamesDataSource result; auto & names = result.names; auto & mandatoryCount = result.mandatoryNamesCount; // Push Mwm languages. - mandatoryCount = PushMwmLanguages(source, nativeMwmLanguages, names); + mandatoryCount = PushMwmLanguages(source, mwmLanguages, names); // Push user's language. - auto const langCode = StringUtf8Multilang::GetLangIndex(userLanguage); - if (ExtractName(source, langCode, names)) - ++mandatoryCount; - - // Push international language. - if (ExtractName(source, StringUtf8Multilang::kInternationalCode, names)) + if (ExtractName(source, userLangCode, names)) ++mandatoryCount; // Push other languages. - source.ForEach([&names, mandatoryCount](int8_t code, string const & name) -> bool { + source.ForEach([&names, mandatoryCount](int8_t const code, string const & name) -> bool { // Exclude default name. if (StringUtf8Multilang::kDefaultCode == code) return true; auto const mandatoryNamesEnd = names.begin() + mandatoryCount; - // Exclude languages which already in container (languages with top priority). + // Exclude languages which are already in container (languages with top priority). auto const it = find_if( names.begin(), mandatoryNamesEnd, [code](LocalizedName const & localizedName) { return localizedName.m_code == code; }); @@ -171,44 +172,37 @@ void EditableMapObject::SetName(string name, int8_t langCode) return; ASSERT_NOT_EQUAL(StringUtf8Multilang::kDefaultCode, langCode, - ("You trying to set ", name, - " as default, but direct editing of default name is deprecated.")); + ("Direct editing of default name is deprecated.")); - if (!Editor::Instance().WasDefaultNameSaved(GetID()) && - CanUseAsDefaultName(langCode, m_name, GetMwmLanguages())) + if (!Editor::Instance().OriginalFeatureHasDefaultName(GetID())) { - m_name.AddString(StringUtf8Multilang::kDefaultCode, name); + const auto mwmInfo = GetID().m_mwmId.GetInfo(); + + if (mwmInfo) + { + vector<int8_t> mwmLanguages; + mwmInfo->GetRegionData().GetLanguages(mwmLanguages); + + if (CanUseAsDefaultName(langCode, mwmLanguages)) + m_name.AddString(StringUtf8Multilang::kDefaultCode, name); + } } m_name.AddString(langCode, name); } // static -bool EditableMapObject::CanUseAsDefaultName(int8_t const langCode, StringUtf8Multilang const & name, - vector<string> const & nativeMwmLanguages) +bool EditableMapObject::CanUseAsDefaultName(int8_t const lang, vector<int8_t> const & mwmLanguages) { - auto index = StringUtf8Multilang::kUnsupportedLanguageCode; - string unused; - - // Languages priority: 1. Mwm languages 2. International language. - for (auto const & language : nativeMwmLanguages) + for (auto const & mwmLang : mwmLanguages) { - index = StringUtf8Multilang::GetLangIndex(language); - - if (StringUtf8Multilang::kUnsupportedLanguageCode == index) - return false; + if (StringUtf8Multilang::kUnsupportedLanguageCode == mwmLang) + continue; - if (langCode == index) + if (lang == mwmLang) return true; - - // A name with a higher priority was added already. - if (name.GetString(index, unused)) - return false; } - if (langCode == StringUtf8Multilang::kInternationalCode) - return true; - return false; } |