diff --git a/generator/booking_dataset.cpp b/generator/booking_dataset.cpp index 899c0fc71b..8455dba225 100644 --- a/generator/booking_dataset.cpp +++ b/generator/booking_dataset.cpp @@ -1,7 +1,6 @@ #include "generator/booking_dataset.hpp" -#include "map/framework.hpp" - +#include "platform/local_country_file_utils.hpp" #include "platform/platform.hpp" #include "indexer/search_delimiters.hpp" @@ -31,22 +30,7 @@ bool CheckForValues(string const & value) return false; } -// Unlike strings::Tokenize, this function allows for empty tokens. -void Split(string const & s, char delim, vector & parts) -{ - stringstream ss; - - // Workaround for empty last field. - ss << s; - if (!s.empty() && s.back() == delim) - ss << delim; - - string part; - while (getline(ss, part, delim)) - parts.emplace_back(part); -} - -string TabbedString(string const & str) +string EscapeTabs(string const & str) { stringstream ss; for (char c : str) @@ -64,7 +48,7 @@ BookingDataset::Hotel::Hotel(string const & src) { vector rec; strings::ParseCSVRow(src, '\t', rec); - CHECK(rec.size() == FieldsCount(), ("Error parsing hotels.tsv line:", src)); + CHECK(rec.size() == FieldsCount(), ("Error parsing hotels.tsv line:", EscapeTabs(src))); strings::to_uint(rec[Index(Fields::Id)], id); strings::to_double(rec[Index(Fields::Latitude)], lat); @@ -92,6 +76,38 @@ ostream & operator<<(ostream & s, BookingDataset::Hotel const & h) << " lon: " << h.lon; } +BookingDataset::AddressMatcher::AddressMatcher() +{ + vector localFiles; + + Platform & platform = GetPlatform(); + platform::FindAllLocalMapsInDirectoryAndCleanup(platform.WritableDir(), 0 /* version */, + -1 /* latestVersion */, localFiles); + + for (platform::LocalCountryFile const & localFile : localFiles) + { + LOG(LINFO, ("Found mwm:", localFile)); + try + { + m_index.RegisterMap(localFile); + } + catch (RootException const & ex) + { + CHECK(false, ("Bad mwm file:", localFile)); + } + } + + m_coder = make_unique(m_index); +} + +void BookingDataset::AddressMatcher::operator()(Hotel & hotel) +{ + search::ReverseGeocoder::Address addr; + m_coder->GetNearbyAddress(MercatorBounds::FromLatLon(hotel.lat, hotel.lon), addr); + hotel.street = addr.GetStreetName(); + hotel.houseNumber = addr.GetHouseNumber(); +} + BookingDataset::BookingDataset(string const & dataPath, string const & addressReferencePath) { if (dataPath.empty()) @@ -130,7 +146,13 @@ bool BookingDataset::TourismFilter(OsmElement const & e) const BookingDataset::Hotel const & BookingDataset::GetHotel(size_t index) const { - ASSERT_GREATER(m_hotels.size(), index, ()); + ASSERT_LESS(index, m_hotels.size(), ()); + return m_hotels[index]; +} + +BookingDataset::Hotel & BookingDataset::GetHotel(size_t index) +{ + ASSERT_LESS(index, m_hotels.size(), ()); return m_hotels[index]; } @@ -227,7 +249,7 @@ void BookingDataset::BuildFeatures(function const & fn) cons if (!hotel.street.empty()) e.AddTag("addr:street", hotel.street); - if(!hotel.houseNumber.empty()) + if (!hotel.houseNumber.empty()) e.AddTag("addr:housenumber", hotel.houseNumber); switch (hotel.type) @@ -293,33 +315,33 @@ double BookingDataset::ScoreByLinearNormDistance(double distance) void BookingDataset::LoadHotels(istream & src, string const & addressReferencePath) { m_hotels.clear(); + m_rtree.clear(); for (string line; getline(src, line);) m_hotels.emplace_back(line); - if(!addressReferencePath.empty()) + if (!addressReferencePath.empty()) { - LOG(LINFO, ("Match addresses for booking objects",addressReferencePath)); + LOG(LINFO, ("Reference addresses for booking objects", addressReferencePath)); Platform & platform = GetPlatform(); - string backupPath = platform.WritableDir(); + string const backupPath = platform.WritableDir(); platform.SetWritableDirForTests(addressReferencePath); - Framework f; + AddressMatcher addressMatcher; size_t matchedNum = 0; size_t emptyAddr = 0; for (Hotel & hotel : m_hotels) - { - search::AddressInfo info = f.GetAddressInfoAtPoint(MercatorBounds::FromLatLon(hotel.lat, hotel.lon)); - hotel.street = info.m_street; - hotel.houseNumber = info.m_house; + { + addressMatcher(hotel); if (hotel.address.empty()) ++emptyAddr; - if(!info.FormatAddress().empty()) + if (hotel.IsAddressPartsFilled()) ++matchedNum; } - LOG(LINFO, ("Num of hotels:", m_hotels.size(), "matched:", matchedNum, "Empty addresses:", emptyAddr)); + LOG(LINFO, + ("Num of hotels:", m_hotels.size(), "matched:", matchedNum, "empty addresses:", emptyAddr)); platform.SetWritableDirForTests(backupPath); } @@ -327,7 +349,7 @@ void BookingDataset::LoadHotels(istream & src, string const & addressReferencePa for (auto const & hotel : m_hotels) { TBox b(TPoint(hotel.lat, hotel.lon), TPoint(hotel.lat, hotel.lon)); - m_rtree.insert(std::make_pair(b, counter)); + m_rtree.insert(make_pair(b, counter)); ++counter; } } diff --git a/generator/booking_dataset.hpp b/generator/booking_dataset.hpp index 09956be10d..f56bba4d17 100644 --- a/generator/booking_dataset.hpp +++ b/generator/booking_dataset.hpp @@ -2,6 +2,10 @@ #include "generator/osm_element.hpp" +#include "indexer/index.hpp" + +#include "search/reverse_geocoder.hpp" + #include "boost/geometry.hpp" #include "boost/geometry/geometries/point.hpp" #include "boost/geometry/geometries/box.hpp" @@ -59,6 +63,18 @@ public: static constexpr size_t Index(Fields field) { return static_cast(field); } static constexpr size_t FieldsCount() { return static_cast(Fields::Counter); } explicit Hotel(string const & src); + + inline bool IsAddressPartsFilled() const { return !street.empty() || !houseNumber.empty(); } + }; + + class AddressMatcher + { + Index m_index; + unique_ptr m_coder; + + public: + AddressMatcher(); + void operator()(Hotel & hotel); }; explicit BookingDataset(string const & dataPath, string const & addressReferencePath = string()); @@ -69,6 +85,7 @@ public: inline size_t Size() const { return m_hotels.size(); } Hotel const & GetHotel(size_t index) const; + Hotel & GetHotel(size_t index); vector GetNearestHotels(double lat, double lon, size_t limit, double maxDistance = 0.0) const; bool MatchByName(string const & osmName, vector const & bookingIndexes) const; diff --git a/generator/booking_quality_check/booking_addr_match.cpp b/generator/booking_quality_check/booking_addr_match.cpp index 9d063be0bb..d8ccc394b5 100644 --- a/generator/booking_quality_check/booking_addr_match.cpp +++ b/generator/booking_quality_check/booking_addr_match.cpp @@ -3,18 +3,6 @@ #include "map/framework.hpp" -#include "indexer/classificator_loader.hpp" -#include "indexer/data_header.hpp" -#include "indexer/index.hpp" -#include "indexer/mwm_set.hpp" - -#include "platform/country_file.hpp" -#include "platform/local_country_file.hpp" -#include "platform/local_country_file_utils.hpp" -#include "platform/platform.hpp" - -#include "geometry/distance_on_sphere.hpp" - #include "search/processor_factory.hpp" #include "search/ranking_info.hpp" #include "search/result.hpp" @@ -22,12 +10,24 @@ #include "search/search_tests_support/test_search_engine.hpp" #include "search/search_tests_support/test_search_request.hpp" +#include "indexer/classificator_loader.hpp" +#include "indexer/data_header.hpp" +#include "indexer/index.hpp" +#include "indexer/mwm_set.hpp" + #include "storage/country_info_getter.hpp" #include "storage/index.hpp" #include "storage/storage.hpp" #include "coding/reader_wrapper.hpp" +#include "geometry/distance_on_sphere.hpp" + +#include "platform/country_file.hpp" +#include "platform/local_country_file.hpp" +#include "platform/local_country_file_utils.hpp" +#include "platform/platform.hpp" + #include "std/fstream.hpp" #include "std/iostream.hpp" #include "std/numeric.hpp" @@ -40,49 +40,17 @@ using namespace storage; using namespace search; using namespace search::tests_support; -void DidDownload(TCountryId const & /* countryId */, - shared_ptr const & /* localFile */) -{ -} - -bool WillDelete(TCountryId const & /* countryId */, - shared_ptr const & /* localFile */) -{ - return false; -} - -uint64_t ReadVersionFromHeader(platform::LocalCountryFile const & mwm) -{ - vector specialFiles = { - WORLD_FILE_NAME, - WORLD_COASTS_FILE_NAME, - WORLD_COASTS_OBSOLETE_FILE_NAME - }; - for (auto const & name : specialFiles) - { - if (mwm.GetCountryName() == name) - return mwm.GetVersion(); - } - - ModelReaderPtr reader = FilesContainerR(mwm.GetPath(MapOptions::Map)).GetReader(VERSION_FILE_TAG); - ReaderSrc src(reader.GetPtr()); - - version::MwmVersion version; - version::ReadVersion(src, version); - return version.GetVersion(); -} - DEFINE_string(booking_data, "", "Path to booking data in .tsv format"); DEFINE_string(user_resource_path, "", "Path to data directory (resources dir)"); DEFINE_string(data_path, "", "Path to mwm files (writable dir)"); DEFINE_string(locale, "en", "Locale of all the search queries"); DEFINE_int32(num_threads, 1, "Number of search engine threads"); - int main(int argc, char * argv[]) { - google::SetUsageMessage("Takes OSM XML data from stdin and creates" - " data and index files in several passes."); + google::SetUsageMessage( + "Takes OSM XML data from stdin and creates" + " data and index files in several passes."); google::ParseCommandLineFlags(&argc, &argv, true); Platform & platform = GetPlatform(); @@ -106,30 +74,30 @@ int main(int argc, char * argv[]) LOG_SHORT(LINFO, ("Booking data:", FLAGS_booking_data)); BookingDataset bookingDataset(FLAGS_booking_data); - - - Framework f; + BookingDataset::AddressMatcher addressMatcher; size_t matchedNum = 0; size_t emptyAddr = 0; for (size_t i = 0; i < bookingDataset.Size(); ++i) { - BookingDataset::Hotel const & hotel = bookingDataset.GetHotel(i); + BookingDataset::Hotel & hotel = bookingDataset.GetHotel(i); - search::AddressInfo info = f.GetAddressInfoAtPoint(MercatorBounds::FromLatLon(hotel.lat, hotel.lon)); + addressMatcher(hotel); if (hotel.address.empty()) ++emptyAddr; - if(!info.FormatAddress().empty()) + if (hotel.IsAddressPartsFilled()) { ++matchedNum; cout << "[" << i << "/" << bookingDataset.Size() << "] Hotel: " << hotel.address - << " AddLoc: " << hotel.addressLoc << " --> " << info.FormatAddress() << endl; + << " AddLoc: " << hotel.translations << " --> " << hotel.street << " " + << hotel.houseNumber << endl; } } - cout << "Num of hotels: " << bookingDataset.Size() << " matched: " << matchedNum << " Empty addresses: " << emptyAddr << endl; + cout << "Num of hotels: " << bookingDataset.Size() << " matched: " << matchedNum + << " Empty addresses: " << emptyAddr << endl; return 0; } diff --git a/generator/generator_tests/booking_test.cpp b/generator/generator_tests/booking_test.cpp index f7ed68feed..ef2233a6e1 100644 --- a/generator/generator_tests/booking_test.cpp +++ b/generator/generator_tests/booking_test.cpp @@ -11,7 +11,10 @@ UNIT_TEST(BookingDataset_SmokeTest) UNIT_TEST(BookingDataset_ParseTest) { - stringstream ss("1485988\t36.75818960879561\t3.053177244180233\tAppartement Alger Centre\t50 Avenue Ahmed Ghermoul\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/appartement-alger-centre-alger.html\t201\t\t\t"); + stringstream ss( + "1485988\t36.75818960879561\t3.053177244180233\tAppartement Alger Centre\t50 Avenue Ahmed " + "Ghermoul\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/" + "appartement-alger-centre-alger.html\t201\t\t\t"); generator::BookingDataset data(ss); TEST_EQUAL(data.Size(), 1, ()); } @@ -19,17 +22,40 @@ UNIT_TEST(BookingDataset_ParseTest) UNIT_TEST(BookingDataset_ParseTest2) { stringstream ss( - "1485988\t36.75818960879561\t3.053177244180233\tAppartement Alger Centre\t50 Avenue Ahmed Ghermoul\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/appartement-alger-centre-alger.html\t201\t\t\t\n" - "357811\t34.86737239675703\t-1.31686270236969\tRenaissance Tlemcen Hotel\tRenaissance Tlemcen Hotel\t5\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/renaissance-tlemcen.html\t204\t\t\t\n" \ - "1500820\t36.72847621708523\t3.0645270245369147\tMazghana Apartment\tCite Garidi 1 Tours 3 N 53, Kouba\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/mazghana-apartment.html\t201\t\t\t\n" \ - "1318991\t35.692865978372666\t-0.6278949570083796\tBest Western Hotel Colombe\t6 Bd Zabour Larbi Hai Khaldia Delmonte\t4\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/best-western-colombe.html\t204\t\t\t\n" \ - "1495828\t36.33835943\t6.626214981\tConstantine Marriott Hotel\tOued Rhumel Street, Cites des Arcades Romaines,\t5\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/constantine-marriott.html\t204\t\t\t\n" \ - "1411999\t35.73994643933386\t-0.757756233215332\tResidence Nadra\tBoulevard de la plage, Niche 1236 Paradis plage\t0\t1\tNone\tNone\thttp://www.booking.com/hotel/dz/residence-nadra.html\t201\t\t\t\n" \ - "1497769\t36.80667121575615\t3.231203541069817\tApartment La Pérouse\tLa Pérouse Ain Taya\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/apartment-la-perouse.html\t220\t\t\t\n" \ - "1668244\t36.715150622433804\t2.8442734479904175\tAZ Hotel Zeralda\t09 Rue de Mahelma - Zeralda - ALGER\t4\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/el-aziz-zeralda.html\t204\t\t\t\n" \ - "1486823\t36.73432645678891\t3.0335435271263123\tGuest House Marhaba\tResidence Soumam - Bloc B - Appt 17- Said Hamdine\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/marhaba.html\t208\t\t\t\n" \ - "1759799\t35.73832476589291\t-0.7553583383560181\tHotel la brise\tAngle boulevard de la plage et route nationale niche 1159 paradis plage\t2\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/la-brise.html\t204\t\t\t\n" - ); + "1485988\t36.75818960879561\t3.053177244180233\tAppartement Alger Centre\t50 Avenue Ahmed " + "Ghermoul\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/" + "appartement-alger-centre-alger.html\t201\t\t\t\n" + "357811\t34.86737239675703\t-1.31686270236969\tRenaissance Tlemcen Hotel\tRenaissance " + "Tlemcen " + "Hotel\t5\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/" + "renaissance-tlemcen.html\t204\t\t\t\n" + "1500820\t36.72847621708523\t3.0645270245369147\tMazghana Apartment\tCite Garidi 1 Tours 3 N " + "53, " + "Kouba\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/" + "mazghana-apartment.html\t201\t\t\t\n" + "1318991\t35.692865978372666\t-0.6278949570083796\tBest Western Hotel Colombe\t6 Bd Zabour " + "Larbi Hai Khaldia " + "Delmonte\t4\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/" + "best-western-colombe.html\t204\t\t\t\n" + "1495828\t36.33835943\t6.626214981\tConstantine Marriott Hotel\tOued Rhumel Street, Cites " + "des Arcades " + "Romaines,\t5\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/" + "constantine-marriott.html\t204\t\t\t\n" + "1411999\t35.73994643933386\t-0.757756233215332\tResidence Nadra\tBoulevard de la plage, " + "Niche 1236 Paradis " + "plage\t0\t1\tNone\tNone\thttp://www.booking.com/hotel/dz/residence-nadra.html\t201\t\t\t\n" + "1497769\t36.80667121575615\t3.231203541069817\tApartment La Pérouse\tLa Pérouse Ain " + "Taya\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/" + "apartment-la-perouse.html\t220\t\t\t\n" + "1668244\t36.715150622433804\t2.8442734479904175\tAZ Hotel Zeralda\t09 Rue de Mahelma - " + "Zeralda - " + "ALGER\t4\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/el-aziz-zeralda.html\t204\t\t\t\n" + "1486823\t36.73432645678891\t3.0335435271263123\tGuest House Marhaba\tResidence Soumam - " + "Bloc B - Appt 17- Said " + "Hamdine\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/marhaba.html\t208\t\t\t\n" + "1759799\t35.73832476589291\t-0.7553583383560181\tHotel la brise\tAngle boulevard de la " + "plage et route nationale niche 1159 paradis " + "plage\t2\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/la-brise.html\t204\t\t\t\n"); generator::BookingDataset data(ss); TEST_EQUAL(data.Size(), 10, ()); -} \ No newline at end of file +} diff --git a/generator/generator_tests/generator_tests.pro b/generator/generator_tests/generator_tests.pro index f3b4141758..11683b6b58 100644 --- a/generator/generator_tests/generator_tests.pro +++ b/generator/generator_tests/generator_tests.pro @@ -4,12 +4,9 @@ CONFIG -= app_bundle TEMPLATE = app ROOT_DIR = ../.. -#DEPENDENCIES = generator map routing indexer platform geometry coding base \ -# expat tess2 protobuf tomcrypt osrm succinct - -DEPENDENCIES = drape_frontend routing search storage indexer drape map platform editor geometry \ +DEPENDENCIES = generator drape_frontend routing search storage indexer drape map platform editor geometry \ coding base freetype expat fribidi tomcrypt jansson protobuf osrm stats_client \ - minizip succinct pugixml tess2 gflags oauthcpp generator + minizip succinct pugixml tess2 gflags oauthcpp include($$ROOT_DIR/common.pri) diff --git a/generator/generator_tool/generator_tool.pro b/generator/generator_tool/generator_tool.pro index 9e332c77e3..e04a45e7e2 100644 --- a/generator/generator_tool/generator_tool.pro +++ b/generator/generator_tool/generator_tool.pro @@ -1,18 +1,10 @@ # Generator binary ROOT_DIR = ../.. -#DEPENDENCIES = generator map search routing storage indexer platform editor geometry coding base \ -# osrm gflags expat tess2 jansson protobuf tomcrypt \ -# succinct stats_client pugixml -#DEPENDENCIES = generator drape map drape_frontend routing search storage indexer platform editor geometry \ -# coding base freetype gflags expat tess2 fribidi tomcrypt jansson protobuf osrm stats_client \ -# minizip succinct pugixml oauthcpp - -DEPENDENCIES = drape_frontend routing search storage indexer drape map platform editor geometry \ +DEPENDENCIES = generator routing search storage indexer editor platform geometry \ coding base freetype expat fribidi tomcrypt jansson protobuf osrm stats_client \ - minizip succinct pugixml tess2 gflags oauthcpp generator - + minizip succinct pugixml tess2 gflags oauthcpp include($$ROOT_DIR/common.pri) INCLUDEPATH *= $$ROOT_DIR/3party/gflags/src diff --git a/generator/osm_source.cpp b/generator/osm_source.cpp index 2ef84e5dc8..6d62f44780 100644 --- a/generator/osm_source.cpp +++ b/generator/osm_source.cpp @@ -513,9 +513,10 @@ bool GenerateFeaturesImpl(feature::GenerateInfo & info) TagAdmixer tagAdmixer(info.GetIntermediateFileName("ways", ".csv"), info.GetIntermediateFileName("towns", ".csv")); TagReplacer tagReplacer(GetPlatform().ResourcesDir() + REPLACED_TAGS_FILE); - + // If info.m_bookingDatafileName is empty then no data will be loaded. - generator::BookingDataset bookingDataset(info.m_bookingDatafileName, info.m_bookingReferenceDir); + generator::BookingDataset bookingDataset(info.m_bookingDatafileName, + info.m_bookingReferenceDir); stringstream skippedElements; diff --git a/xcode/search/search.xcodeproj/project.pbxproj b/xcode/search/search.xcodeproj/project.pbxproj index ec23b9a8e1..54950347bb 100644 --- a/xcode/search/search.xcodeproj/project.pbxproj +++ b/xcode/search/search.xcodeproj/project.pbxproj @@ -29,7 +29,6 @@ 347F332A1C4540A8009758CC /* search_index_values.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F330F1C4540A8009758CC /* search_index_values.hpp */; }; 347F332F1C4540A8009758CC /* search_trie.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F33141C4540A8009758CC /* search_trie.hpp */; }; 347F33301C4540A8009758CC /* suggest.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F33151C4540A8009758CC /* suggest.hpp */; }; - 34B1CB781D22905800B59423 /* ranker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34B1CB761D22905800B59423 /* ranker.cpp */; }; 34B1CB791D22905800B59423 /* ranker.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 34B1CB771D22905800B59423 /* ranker.hpp */; }; 56D5456E1C74A48C00E3719C /* mode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56D5456C1C74A48C00E3719C /* mode.cpp */; }; 56D5456F1C74A48C00E3719C /* mode.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56D5456D1C74A48C00E3719C /* mode.hpp */; }; @@ -83,8 +82,9 @@ 6796249B1D10138400AE4E3C /* test_results_matching.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6796248F1D10137D00AE4E3C /* test_results_matching.cpp */; }; 6796249C1D10138400AE4E3C /* test_search_engine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 679624911D10137D00AE4E3C /* test_search_engine.cpp */; }; 6796249D1D10138400AE4E3C /* test_search_request.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 679624931D10137D00AE4E3C /* test_search_request.cpp */; }; - 67BC92EC1D21469A00A4A378 /* ranker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 67BC92EA1D21469A00A4A378 /* ranker.cpp */; }; 67BC92ED1D21469A00A4A378 /* ranker.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 67BC92EB1D21469A00A4A378 /* ranker.hpp */; }; + 67BC92F81D22E45900A4A378 /* ranker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 67BC92F61D22E45900A4A378 /* ranker.cpp */; }; + 67BC92F91D22E45900A4A378 /* ranker.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 67BC92F71D22E45900A4A378 /* ranker.hpp */; }; A1347D511B8758C3009050FF /* query_saver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1347D4F1B8758C3009050FF /* query_saver.cpp */; }; A1347D521B8758C3009050FF /* query_saver.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A1347D501B8758C3009050FF /* query_saver.hpp */; }; A1347D551B8758E9009050FF /* query_saver_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1347D541B8758E9009050FF /* query_saver_tests.cpp */; }; @@ -172,7 +172,6 @@ 347F330F1C4540A8009758CC /* search_index_values.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = search_index_values.hpp; sourceTree = ""; }; 347F33141C4540A8009758CC /* search_trie.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = search_trie.hpp; sourceTree = ""; }; 347F33151C4540A8009758CC /* suggest.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = suggest.hpp; sourceTree = ""; }; - 34B1CB761D22905800B59423 /* ranker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ranker.cpp; sourceTree = ""; }; 34B1CB771D22905800B59423 /* ranker.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ranker.hpp; sourceTree = ""; }; 56D5456C1C74A48C00E3719C /* mode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mode.cpp; sourceTree = ""; }; 56D5456D1C74A48C00E3719C /* mode.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = mode.hpp; sourceTree = ""; }; @@ -230,8 +229,9 @@ 679624921D10137D00AE4E3C /* test_search_engine.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = test_search_engine.hpp; sourceTree = ""; }; 679624931D10137D00AE4E3C /* test_search_request.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_search_request.cpp; sourceTree = ""; }; 679624941D10137D00AE4E3C /* test_search_request.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = test_search_request.hpp; sourceTree = ""; }; - 67BC92EA1D21469A00A4A378 /* ranker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ranker.cpp; sourceTree = ""; }; 67BC92EB1D21469A00A4A378 /* ranker.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ranker.hpp; sourceTree = ""; }; + 67BC92F61D22E45900A4A378 /* ranker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ranker.cpp; sourceTree = ""; }; + 67BC92F71D22E45900A4A378 /* ranker.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ranker.hpp; sourceTree = ""; }; A1347D4F1B8758C3009050FF /* query_saver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = query_saver.cpp; sourceTree = ""; }; A1347D501B8758C3009050FF /* query_saver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = query_saver.hpp; sourceTree = ""; }; A1347D541B8758E9009050FF /* query_saver_tests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = query_saver_tests.cpp; sourceTree = ""; }; @@ -381,6 +381,8 @@ 675346B21A4055CF00A0A8C3 /* search */ = { isa = PBXGroup; children = ( + 67BC92F61D22E45900A4A378 /* ranker.cpp */, + 67BC92F71D22E45900A4A378 /* ranker.hpp */, F652D9101CFDE84200FC29A0 /* cbv_ptr.cpp */, F652D9111CFDE84200FC29A0 /* cbv_ptr.hpp */, F652D8C21CFDE21900FC29A0 /* features_filter.hpp */, @@ -543,6 +545,7 @@ F652D8F91CFDE21900FC29A0 /* intersection_result.hpp in Headers */, F652D8F11CFDE21900FC29A0 /* geocoder.hpp in Headers */, F652D8F31CFDE21900FC29A0 /* geometry_cache.hpp in Headers */, + 67BC92F91D22E45900A4A378 /* ranker.hpp in Headers */, F652D8EB1CFDE21900FC29A0 /* features_layer_matcher.hpp in Headers */, 347F331B1C4540A8009758CC /* interval_set.hpp in Headers */, F652D9051CFDE21900FC29A0 /* rank_table_cache.hpp in Headers */, @@ -701,6 +704,7 @@ A1347D511B8758C3009050FF /* query_saver.cpp in Sources */, 675346E01A40560D00A0A8C3 /* geometry_utils.cpp in Sources */, F652D90E1CFDE21900FC29A0 /* token_slice.cpp in Sources */, + 67BC92F81D22E45900A4A378 /* ranker.cpp in Sources */, 347F33201C4540A8009758CC /* projection_on_street.cpp in Sources */, 347F33191C4540A8009758CC /* dummy_rank_table.cpp in Sources */, F652D8F41CFDE21900FC29A0 /* house_numbers_matcher.cpp in Sources */,