From cac79f6091015480b1e88705fd8502aeccc9f015 Mon Sep 17 00:00:00 2001 From: tatiana-yan Date: Mon, 26 Nov 2018 18:25:03 +0300 Subject: [PATCH] [generator] Add non-const GetMetadata(), GetParams() to FeatureBuilder to avoid copies. --- generator/booking_dataset.cpp | 14 ++++++-------- .../booking_quality_check.cpp | 2 +- generator/feature_builder.hpp | 3 ++- generator/generator_tests_support/test_feature.cpp | 2 +- .../generator_tests_support/test_mwm_builder.cpp | 2 +- generator/opentable_dataset.cpp | 7 ++----- generator/translator_geocoder_base.cpp | 6 +++--- generator/translator_geocoder_base.hpp | 6 +++--- generator/viator_dataset.cpp | 7 ++----- search/search_integration_tests/generate_tests.cpp | 2 +- search/search_integration_tests/processor_test.cpp | 8 ++++---- search/search_integration_tests/smoke_test.cpp | 2 +- 12 files changed, 27 insertions(+), 34 deletions(-) diff --git a/generator/booking_dataset.cpp b/generator/booking_dataset.cpp index 58ccd88da0..2e89f2739b 100644 --- a/generator/booking_dataset.cpp +++ b/generator/booking_dataset.cpp @@ -62,20 +62,20 @@ void BookingDataset::PreprocessMatchedOsmObject(ObjectId, FeatureBuilder1 & fb, if (fb.GetGeomType() == feature::GEOM_AREA) { // Remove all information about the hotel. - auto params = fb.GetParams(); - params.ClearName(); - auto & meta = params.GetMetadata(); + auto & meta = fb.GetMetadata(); meta.Drop(feature::Metadata::EType::FMD_STARS); meta.Drop(feature::Metadata::EType::FMD_WEBSITE); meta.Drop(feature::Metadata::EType::FMD_PHONE_NUMBER); + auto & params = fb.GetParams(); + params.ClearName(); + auto const tourism = classif().GetTypeByPath({"tourism"}); base::EraseIf(params.m_types, [tourism](uint32_t type) { ftype::TruncValue(type, 1); return type == tourism; }); - fb.SetParams(params); } fn(fb); @@ -86,17 +86,17 @@ void BookingDataset::BuildObject(Object const & hotel, std::function const & fn) const { FeatureBuilder1 fb; - FeatureParams params; fb.SetCenter(MercatorBounds::FromLatLon(hotel.m_latLon.lat, hotel.m_latLon.lon)); - auto & metadata = params.GetMetadata(); + auto & metadata = fb.GetMetadata(); metadata.Set(feature::Metadata::FMD_SPONSORED_ID, strings::to_string(hotel.m_id.Get())); metadata.Set(feature::Metadata::FMD_WEBSITE, hotel.m_descUrl); metadata.Set(feature::Metadata::FMD_RATING, strings::to_string(hotel.m_ratingUser)); metadata.Set(feature::Metadata::FMD_STARS, strings::to_string(hotel.m_stars)); metadata.Set(feature::Metadata::FMD_PRICE_RATE, strings::to_string(hotel.m_priceCategory)); + auto & params = fb.GetParams(); // params.AddAddress(hotel.address); // TODO(mgsergio): addr:full ??? @@ -175,8 +175,6 @@ void BookingDataset::BuildObject(Object const & hotel, default: params.AddType(clf.GetTypeByPath({"tourism", "hotel"})); break; } - fb.SetParams(params); - fn(fb); } diff --git a/generator/booking_quality_check/booking_quality_check.cpp b/generator/booking_quality_check/booking_quality_check.cpp index 454b329cb7..c2d122e0dc 100644 --- a/generator/booking_quality_check/booking_quality_check.cpp +++ b/generator/booking_quality_check/booking_quality_check.cpp @@ -52,7 +52,7 @@ string PrintBuilder(FeatureBuilder1 const & fb) s << "Id: " << DebugPrint(fb.GetMostGenericOsmId()) << '\t' << "Name: " << fb.GetName(StringUtf8Multilang::kDefaultCode) << '\t'; - auto const params = fb.GetParams(); + auto const & params = fb.GetParams(); auto const street = params.GetStreet(); auto const house = params.house.Get(); diff --git a/generator/feature_builder.hpp b/generator/feature_builder.hpp index a0fb478cef..e1b48e26f4 100644 --- a/generator/feature_builder.hpp +++ b/generator/feature_builder.hpp @@ -66,7 +66,7 @@ public: feature::Metadata const & GetMetadata() const { return m_params.GetMetadata(); } - feature::Metadata & GetMetadataForTesting() { return m_params.GetMetadata(); } + feature::Metadata & GetMetadata() { return m_params.GetMetadata(); } Geometry const & GetGeometry() const { return m_polygons; } PointSeq const & GetOuterGeometry() const { return m_polygons.front(); } feature::EGeomType GetGeomType() const { return m_params.GetGeomType(); } @@ -169,6 +169,7 @@ public: void SetParams(FeatureParams const & params) { m_params.SetParams(params); } FeatureParams const & GetParams() const { return m_params; } + FeatureParams & GetParams() { return m_params; } /// @name For OSM debugging and osm objects replacement, store original OSM id //@{ diff --git a/generator/generator_tests_support/test_feature.cpp b/generator/generator_tests_support/test_feature.cpp index f540523701..6a8a07b8dc 100644 --- a/generator/generator_tests_support/test_feature.cpp +++ b/generator/generator_tests_support/test_feature.cpp @@ -83,7 +83,7 @@ void TestFeature::Serialize(FeatureBuilder1 & fb) const if (m_metadata.Has(type)) { auto const value = m_metadata.Get(type); - fb.GetMetadataForTesting().Set(type, value); + fb.GetMetadata().Set(type, value); } } diff --git a/generator/generator_tests_support/test_mwm_builder.cpp b/generator/generator_tests_support/test_mwm_builder.cpp index 2e905ba78d..8e9f6aebdc 100644 --- a/generator/generator_tests_support/test_mwm_builder.cpp +++ b/generator/generator_tests_support/test_mwm_builder.cpp @@ -82,7 +82,7 @@ bool TestMwmBuilder::Add(FeatureBuilder1 & fb) if (ftypes::IsCityTownOrVillage(fb.GetTypes()) && fb.GetGeomType() == feature::GEOM_AREA) { - auto const & metadata = fb.GetMetadataForTesting(); + auto const & metadata = fb.GetMetadata(); uint64_t testId; CHECK(strings::to_uint64(metadata.Get(feature::Metadata::FMD_TEST_ID), testId), ()); m_boundariesTable.Append(testId, indexer::CityBoundary(fb.GetOuterGeometry())); diff --git a/generator/opentable_dataset.cpp b/generator/opentable_dataset.cpp index d53f879adb..80cfaf2424 100644 --- a/generator/opentable_dataset.cpp +++ b/generator/opentable_dataset.cpp @@ -47,12 +47,11 @@ template <> void OpentableDataset::PreprocessMatchedOsmObject(ObjectId const matchedObjId, FeatureBuilder1 & fb, function const fn) const { - FeatureParams params = fb.GetParams(); - auto const & restaurant = m_storage.GetObjectById(matchedObjId); - auto & metadata = params.GetMetadata(); + auto & metadata = fb.GetMetadata(); metadata.Set(feature::Metadata::FMD_SPONSORED_ID, strings::to_string(restaurant.m_id.Get())); + FeatureParams & params = fb.GetParams(); // params.AddAddress(restaurant.address); // TODO(mgsergio): addr:full ??? @@ -62,8 +61,6 @@ void OpentableDataset::PreprocessMatchedOsmObject(ObjectId const matchedObjId, F auto const & clf = classif(); params.AddType(clf.GetTypeByPath({"sponsored", "opentable"})); - fb.SetParams(params); - fn(fb); } diff --git a/generator/translator_geocoder_base.cpp b/generator/translator_geocoder_base.cpp index 4ec5c8a00c..84df34b21e 100644 --- a/generator/translator_geocoder_base.cpp +++ b/generator/translator_geocoder_base.cpp @@ -90,7 +90,7 @@ void TranslatorGeocoderBase::Emit(FeatureBuilder1 & fb, OsmElement const * p) } void TranslatorGeocoderBase::BuildFeatureAndEmitFromRelation(OsmElement const * p, - FeatureParams & params) + FeatureParams const & params) { HolesRelation helper(m_holder); helper.Build(p); @@ -117,7 +117,7 @@ void TranslatorGeocoderBase::BuildFeatureAndEmitFromRelation(OsmElement const * } void TranslatorGeocoderBase::BuildFeatureAndEmitFromWay(OsmElement const * p, - FeatureParams & params) + FeatureParams const & params) { FeatureBuilder1 fb; m2::PointD pt; @@ -139,7 +139,7 @@ void TranslatorGeocoderBase::BuildFeatureAndEmitFromWay(OsmElement const * p, } void TranslatorGeocoderBase::BuildFeatureAndEmitFromNode(OsmElement const * p, - FeatureParams & params) + FeatureParams const & params) { m2::PointD const pt = MercatorBounds::FromLatLon(p->lat, p->lon); FeatureBuilder1 fb; diff --git a/generator/translator_geocoder_base.hpp b/generator/translator_geocoder_base.hpp index 86cbb51d76..88971d3197 100644 --- a/generator/translator_geocoder_base.hpp +++ b/generator/translator_geocoder_base.hpp @@ -45,9 +45,9 @@ protected: virtual bool IsSuitableElement(OsmElement const * p) const = 0; bool ParseParams(OsmElement * p, FeatureParams & params) const; - void BuildFeatureAndEmitFromRelation(OsmElement const * p, FeatureParams & params); - void BuildFeatureAndEmitFromWay(OsmElement const * p, FeatureParams & params); - void BuildFeatureAndEmitFromNode(OsmElement const * p, FeatureParams & params); + void BuildFeatureAndEmitFromRelation(OsmElement const * p, FeatureParams const & params); + void BuildFeatureAndEmitFromWay(OsmElement const * p, FeatureParams const & params); + void BuildFeatureAndEmitFromNode(OsmElement const * p, FeatureParams const & params); private: void Emit(FeatureBuilder1 & fb, OsmElement const * p); diff --git a/generator/viator_dataset.cpp b/generator/viator_dataset.cpp index e6039f24b3..d140af9ac7 100644 --- a/generator/viator_dataset.cpp +++ b/generator/viator_dataset.cpp @@ -94,17 +94,14 @@ void ViatorDataset::PreprocessMatchedOsmObject(ViatorCity::ObjectId const matche FeatureBuilder1 & fb, function const fn) const { - FeatureParams params = fb.GetParams(); - auto const & city = m_storage.GetObjectById(matchedObjId); - auto & metadata = params.GetMetadata(); + auto & metadata = fb.GetMetadata(); metadata.Set(feature::Metadata::FMD_SPONSORED_ID, strings::to_string(city.m_id.Get())); auto const & clf = classif(); + FeatureParams & params = fb.GetParams(); params.AddType(clf.GetTypeByPath({"sponsored", "viator"})); - fb.SetParams(params); - fn(fb); } } // namespace generator diff --git a/search/search_integration_tests/generate_tests.cpp b/search/search_integration_tests/generate_tests.cpp index 485a064457..1ad4f31467 100644 --- a/search/search_integration_tests/generate_tests.cpp +++ b/search/search_integration_tests/generate_tests.cpp @@ -42,7 +42,7 @@ public: FeatureBuilder1 fb; fb.SetParams(params); fb.SetCenter(pt); - fb.GetMetadataForTesting().Set(feature::Metadata::FMD_TEST_ID, strings::to_string(m_lastId)); + fb.GetMetadata().Set(feature::Metadata::FMD_TEST_ID, strings::to_string(m_lastId)); ++m_lastId; TEST(builder.Add(fb), (fb)); diff --git a/search/search_integration_tests/processor_test.cpp b/search/search_integration_tests/processor_test.cpp index 2ff2fa9ab4..a5da18bc33 100644 --- a/search/search_integration_tests/processor_test.cpp +++ b/search/search_integration_tests/processor_test.cpp @@ -62,7 +62,7 @@ public: { TestPOI::Serialize(fb); - auto & metadata = fb.GetMetadataForTesting(); + auto & metadata = fb.GetMetadata(); metadata.Set(feature::Metadata::FMD_RATING, strings::to_string(m_rating)); metadata.Set(feature::Metadata::FMD_PRICE_RATE, strings::to_string(m_priceRate)); } @@ -85,7 +85,7 @@ public: { TestCafe::Serialize(fb); - auto & metadata = fb.GetMetadataForTesting(); + auto & metadata = fb.GetMetadata(); metadata.Set(feature::Metadata::FMD_CUISINE, m_cuisine); } @@ -107,7 +107,7 @@ public: { TestPOI::Serialize(fb); - auto & metadata = fb.GetMetadataForTesting(); + auto & metadata = fb.GetMetadata(); metadata.Set(feature::Metadata::FMD_AIRPORT_IATA, m_iata); } @@ -129,7 +129,7 @@ public: { TestPOI::Serialize(fb); - auto & metadata = fb.GetMetadataForTesting(); + auto & metadata = fb.GetMetadata(); metadata.Set(feature::Metadata::FMD_OPERATOR, m_operator); } diff --git a/search/search_integration_tests/smoke_test.cpp b/search/search_integration_tests/smoke_test.cpp index 9037c67c1b..e74e0001bc 100644 --- a/search/search_integration_tests/smoke_test.cpp +++ b/search/search_integration_tests/smoke_test.cpp @@ -37,7 +37,7 @@ public: // TestFeature overrides: void Serialize(FeatureBuilder1 & fb) const override { - fb.GetMetadataForTesting().Set(feature::Metadata::FMD_TEST_ID, strings::to_string(m_id)); + fb.GetMetadata().Set(feature::Metadata::FMD_TEST_ID, strings::to_string(m_id)); fb.SetCenter(m_center); if (!m_name.empty())