From 97f365dde9c73bef226ba7f6235c4aa51b039ecf Mon Sep 17 00:00:00 2001 From: vng Date: Tue, 25 Feb 2014 14:05:07 +0300 Subject: [PATCH] [search] Minor fixes. --- search/house_detector.cpp | 14 ++++++++++---- search/house_detector.hpp | 19 +++++++++++++++++++ search/search_query.cpp | 4 +++- search/search_tests/house_detector_tests.cpp | 7 ++++--- std/algorithm.hpp | 1 - tools/unix/make_index_of_vng.sh | 2 +- 6 files changed, 37 insertions(+), 10 deletions(-) diff --git a/search/house_detector.cpp b/search/house_detector.cpp index 340895289b..2ad5b0d98b 100644 --- a/search/house_detector.cpp +++ b/search/house_detector.cpp @@ -110,8 +110,9 @@ string affics[] = "туп", "ул", "тр", // English - "street", "avenue", "square", "road", "drive", - "st", "av", "sq", "rd", + "street", "avenue", "square", "road", "boulevard", + "drive", "highway", "lane", "way", + "st", "av", "ave", "sq", "rd", "blvd", "dr", "hwy", "ln", // German "strasse", "weg", "platz", @@ -227,7 +228,7 @@ ParsedNumber::ParsedNumber(string const & number, bool american) else { if (m_startN > m_endN) - swap(m_startN, m_endN); + std::swap(m_startN, m_endN); } } } @@ -529,9 +530,14 @@ int HouseDetector::MergeStreets() } } + // Put longer streets first (for better house scoring). + sort(m_streets.begin(), m_streets.end(), MergedStreet::GreaterLength()); + //#ifdef DEBUG // char const * arrColor[] = { "FFFF0000", "FF00FFFF", "FFFFFF00", "FF0000FF", "FF00FF00", "FFFF00FF" }; -// for (size_t i = 0; i < m_streets.size(); ++i) + +// // Write to kml from short to long to get the longest one at the top. +// for (int i = int(m_streets.size()) - 1; i >= 0; --i) // { // Streets2KML(file.GetStream(), m_streets[i], arrColor[i % ARRAY_SIZE(arrColor)]); // } diff --git a/search/house_detector.hpp b/search/house_detector.hpp index 52d52c2b56..b6f083d81c 100644 --- a/search/house_detector.hpp +++ b/search/house_detector.hpp @@ -152,6 +152,20 @@ public: inline Street const * operator[] (size_t i) const { return m_cont[i]; } //@} + struct GreaterLength + { + bool operator() (MergedStreet const & s1, MergedStreet const & s2) const + { + return (s1.m_length > s2.m_length); + } + }; + + inline void Swap(MergedStreet & s) + { + m_cont.swap(s.m_cont); + std::swap(m_length, s.m_length); + } + public: struct Index { @@ -185,6 +199,11 @@ private: void Next(Index & i) const; }; +inline void swap(MergedStreet & s1, MergedStreet & s2) +{ + s1.Swap(s2); +} + class HouseDetector { FeatureLoader m_loader; diff --git a/search/search_query.cpp b/search/search_query.cpp index b0f83ed776..a3b0fb55c3 100644 --- a/search/search_query.cpp +++ b/search/search_query.cpp @@ -1083,8 +1083,10 @@ namespace impl { m_name.swap(rhs.m_name); m_enName.swap(rhs.m_enName); - swap(m_value, rhs.m_value); m_matchedTokens.swap(rhs.m_matchedTokens); + + using std::swap; + swap(m_value, rhs.m_value); swap(m_type, rhs.m_type); } diff --git a/search/search_tests/house_detector_tests.cpp b/search/search_tests/house_detector_tests.cpp index 8e54675ff9..5880c6f4e0 100644 --- a/search/search_tests/house_detector_tests.cpp +++ b/search/search_tests/house_detector_tests.cpp @@ -363,9 +363,10 @@ void swap(Address & a1, Address & a2) UNIT_TEST(HS_MWMSearch) { - string const country = "Minsk"; //"Belarus"; //"USA_New York"; + // "Minsk", "Belarus", "Lithuania", "USA_New York", "USA_California" + string const country = "minsk-pass"; - string const path = GetPlatform().WritableDir() + "addresses-" + country + ".txt"; + string const path = GetPlatform().WritableDir() + country + ".addr"; ifstream file(path.c_str()); if (!file.good()) { @@ -420,7 +421,7 @@ UNIT_TEST(HS_MWMSearch) search::HouseDetector detector(&index); size_t all = 0, matched = 0, notMatched = 0; - size_t const percent = addresses.size() / 100; + size_t const percent = max(size_t(1), addresses.size() / 100); for (size_t i = 0; i < addresses.size(); ++i) { if (i % percent == 0) diff --git a/std/algorithm.hpp b/std/algorithm.hpp index 84e9c6e17f..bc696b84c7 100644 --- a/std/algorithm.hpp +++ b/std/algorithm.hpp @@ -33,7 +33,6 @@ using std::set_union; using std::set_intersection; using std::set_difference; using std::set_symmetric_difference; -using std::swap; using std::transform; using std::push_heap; using std::pop_heap; diff --git a/tools/unix/make_index_of_vng.sh b/tools/unix/make_index_of_vng.sh index 86616d3c64..5eaa86c628 100755 --- a/tools/unix/make_index_of_vng.sh +++ b/tools/unix/make_index_of_vng.sh @@ -27,4 +27,4 @@ $PV ../../../omim-maps/$2.osm.bz2 | bzip2 -d | $GENERATOR_TOOL --preprocess_xml= #$GENERATOR_TOOL --generate_geometry=true --generate_index=true --output=WorldCoasts # 2. Generate country from --output. -$PV ../../../omim-maps/$2.osm.bz2 | bzip2 -d | $GENERATOR_TOOL --use_light_nodes=true --generate_features=true --generate_geometry=true --generate_index=true --generate_search_index=true --intermediate_data_path=$TMPDIR --output=$2 +$PV ../../../omim-maps/$2.osm.bz2 | bzip2 -d | $GENERATOR_TOOL --use_light_nodes=true --generate_features=true --generate_geometry=true --generate_index=true --generate_search_index=true --intermediate_data_path=$TMPDIR --output=$2 --address_file_name=$2.addr