From 15b65d5fb2e2924aa0bb88f96bd7847972b63ee0 Mon Sep 17 00:00:00 2001 From: tatiana-kondakova Date: Mon, 16 Apr 2018 20:12:04 +0300 Subject: [PATCH] [search] Prefer explicit language for mwms with device/input region --- search/keyword_lang_matcher.cpp | 4 ++++ search/keyword_lang_matcher.hpp | 1 + search/ranker.cpp | 8 ++++---- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/search/keyword_lang_matcher.cpp b/search/keyword_lang_matcher.cpp index 5639af2e8f..993e737403 100644 --- a/search/keyword_lang_matcher.cpp +++ b/search/keyword_lang_matcher.cpp @@ -35,6 +35,10 @@ bool KeywordLangMatcher::Score::operator<(KeywordLangMatcher::Score const & scor return m_parentScore.LessInTokensLength(score.m_parentScore); } +bool KeywordLangMatcher::Score::operator<=(KeywordLangMatcher::Score const & score) const +{ + return !(score < *this); +} // KeywordLangMatcher ------------------------------------------------------------------------------ KeywordLangMatcher::KeywordLangMatcher(size_t maxLanguageTiers) : m_languagePriorities(maxLanguageTiers) diff --git a/search/keyword_lang_matcher.hpp b/search/keyword_lang_matcher.hpp index ac64d4c69d..0a46036a2b 100644 --- a/search/keyword_lang_matcher.hpp +++ b/search/keyword_lang_matcher.hpp @@ -18,6 +18,7 @@ public: public: Score(); bool operator<(Score const & s) const; + bool operator<=(Score const & s) const; private: friend class KeywordLangMatcher; diff --git a/search/ranker.cpp b/search/ranker.cpp index 69ef099987..29c1576965 100644 --- a/search/ranker.cpp +++ b/search/ranker.cpp @@ -560,9 +560,9 @@ void Ranker::MakeRankerResults(Geocoder::Params const & geocoderParams, void Ranker::GetBestMatchName(FeatureType const & f, string & name) const { KeywordLangMatcher::Score bestScore; - auto updateScore = [&](int8_t lang, string const & s) { + auto updateScore = [&](int8_t lang, string const & s, bool force) { auto const score = m_keywordsScorer.CalcScore(lang, s); - if (bestScore < score) + if (force ? bestScore <= score : bestScore < score) { bestScore = score; name = s; @@ -570,7 +570,7 @@ void Ranker::GetBestMatchName(FeatureType const & f, string & name) const }; auto bestNameFinder = [&](int8_t lang, string const & s) { - updateScore(lang, s); + updateScore(lang, s, true /* force */); // Default name should be written in the regional language. if (lang == StringUtf8Multilang::kDefaultCode) { @@ -578,7 +578,7 @@ void Ranker::GetBestMatchName(FeatureType const & f, string & name) const vector mwmLangCodes; mwmInfo->GetRegionData().GetLanguages(mwmLangCodes); for (auto const l : mwmLangCodes) - updateScore(l, s); + updateScore(l, s, false /* force */); } }; UNUSED_VALUE(f.ForEachName(bestNameFinder));