Skip to content

Commit 11deb9c

Browse files
committed
Move dependency manager into osmdata
1 parent 4db81e3 commit 11deb9c

File tree

6 files changed

+62
-42
lines changed

6 files changed

+62
-42
lines changed

src/osm2pgsql.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ int main(int argc, char *argv[])
7373
need_dependencies ? new full_dependency_manager_t{middle}
7474
: new dependency_manager_t{});
7575

76-
osmdata_t osmdata{dependency_manager.get(), middle, outputs};
76+
osmdata_t osmdata{std::move(dependency_manager), middle, outputs};
7777

7878
fmt::print(stderr, "Using projection SRS {} ({})\n",
7979
options.projection->target_srs(),

src/osmdata.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
#include "output.hpp"
1919
#include "util.hpp"
2020

21-
osmdata_t::osmdata_t(dependency_manager_t *dependency_manager,
21+
osmdata_t::osmdata_t(std::unique_ptr<dependency_manager_t> dependency_manager,
2222
std::shared_ptr<middle_t> mid,
2323
std::vector<std::shared_ptr<output_t>> const &outs)
24-
: m_dependency_manager(dependency_manager), m_mid(mid), m_outs(outs)
24+
: m_dependency_manager(std::move(dependency_manager)), m_mid(mid), m_outs(outs)
2525
{
26-
assert(dependency_manager != nullptr);
26+
assert(m_dependency_manager);
2727
assert(m_mid);
2828
assert(!m_outs.empty());
2929

src/osmdata.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ struct slim_middle_t;
1414
class osmdata_t
1515
{
1616
public:
17-
osmdata_t(dependency_manager_t *dependency_manager,
17+
osmdata_t(std::unique_ptr<dependency_manager_t> dependency_manager,
1818
std::shared_ptr<middle_t> mid,
1919
std::vector<std::shared_ptr<output_t>> const &outs);
2020

@@ -37,7 +37,7 @@ class osmdata_t
3737
private:
3838
slim_middle_t &slim_middle() const noexcept;
3939

40-
dependency_manager_t *m_dependency_manager;
40+
std::unique_ptr<dependency_manager_t> m_dependency_manager;
4141
std::shared_ptr<middle_t> m_mid;
4242
std::vector<std::shared_ptr<output_t>> m_outs;
4343
bool m_with_extra_attrs;

tests/common-import.hpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@
2222
namespace testing {
2323

2424
inline void parse_file(options_t const &options,
25-
dependency_manager_t *dependency_manager,
25+
std::unique_ptr<dependency_manager_t> dependency_manager,
2626
std::shared_ptr<middle_t> const &mid,
2727
std::vector<std::shared_ptr<output_t>> const &outs,
2828
char const *filename = nullptr)
2929
{
30-
osmdata_t osmdata{dependency_manager, mid, outs};
30+
osmdata_t osmdata{std::move(dependency_manager), mid, outs};
3131

3232
osmdata.start();
3333
parse_osmium_t parser{options.bbox, options.append, &osmdata};
@@ -91,7 +91,7 @@ class import_t
9191
need_dependencies ? new full_dependency_manager_t{middle}
9292
: new dependency_manager_t{});
9393

94-
osmdata_t osmdata{dependency_manager.get(), middle, outputs};
94+
osmdata_t osmdata{std::move(dependency_manager), middle, outputs};
9595

9696
osmdata.start();
9797

@@ -112,9 +112,11 @@ class import_t
112112
auto const outputs =
113113
output_t::create_outputs(middle->get_query_instance(), options);
114114

115-
full_dependency_manager_t dependency_manager{middle};
115+
auto dependency_manager = std::unique_ptr<dependency_manager_t>(
116+
new full_dependency_manager_t{middle});
116117

117-
parse_file(options, &dependency_manager, middle, outputs, file);
118+
parse_file(options, std::move(dependency_manager), middle, outputs,
119+
file);
118120
}
119121

120122
void run_file_multi_output(options_t options,
@@ -143,10 +145,11 @@ class import_t
143145
std::make_shared<db_copy_thread_t>(
144146
options.database_options.conninfo()));
145147

146-
full_dependency_manager_t dependency_manager{mid_pgsql};
148+
auto dependency_manager = std::unique_ptr<dependency_manager_t>(
149+
new full_dependency_manager_t{mid_pgsql});
147150

148-
parse_file(options, &dependency_manager, mid_pgsql, {out_test},
149-
file);
151+
parse_file(options, std::move(dependency_manager), mid_pgsql,
152+
{out_test}, file);
150153
}
151154

152155
pg::conn_t connect() { return m_db.connect(); }

tests/test-output-multi-point-multi-table.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,11 @@ TEST_CASE("parse point")
4545
outputs.push_back(out_test);
4646
}
4747

48-
dependency_manager_t dependency_manager{};
48+
auto dependency_manager =
49+
std::unique_ptr<dependency_manager_t>(new dependency_manager_t{});
4950

50-
testing::parse_file(options, &dependency_manager, mid_pgsql, outputs,
51-
"liechtenstein-2013-08-03.osm.pbf");
51+
testing::parse_file(options, std::move(dependency_manager), mid_pgsql,
52+
outputs, "liechtenstein-2013-08-03.osm.pbf");
5253

5354
auto conn = db.db().connect();
5455

tests/test-parse-osmium.cpp

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -92,19 +92,29 @@ struct counting_output_t : public output_null_t
9292
unsigned sum_members = 0;
9393
};
9494

95+
struct counts_t {
96+
std::size_t nodes_changed = 0;
97+
std::size_t ways_changed = 0;
98+
std::size_t relations_changed = 0;
99+
};
100+
95101
/**
96102
* This pseudo-dependency manager is just used for testing. It counts how
97103
* often the *_changed() member functions are called.
98104
*/
99-
struct counting_dependency_manager_t : public dependency_manager_t
105+
class counting_dependency_manager_t : public dependency_manager_t
100106
{
101-
void node_changed(osmid_t) override { ++nodes_changed; }
102-
void way_changed(osmid_t) override { ++ways_changed; }
103-
void relation_changed(osmid_t) override { ++relations_changed; }
107+
public:
108+
counting_dependency_manager_t(std::shared_ptr<counts_t> counts)
109+
: m_counts(std::move(counts))
110+
{}
104111

105-
std::size_t nodes_changed = 0;
106-
std::size_t ways_changed = 0;
107-
std::size_t relations_changed = 0;
112+
void node_changed(osmid_t) override { ++m_counts->nodes_changed; }
113+
void way_changed(osmid_t) override { ++m_counts->ways_changed; }
114+
void relation_changed(osmid_t) override { ++m_counts->relations_changed; }
115+
116+
private:
117+
std::shared_ptr<counts_t> m_counts;
108118
};
109119

110120
TEST_CASE("parse xml file")
@@ -114,10 +124,12 @@ TEST_CASE("parse xml file")
114124
auto const middle = std::make_shared<counting_slim_middle_t>();
115125
std::shared_ptr<output_t> output{new counting_output_t{options}};
116126

117-
counting_dependency_manager_t dependency_manager;
127+
auto counts = std::make_shared<counts_t>();
128+
auto dependency_manager = std::unique_ptr<dependency_manager_t>(
129+
new counting_dependency_manager_t{counts});
118130

119-
testing::parse_file(options, &dependency_manager, middle, {output},
120-
"test_multipolygon.osm");
131+
testing::parse_file(options, std::move(dependency_manager), middle,
132+
{output}, "test_multipolygon.osm");
121133

122134
auto const *out_test = static_cast<counting_output_t *>(output.get());
123135
REQUIRE(out_test->sum_ids == 4728);
@@ -141,9 +153,9 @@ TEST_CASE("parse xml file")
141153
REQUIRE(mid_test->relation.added == 40);
142154
REQUIRE(mid_test->relation.deleted == 0);
143155

144-
REQUIRE(dependency_manager.nodes_changed == 0);
145-
REQUIRE(dependency_manager.ways_changed == 0);
146-
REQUIRE(dependency_manager.relations_changed == 0);
156+
REQUIRE(counts->nodes_changed == 0);
157+
REQUIRE(counts->ways_changed == 0);
158+
REQUIRE(counts->relations_changed == 0);
147159
}
148160

149161
TEST_CASE("parse diff file")
@@ -153,10 +165,12 @@ TEST_CASE("parse diff file")
153165
auto const middle = std::make_shared<counting_slim_middle_t>();
154166
std::shared_ptr<output_t> output{new counting_output_t{options}};
155167

156-
counting_dependency_manager_t dependency_manager;
168+
auto counts = std::make_shared<counts_t>();
169+
auto dependency_manager = std::unique_ptr<dependency_manager_t>(
170+
new counting_dependency_manager_t{counts});
157171

158-
testing::parse_file(options, &dependency_manager, middle, {output},
159-
"008-ch.osc.gz");
172+
testing::parse_file(options, std::move(dependency_manager), middle,
173+
{output}, "008-ch.osc.gz");
160174

161175
auto const *out_test = static_cast<counting_output_t *>(output.get());
162176
REQUIRE(out_test->node.added == 0);
@@ -177,9 +191,9 @@ TEST_CASE("parse diff file")
177191
REQUIRE(mid_test->relation.added == 11);
178192
REQUIRE(mid_test->relation.deleted == 12);
179193

180-
REQUIRE(dependency_manager.nodes_changed == 1176);
181-
REQUIRE(dependency_manager.ways_changed == 161);
182-
REQUIRE(dependency_manager.relations_changed == 11);
194+
REQUIRE(counts->nodes_changed == 1176);
195+
REQUIRE(counts->ways_changed == 161);
196+
REQUIRE(counts->relations_changed == 11);
183197
}
184198

185199
TEST_CASE("parse xml file with extra args")
@@ -190,10 +204,12 @@ TEST_CASE("parse xml file with extra args")
190204
auto const middle = std::make_shared<counting_slim_middle_t>();
191205
std::shared_ptr<output_t> output{new counting_output_t{options}};
192206

193-
counting_dependency_manager_t dependency_manager;
207+
auto counts = std::make_shared<counts_t>();
208+
auto dependency_manager = std::unique_ptr<dependency_manager_t>(
209+
new counting_dependency_manager_t{counts});
194210

195-
testing::parse_file(options, &dependency_manager, middle, {output},
196-
"test_multipolygon.osm");
211+
testing::parse_file(options, std::move(dependency_manager), middle,
212+
{output}, "test_multipolygon.osm");
197213

198214
auto const *out_test = static_cast<counting_output_t *>(output.get());
199215
REQUIRE(out_test->sum_ids == 73514);
@@ -217,7 +233,7 @@ TEST_CASE("parse xml file with extra args")
217233
REQUIRE(mid_test->relation.added == 40);
218234
REQUIRE(mid_test->relation.deleted == 0);
219235

220-
REQUIRE(dependency_manager.nodes_changed == 0);
221-
REQUIRE(dependency_manager.ways_changed == 0);
222-
REQUIRE(dependency_manager.relations_changed == 0);
236+
REQUIRE(counts->nodes_changed == 0);
237+
REQUIRE(counts->ways_changed == 0);
238+
REQUIRE(counts->relations_changed == 0);
223239
}

0 commit comments

Comments
 (0)