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:
authorygorshenin <mipt.vi002@gmail.com>2016-06-17 17:42:11 +0300
committerGitHub <noreply@github.com>2016-06-17 17:42:11 +0300
commitcdd8d4d30be01483fe4180a95a25f0dc0f29a95e (patch)
tree96aa0b0840813d56bb7da2f9192dcb8ea38bd4bd /indexer/search_string_utils.cpp
parent8811238c06e852feb49db747f61f00c0575dfb5a (diff)
parent92c6dd6ed2739096bf023c6c17311754f942973c (diff)
Merge pull request #3600 from mpimenov/streets-string-set
[search] A speedup of the string synonyms checker.
Diffstat (limited to 'indexer/search_string_utils.cpp')
-rw-r--r--indexer/search_string_utils.cpp30
1 files changed, 18 insertions, 12 deletions
diff --git a/indexer/search_string_utils.cpp b/indexer/search_string_utils.cpp
index 9e792e2755..280be0856a 100644
--- a/indexer/search_string_utils.cpp
+++ b/indexer/search_string_utils.cpp
@@ -1,10 +1,9 @@
-#include "search_string_utils.hpp"
+#include "indexer/search_string_utils.hpp"
+#include "indexer/string_set.hpp"
#include "base/macros.hpp"
-#include "base/stl_helpers.hpp"
#include "std/algorithm.hpp"
-#include "std/transform_iterator.hpp"
using namespace strings;
@@ -99,8 +98,9 @@ char const * kStreetTokensSeparator = "\t -,.";
class StreetsSynonymsHolder
{
- vector<UniString> m_synonyms;
public:
+ using TStrings = search::StringSet<UniChar, 8>;
+
StreetsSynonymsHolder()
{
char const * affics[] =
@@ -169,21 +169,27 @@ public:
"дорога", "провулок", "площа", "шосе", "вулиция", "дор", "пров", "вул"
};
- m_synonyms.assign(make_transform_iterator(affics, &NormalizeAndSimplifyString),
- make_transform_iterator(affics + ARRAY_SIZE(affics), &NormalizeAndSimplifyString));
- my::SortUnique(m_synonyms);
+ for (auto const * s : affics)
+ {
+ UniString const us = MakeUniString(s);
+ m_strings.Add(us.begin(), us.end());
+ }
}
- bool MatchPrefix(UniString const & prefix) const
+ bool MatchPrefix(UniString const & s) const
{
- auto const it = lower_bound(m_synonyms.begin(), m_synonyms.end(), prefix);
- return (it != m_synonyms.end() && StartsWith(*it, prefix));
+ auto const status = m_strings.Has(s.begin(), s.end());
+ return status != TStrings::Status::Absent;
}
- bool FullMatch(UniString const & name) const
+ bool FullMatch(UniString const & s) const
{
- return binary_search(m_synonyms.begin(), m_synonyms.end(), name);
+ auto const status = m_strings.Has(s.begin(), s.end());
+ return status == TStrings::Status::Full;
}
+
+private:
+ TStrings m_strings;
};
StreetsSynonymsHolder g_streets;