Skip to content

Commit 0f012f1

Browse files
tatiana-yanSergey Yershov
authored and
Sergey Yershov
committed
[indexer] Move FeaturesLoaderGuard out of DataSource
1 parent 20fe1ab commit 0f012f1

24 files changed

+65
-87
lines changed

editor/editable_data_source.hpp

-9
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,3 @@ class EditableDataSource : public DataSource
1111
public:
1212
EditableDataSource() : DataSource(std::make_unique<EditableFeatureSourceFactory>()) {}
1313
};
14-
15-
class EditableFeaturesLoaderGuard : public DataSource::FeaturesLoaderGuard
16-
{
17-
public:
18-
EditableFeaturesLoaderGuard(DataSource const & dataSource, DataSource::MwmId const & id)
19-
: DataSource::FeaturesLoaderGuard(dataSource, id, EditableFeatureSourceFactory())
20-
{
21-
}
22-
};

feature_list/feature_list.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ int main(int argc, char ** argv)
353353
map<uint32_t, osm::Id> featureIdToOsmId;
354354
ParseFeatureIdToOsmIdMapping(osmToFeatureFile, featureIdToOsmId);
355355
MwmSet::MwmId mwmId(mwmInfo);
356-
FrozenFeaturesLoaderGuard loader(dataSource, mwmId);
356+
FeaturesLoaderGuard loader(dataSource, mwmId);
357357
for (uint32_t ftIndex = 0; ftIndex < loader.GetNumFeatures(); ftIndex++)
358358
{
359359
FeatureType ft;

indexer/data_source.cpp

+9-11
Original file line numberDiff line numberDiff line change
@@ -103,25 +103,24 @@ class ReadMWMFunctor
103103
};
104104
} // namespace
105105

106-
// DataSource::FeaturesLoaderGuard ---------------------------------------------------------
107-
string DataSource::FeaturesLoaderGuard::GetCountryFileName() const
106+
// FeaturesLoaderGuard ---------------------------------------------------------------------
107+
string FeaturesLoaderGuard::GetCountryFileName() const
108108
{
109109
if (!m_handle.IsAlive())
110110
return string();
111111

112112
return m_handle.GetValue<MwmValue>()->GetCountryFileName();
113113
}
114114

115-
bool DataSource::FeaturesLoaderGuard::IsWorld() const
115+
bool FeaturesLoaderGuard::IsWorld() const
116116
{
117117
if (!m_handle.IsAlive())
118118
return false;
119119

120120
return m_handle.GetValue<MwmValue>()->GetHeader().GetType() == feature::DataHeader::world;
121121
}
122122

123-
unique_ptr<FeatureType> DataSource::FeaturesLoaderGuard::GetOriginalFeatureByIndex(
124-
uint32_t index) const
123+
unique_ptr<FeatureType> FeaturesLoaderGuard::GetOriginalFeatureByIndex(uint32_t index) const
125124
{
126125
auto feature = make_unique<FeatureType>();
127126
if (GetOriginalFeatureByIndex(index, *feature))
@@ -130,8 +129,7 @@ unique_ptr<FeatureType> DataSource::FeaturesLoaderGuard::GetOriginalFeatureByInd
130129
return {};
131130
}
132131

133-
unique_ptr<FeatureType> DataSource::FeaturesLoaderGuard::GetOriginalOrEditedFeatureByIndex(
134-
uint32_t index) const
132+
unique_ptr<FeatureType> FeaturesLoaderGuard::GetOriginalOrEditedFeatureByIndex(uint32_t index) const
135133
{
136134
auto feature = make_unique<FeatureType>();
137135
if (!m_handle.IsAlive())
@@ -144,8 +142,8 @@ unique_ptr<FeatureType> DataSource::FeaturesLoaderGuard::GetOriginalOrEditedFeat
144142
return {};
145143
}
146144

147-
WARN_UNUSED_RESULT bool DataSource::FeaturesLoaderGuard::GetFeatureByIndex(uint32_t index,
148-
FeatureType & ft) const
145+
WARN_UNUSED_RESULT bool FeaturesLoaderGuard::GetFeatureByIndex(uint32_t index,
146+
FeatureType & ft) const
149147
{
150148
if (!m_handle.IsAlive())
151149
return false;
@@ -157,8 +155,8 @@ WARN_UNUSED_RESULT bool DataSource::FeaturesLoaderGuard::GetFeatureByIndex(uint3
157155
return GetOriginalFeatureByIndex(index, ft);
158156
}
159157

160-
WARN_UNUSED_RESULT bool DataSource::FeaturesLoaderGuard::GetOriginalFeatureByIndex(
161-
uint32_t index, FeatureType & ft) const
158+
WARN_UNUSED_RESULT bool FeaturesLoaderGuard::GetOriginalFeatureByIndex(uint32_t index,
159+
FeatureType & ft) const
162160
{
163161
return m_handle.IsAlive() ? m_source->GetOriginalFeature(index, ft) : false;
164162
}

indexer/data_source.hpp

+22-30
Original file line numberDiff line numberDiff line change
@@ -29,33 +29,6 @@ class DataSource : public MwmSet
2929
using FeatureCallback = std::function<void(FeatureType &)>;
3030
using FeatureIdCallback = std::function<void(FeatureID const &)>;
3131

32-
/// Guard for loading features from particular MWM by demand.
33-
/// @note This guard is suitable when mwm is loaded.
34-
class FeaturesLoaderGuard
35-
{
36-
public:
37-
FeaturesLoaderGuard(DataSource const & dataSource, MwmId const & id,
38-
FeatureSourceFactory const & factory)
39-
: m_handle(dataSource.GetMwmHandleById(id)), m_source(factory(m_handle))
40-
{
41-
}
42-
43-
MwmSet::MwmId const & GetId() const { return m_handle.GetId(); }
44-
std::string GetCountryFileName() const;
45-
bool IsWorld() const;
46-
std::unique_ptr<FeatureType> GetOriginalFeatureByIndex(uint32_t index) const;
47-
std::unique_ptr<FeatureType> GetOriginalOrEditedFeatureByIndex(uint32_t index) const;
48-
/// Everyone, except Editor core, should use this method.
49-
WARN_UNUSED_RESULT bool GetFeatureByIndex(uint32_t index, FeatureType & ft) const;
50-
/// Editor core only method, to get 'untouched', original version of feature.
51-
WARN_UNUSED_RESULT bool GetOriginalFeatureByIndex(uint32_t index, FeatureType & ft) const;
52-
size_t GetNumFeatures() const { return m_source->GetNumFeatures(); }
53-
54-
private:
55-
MwmHandle m_handle;
56-
std::unique_ptr<FeatureSource> m_source;
57-
};
58-
5932
~DataSource() override = default;
6033

6134
/// Registers a new map.
@@ -95,6 +68,8 @@ class DataSource : public MwmSet
9568
std::unique_ptr<MwmValueBase> CreateValue(MwmInfo & info) const override;
9669

9770
private:
71+
friend class FeaturesLoaderGuard;
72+
9873
std::unique_ptr<FeatureSourceFactory> m_factory;
9974
};
10075

@@ -106,11 +81,28 @@ class FrozenDataSource : public DataSource
10681
FrozenDataSource() : DataSource(std::make_unique<FeatureSourceFactory>()) {}
10782
};
10883

109-
class FrozenFeaturesLoaderGuard : public DataSource::FeaturesLoaderGuard
84+
/// Guard for loading features from particular MWM by demand.
85+
/// @note This guard is suitable when mwm is loaded.
86+
class FeaturesLoaderGuard
11087
{
11188
public:
112-
FrozenFeaturesLoaderGuard(DataSource const & dataSource, DataSource::MwmId const & id)
113-
: DataSource::FeaturesLoaderGuard(dataSource, id, FeatureSourceFactory())
89+
FeaturesLoaderGuard(DataSource const & dataSource, DataSource::MwmId const & id)
90+
: m_handle(dataSource.GetMwmHandleById(id)), m_source((*dataSource.m_factory)(m_handle))
11491
{
11592
}
93+
94+
MwmSet::MwmId const & GetId() const { return m_handle.GetId(); }
95+
std::string GetCountryFileName() const;
96+
bool IsWorld() const;
97+
std::unique_ptr<FeatureType> GetOriginalFeatureByIndex(uint32_t index) const;
98+
std::unique_ptr<FeatureType> GetOriginalOrEditedFeatureByIndex(uint32_t index) const;
99+
/// Everyone, except Editor core, should use this method.
100+
WARN_UNUSED_RESULT bool GetFeatureByIndex(uint32_t index, FeatureType & ft) const;
101+
/// Editor core only method, to get 'untouched', original version of feature.
102+
WARN_UNUSED_RESULT bool GetOriginalFeatureByIndex(uint32_t index, FeatureType & ft) const;
103+
size_t GetNumFeatures() const { return m_source->GetNumFeatures(); }
104+
105+
private:
106+
DataSource::MwmHandle m_handle;
107+
std::unique_ptr<FeatureSource> m_source;
116108
};

indexer/indexer_tests/scale_index_reading_tests.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class ScaleIndexReadingTest : public TestWithCustomMwms
5454
[&](uint32_t index) { indices.push_back(index); });
5555
}
5656

57-
FrozenFeaturesLoaderGuard loader(m_dataSource, id);
57+
FeaturesLoaderGuard loader(m_dataSource, id);
5858

5959
Names names;
6060
for (auto const & index : indices)

map/booking_availability_filter.cpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
#include <utility>
1616
#include <vector>
1717

18-
using LoaderGuard = EditableFeaturesLoaderGuard;
19-
2018
using namespace booking::filter;
2119

2220
namespace
@@ -107,12 +105,12 @@ void PrepareData(DataSource const & dataSource, search::Results const & results,
107105
std::sort(features.begin(), features.end());
108106

109107
MwmSet::MwmId mwmId;
110-
std::unique_ptr<LoaderGuard> guard;
108+
std::unique_ptr<FeaturesLoaderGuard> guard;
111109
for (auto const & featureId : features)
112110
{
113111
if (mwmId != featureId.m_mwmId)
114112
{
115-
guard = my::make_unique<LoaderGuard>(dataSource, featureId.m_mwmId);
113+
guard = my::make_unique<FeaturesLoaderGuard>(dataSource, featureId.m_mwmId);
116114
mwmId = featureId.m_mwmId;
117115
}
118116

@@ -224,12 +222,12 @@ void AvailabilityFilter::GetFeaturesFromCache(search::Results const & results,
224222
std::sort(features.begin(), features.end());
225223

226224
MwmSet::MwmId mwmId;
227-
std::unique_ptr<LoaderGuard> guard;
225+
std::unique_ptr<FeaturesLoaderGuard> guard;
228226
for (auto const & featureId : features)
229227
{
230228
if (mwmId != featureId.m_mwmId)
231229
{
232-
guard = my::make_unique<LoaderGuard>(GetDelegate().GetDataSource(), featureId.m_mwmId);
230+
guard = my::make_unique<FeaturesLoaderGuard>(GetDelegate().GetDataSource(), featureId.m_mwmId);
233231
mwmId = featureId.m_mwmId;
234232
}
235233

map/discovery/discovery_manager.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ std::string Manager::GetCityViatorId(m2::PointD const & point) const
7171
if (!fid.IsValid())
7272
return {};
7373

74-
EditableFeaturesLoaderGuard const guard(m_dataSource, fid.m_mwmId);
74+
FeaturesLoaderGuard const guard(m_dataSource, fid.m_mwmId);
7575
FeatureType ft;
7676
if (!guard.GetFeatureByIndex(fid.m_index, ft))
7777
{

map/framework.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -749,7 +749,7 @@ void Framework::FillFeatureInfo(FeatureID const & fid, place_page::Info & info)
749749
return;
750750
}
751751

752-
EditableFeaturesLoaderGuard const guard(m_model.GetDataSource(), fid.m_mwmId);
752+
FeaturesLoaderGuard const guard(m_model.GetDataSource(), fid.m_mwmId);
753753
FeatureType ft;
754754
if (!guard.GetFeatureByIndex(fid.m_index, ft))
755755
{
@@ -2085,7 +2085,7 @@ bool Framework::GetFeatureByID(FeatureID const & fid, FeatureType & ft) const
20852085
{
20862086
ASSERT(fid.IsValid(), ());
20872087

2088-
EditableFeaturesLoaderGuard guard(m_model.GetDataSource(), fid.m_mwmId);
2088+
FeaturesLoaderGuard guard(m_model.GetDataSource(), fid.m_mwmId);
20892089
if (!guard.GetFeatureByIndex(fid.m_index, ft))
20902090
return false;
20912091

@@ -2604,7 +2604,7 @@ vector<m2::TriangleD> Framework::GetSelectedFeatureTriangles() const
26042604
if (!m_selectedFeature.IsValid())
26052605
return triangles;
26062606

2607-
EditableFeaturesLoaderGuard const guard(m_model.GetDataSource(), m_selectedFeature.m_mwmId);
2607+
FeaturesLoaderGuard const guard(m_model.GetDataSource(), m_selectedFeature.m_mwmId);
26082608
FeatureType ft;
26092609
if (!guard.GetFeatureByIndex(m_selectedFeature.m_index, ft))
26102610
return triangles;
@@ -2741,7 +2741,7 @@ namespace
27412741
WARN_UNUSED_RESULT bool LocalizeStreet(DataSource const & dataSource, FeatureID const & fid,
27422742
osm::LocalizedStreet & result)
27432743
{
2744-
EditableFeaturesLoaderGuard g(dataSource, fid.m_mwmId);
2744+
FeaturesLoaderGuard g(dataSource, fid.m_mwmId);
27452745
FeatureType ft;
27462746
if (!g.GetFeatureByIndex(fid.m_index, ft))
27472747
return false;
@@ -2858,7 +2858,7 @@ void SetHostingBuildingAddress(FeatureID const & hostingBuildingFid, DataSource
28582858

28592859
FeatureType hostingBuildingFeature;
28602860

2861-
EditableFeaturesLoaderGuard g(dataSource, hostingBuildingFid.m_mwmId);
2861+
FeaturesLoaderGuard g(dataSource, hostingBuildingFid.m_mwmId);
28622862
if (!g.GetFeatureByIndex(hostingBuildingFid.m_index, hostingBuildingFeature))
28632863
return;
28642864

@@ -2952,7 +2952,7 @@ osm::Editor::SaveResult Framework::SaveEditedMapObject(osm::EditableMapObject em
29522952
{
29532953
auto const isCreatedFeature = editor.IsCreatedFeature(emo.GetID());
29542954

2955-
EditableFeaturesLoaderGuard g(m_model.GetDataSource(), emo.GetID().m_mwmId);
2955+
FeaturesLoaderGuard g(m_model.GetDataSource(), emo.GetID().m_mwmId);
29562956
FeatureType originalFeature;
29572957
if (!isCreatedFeature)
29582958
{

openlr/openlr_decoder.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ struct alignas(kCacheLineSize) Stats
8181

8282
bool IsRealVertex(m2::PointD const & p, FeatureID const & fid, DataSource const & dataSource)
8383
{
84-
FrozenFeaturesLoaderGuard g(dataSource, fid.m_mwmId);
84+
FeaturesLoaderGuard g(dataSource, fid.m_mwmId);
8585
auto const ft = g.GetOriginalFeatureByIndex(fid.m_index);
8686
bool matched = false;
8787
ft->ForEachPoint(

openlr/openlr_tests/decoded_path_test.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ void WithRoad(vector<m2::PointD> const & points, Func && fn)
140140
MwmSet::MwmHandle mwmHandle = dataSource.GetMwmHandleById(regResult.first);
141141
TEST(mwmHandle.IsAlive(), ());
142142

143-
FrozenFeaturesLoaderGuard const guard(dataSource, regResult.first);
143+
FeaturesLoaderGuard const guard(dataSource, regResult.first);
144144
FeatureType road;
145145
TEST(guard.GetFeatureByIndex(0, road), ());
146146
road.ParseEverything();

openlr/road_info_getter.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ RoadInfoGetter::RoadInfo RoadInfoGetter::Get(FeatureID const & fid)
2121
if (it != end(m_cache))
2222
return it->second;
2323

24-
FrozenFeaturesLoaderGuard g(m_dataSource, fid.m_mwmId);
24+
FeaturesLoaderGuard g(m_dataSource, fid.m_mwmId);
2525
FeatureType ft;
2626
CHECK(g.GetOriginalFeatureByIndex(fid.m_index, ft), ());
2727

routing/bicycle_directions.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -211,10 +211,10 @@ bool BicycleDirectionsEngine::Generate(IndexRoadGraph const & graph, vector<Junc
211211
return true;
212212
}
213213

214-
DataSource::FeaturesLoaderGuard & BicycleDirectionsEngine::GetLoader(MwmSet::MwmId const & id)
214+
FeaturesLoaderGuard & BicycleDirectionsEngine::GetLoader(MwmSet::MwmId const & id)
215215
{
216216
if (!m_loader || id != m_loader->GetId())
217-
m_loader = make_unique<EditableFeaturesLoaderGuard>(m_dataSource, id);
217+
m_loader = make_unique<FeaturesLoaderGuard>(m_dataSource, id);
218218
return *m_loader;
219219
}
220220

routing/bicycle_directions.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class BicycleDirectionsEngine : public IDirectionsEngine
3939
vector<Segment> & segments) override;
4040

4141
private:
42-
DataSource::FeaturesLoaderGuard & GetLoader(MwmSet::MwmId const & id);
42+
FeaturesLoaderGuard & GetLoader(MwmSet::MwmId const & id);
4343
void LoadPathAttributes(FeatureID const & featureId, LoadedPathSegment & pathSegment);
4444
void GetSegmentRangeAndAdjacentEdges(IRoadGraph::TEdgeVector const & outgoingEdges,
4545
Edge const & inEdge, uint32_t startSegId, uint32_t endSegId,
@@ -60,6 +60,6 @@ class BicycleDirectionsEngine : public IDirectionsEngine
6060
TUnpackedPathSegments m_pathSegments;
6161
DataSource const & m_dataSource;
6262
std::shared_ptr<NumMwmIds> m_numMwmIds;
63-
std::unique_ptr<DataSource::FeaturesLoaderGuard> m_loader;
63+
std::unique_ptr<FeaturesLoaderGuard> m_loader;
6464
};
6565
} // namespace routing

routing/features_road_graph.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ void FeaturesRoadGraph::FindClosestEdges(m2::PointD const & point, uint32_t coun
205205
void FeaturesRoadGraph::GetFeatureTypes(FeatureID const & featureId, feature::TypesHolder & types) const
206206
{
207207
FeatureType ft;
208-
EditableFeaturesLoaderGuard loader(m_dataSource, featureId.m_mwmId);
208+
FeaturesLoaderGuard loader(m_dataSource, featureId.m_mwmId);
209209
if (!loader.GetFeatureByIndex(featureId.m_index, ft))
210210
return;
211211

@@ -306,7 +306,7 @@ IRoadGraph::RoadInfo const & FeaturesRoadGraph::GetCachedRoadInfo(FeatureID cons
306306

307307
FeatureType ft;
308308

309-
EditableFeaturesLoaderGuard loader(m_dataSource, featureId.m_mwmId);
309+
FeaturesLoaderGuard loader(m_dataSource, featureId.m_mwmId);
310310

311311
if (!loader.GetFeatureByIndex(featureId.m_index, ft))
312312
return ri;

routing/geometry.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class GeometryLoaderImpl final : public GeometryLoader
3333

3434
private:
3535
shared_ptr<VehicleModelInterface> m_vehicleModel;
36-
EditableFeaturesLoaderGuard m_guard;
36+
FeaturesLoaderGuard m_guard;
3737
string const m_country;
3838
feature::AltitudeLoader m_altitudeLoader;
3939
bool const m_loadAltitudes;

routing/index_road_graph.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ void IndexRoadGraph::GetEdgeTypes(Edge const & edge, feature::TypesHolder & type
6060

6161
FeatureID const featureId = edge.GetFeatureId();
6262
FeatureType ft;
63-
EditableFeaturesLoaderGuard loader(m_dataSource, featureId.m_mwmId);
63+
FeaturesLoaderGuard loader(m_dataSource, featureId.m_mwmId);
6464
if (!loader.GetFeatureByIndex(featureId.m_index, ft))
6565
{
6666
LOG(LERROR, ("Can't load types for feature", featureId));

search/downloader_search_callback.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ void DownloaderSearchCallback::operator()(search::Results const & results)
6363
if (result.GetResultType() != search::Result::Type::LatLon)
6464
{
6565
FeatureID const & fid = result.GetFeatureID();
66-
EditableFeaturesLoaderGuard loader(m_dataSource, fid.m_mwmId);
66+
FeaturesLoaderGuard loader(m_dataSource, fid.m_mwmId);
6767
FeatureType ft;
6868
if (!loader.GetFeatureByIndex(fid.m_index, ft))
6969
{

search/editor_delegate.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ MwmSet::MwmId EditorDelegate::GetMwmIdByMapName(string const & name) const
1818

1919
unique_ptr<FeatureType> EditorDelegate::GetOriginalFeature(FeatureID const & fid) const
2020
{
21-
EditableFeaturesLoaderGuard guard(m_dataSource, fid.m_mwmId);
21+
FeaturesLoaderGuard guard(m_dataSource, fid.m_mwmId);
2222
auto feature = guard.GetOriginalFeatureByIndex(fid.m_index);
2323
if (feature)
2424
feature->ParseEverything();

search/feature_loader.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ bool FeatureLoader::Load(FeatureID const & id, FeatureType & ft)
1616

1717
auto const & mwmId = id.m_mwmId;
1818
if (!m_guard || m_guard->GetId() != mwmId)
19-
m_guard = my::make_unique<EditableFeaturesLoaderGuard>(m_dataSource, mwmId);
19+
m_guard = my::make_unique<FeaturesLoaderGuard>(m_dataSource, mwmId);
2020
return m_guard->GetFeatureByIndex(id.m_index, ft);
2121
}
2222

search/feature_loader.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class FeatureLoader
3232

3333
private:
3434
DataSource const & m_dataSource;
35-
std::unique_ptr<DataSource::FeaturesLoaderGuard> m_guard;
35+
std::unique_ptr<FeaturesLoaderGuard> m_guard;
3636

3737
ThreadChecker m_checker;
3838
};

0 commit comments

Comments
 (0)