Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArsentiy Milchakov <a.milchakov@corp.mail.ru>2016-07-20 22:51:27 +0300
committerArsentiy Milchakov <a.milchakov@corp.mail.ru>2016-07-20 22:51:27 +0300
commit99f189642f6c5ae0139cc36ba5ba5106680d9de5 (patch)
tree6fa3ee843f0d2d3646d0acb619fc9bc788f03f89 /indexer/editable_map_object.cpp
parentae5272bc4708f55a946163a4228ad38138af82d0 (diff)
review fixes
Diffstat (limited to 'indexer/editable_map_object.cpp')
-rw-r--r--indexer/editable_map_object.cpp86
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;
}