Skip to content

Commit 8d06d49

Browse files
authored
Merge pull request #1379 from joto/middle-api-pointer-buffer
Change middle API: Use pointers instead of references for out params
2 parents 8674b42 + c096abc commit 8d06d49

File tree

11 files changed

+66
-52
lines changed

11 files changed

+66
-52
lines changed

src/geometry-processor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ size_t relation_helper::set(osmium::Relation const &rel,
8888
roles.clear();
8989

9090
// get the nodes and roles of the ways
91-
return mid->rel_way_members_get(rel, &roles, data);
91+
return mid->rel_way_members_get(rel, &roles, &data);
9292
}
9393

9494
void relation_helper::add_way_locations(middle_query_t const *mid)

src/middle-pgsql.cpp

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ inline char const *decode_upto(char const *src, char *dst)
138138
}
139139

140140
template <typename T>
141-
void pgsql_parse_tags(char const *string, osmium::memory::Buffer &buffer,
141+
void pgsql_parse_tags(char const *string, osmium::memory::Buffer *buffer,
142142
T &obuilder)
143143
{
144144
if (*string++ != '{') {
@@ -147,7 +147,7 @@ void pgsql_parse_tags(char const *string, osmium::memory::Buffer &buffer,
147147

148148
char key[1024];
149149
char val[1024];
150-
osmium::builder::TagListBuilder builder{buffer, &obuilder};
150+
osmium::builder::TagListBuilder builder{*buffer, &obuilder};
151151

152152
while (*string != '}') {
153153
string = decode_upto(string, key);
@@ -162,15 +162,15 @@ void pgsql_parse_tags(char const *string, osmium::memory::Buffer &buffer,
162162
}
163163
}
164164

165-
void pgsql_parse_members(char const *string, osmium::memory::Buffer &buffer,
165+
void pgsql_parse_members(char const *string, osmium::memory::Buffer *buffer,
166166
osmium::builder::RelationBuilder &obuilder)
167167
{
168168
if (*string++ != '{') {
169169
return;
170170
}
171171

172172
char role[1024];
173-
osmium::builder::RelationMemberListBuilder builder{buffer, &obuilder};
173+
osmium::builder::RelationMemberListBuilder builder{*buffer, &obuilder};
174174

175175
while (*string != '}') {
176176
char type = string[0];
@@ -186,11 +186,11 @@ void pgsql_parse_members(char const *string, osmium::memory::Buffer &buffer,
186186
}
187187
}
188188

189-
void pgsql_parse_nodes(char const *string, osmium::memory::Buffer &buffer,
189+
void pgsql_parse_nodes(char const *string, osmium::memory::Buffer *buffer,
190190
osmium::builder::WayBuilder &builder)
191191
{
192192
if (*string++ == '{') {
193-
osmium::builder::WayNodeListBuilder wnl_builder{buffer, &builder};
193+
osmium::builder::WayNodeListBuilder wnl_builder{*buffer, &builder};
194194
while (*string != '}') {
195195
char *ptr = nullptr;
196196
wnl_builder.add_node_ref(std::strtoll(string, &ptr, 10));
@@ -394,32 +394,36 @@ void middle_pgsql_t::way_set(osmium::Way const &way)
394394
}
395395

396396
bool middle_query_pgsql_t::way_get(osmid_t id,
397-
osmium::memory::Buffer &buffer) const
397+
osmium::memory::Buffer *buffer) const
398398
{
399+
assert(buffer);
400+
399401
auto const res = m_sql_conn.exec_prepared("get_way", id);
400402

401403
if (res.num_tuples() != 1) {
402404
return false;
403405
}
404406

405407
{
406-
osmium::builder::WayBuilder builder{buffer};
408+
osmium::builder::WayBuilder builder{*buffer};
407409
builder.set_id(id);
408410

409411
pgsql_parse_nodes(res.get_value(0, 0), buffer, builder);
410412
pgsql_parse_tags(res.get_value(0, 1), buffer, builder);
411413
}
412414

413-
buffer.commit();
415+
buffer->commit();
414416

415417
return true;
416418
}
417419

418420
size_t
419421
middle_query_pgsql_t::rel_way_members_get(osmium::Relation const &rel,
420422
rolelist_t *roles,
421-
osmium::memory::Buffer &buffer) const
423+
osmium::memory::Buffer *buffer) const
422424
{
425+
assert(buffer);
426+
423427
util::string_id_list_t id_list;
424428

425429
for (auto const &m : rel.members()) {
@@ -445,14 +449,14 @@ middle_query_pgsql_t::rel_way_members_get(osmium::Relation const &rel,
445449
for (int j = 0; j < res.num_tuples(); ++j) {
446450
if (m.ref() == wayidspg[j]) {
447451
{
448-
osmium::builder::WayBuilder builder{buffer};
452+
osmium::builder::WayBuilder builder{*buffer};
449453
builder.set_id(m.ref());
450454

451455
pgsql_parse_nodes(res.get_value(j, 1), buffer, builder);
452456
pgsql_parse_tags(res.get_value(j, 2), buffer, builder);
453457
}
454458

455-
buffer.commit();
459+
buffer->commit();
456460
if (roles) {
457461
roles->emplace_back(m.role());
458462
}
@@ -516,8 +520,10 @@ void middle_pgsql_t::relation_set(osmium::Relation const &rel)
516520
}
517521

518522
bool middle_query_pgsql_t::relation_get(osmid_t id,
519-
osmium::memory::Buffer &buffer) const
523+
osmium::memory::Buffer *buffer) const
520524
{
525+
assert(buffer);
526+
521527
auto const res = m_sql_conn.exec_prepared("get_rel", id);
522528
// Fields are: members, tags, member_count */
523529
//
@@ -526,14 +532,14 @@ bool middle_query_pgsql_t::relation_get(osmid_t id,
526532
}
527533

528534
{
529-
osmium::builder::RelationBuilder builder{buffer};
535+
osmium::builder::RelationBuilder builder{*buffer};
530536
builder.set_id(id);
531537

532538
pgsql_parse_members(res.get_value(0, 0), buffer, builder);
533539
pgsql_parse_tags(res.get_value(0, 1), buffer, builder);
534540
}
535541

536-
buffer.commit();
542+
buffer->commit();
537543

538544
return true;
539545
}

src/middle-pgsql.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,13 @@ class middle_query_pgsql_t : public middle_query_t
3030

3131
size_t nodes_get_list(osmium::WayNodeList *nodes) const override;
3232

33-
bool way_get(osmid_t id, osmium::memory::Buffer &buffer) const override;
33+
bool way_get(osmid_t id, osmium::memory::Buffer *buffer) const override;
34+
3435
size_t rel_way_members_get(osmium::Relation const &rel, rolelist_t *roles,
35-
osmium::memory::Buffer &buffer) const override;
36+
osmium::memory::Buffer *buffer) const override;
3637

3738
bool relation_get(osmid_t id,
38-
osmium::memory::Buffer &buffer) const override;
39+
osmium::memory::Buffer *buffer) const override;
3940

4041
void exec_sql(std::string const &sql_cmd) const;
4142

src/middle-ram.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,25 +64,29 @@ size_t middle_ram_t::nodes_get_list(osmium::WayNodeList *nodes) const
6464
return count;
6565
}
6666

67-
bool middle_ram_t::way_get(osmid_t id, osmium::memory::Buffer &buffer) const
67+
bool middle_ram_t::way_get(osmid_t id, osmium::memory::Buffer *buffer) const
6868
{
69+
assert(buffer);
70+
6971
auto const *ele = m_ways.get(id);
7072

7173
if (!ele) {
7274
return false;
7375
}
7476

7577
using namespace osmium::builder::attr;
76-
osmium::builder::add_way(buffer, _id(id), _tags(ele->tags),
78+
osmium::builder::add_way(*buffer, _id(id), _tags(ele->tags),
7779
_nodes(ele->ndids));
7880

7981
return true;
8082
}
8183

8284
size_t middle_ram_t::rel_way_members_get(osmium::Relation const &rel,
8385
rolelist_t *roles,
84-
osmium::memory::Buffer &buffer) const
86+
osmium::memory::Buffer *buffer) const
8587
{
88+
assert(buffer);
89+
8690
size_t count = 0;
8791
for (auto const &m : rel.members()) {
8892
if (m.type() == osmium::item_type::way && way_get(m.ref(), buffer)) {
@@ -97,16 +101,18 @@ size_t middle_ram_t::rel_way_members_get(osmium::Relation const &rel,
97101
}
98102

99103
bool middle_ram_t::relation_get(osmid_t id,
100-
osmium::memory::Buffer &buffer) const
104+
osmium::memory::Buffer *buffer) const
101105
{
106+
assert(buffer);
107+
102108
auto const *ele = m_rels.get(id);
103109

104110
if (!ele) {
105111
return false;
106112
}
107113

108114
using namespace osmium::builder::attr;
109-
osmium::builder::add_relation(buffer, _id(id),
115+
osmium::builder::add_relation(*buffer, _id(id),
110116
_members(ele->members.for_builder()),
111117
_tags(ele->tags));
112118

src/middle-ram.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,13 @@ struct middle_ram_t : public middle_t, public middle_query_t
103103

104104
size_t nodes_get_list(osmium::WayNodeList *nodes) const override;
105105

106-
bool way_get(osmid_t id, osmium::memory::Buffer &buffer) const override;
106+
bool way_get(osmid_t id, osmium::memory::Buffer *buffer) const override;
107+
107108
size_t rel_way_members_get(osmium::Relation const &rel, rolelist_t *roles,
108-
osmium::memory::Buffer &buffer) const override;
109+
osmium::memory::Buffer *buffer) const override;
109110

110111
bool relation_get(osmid_t id,
111-
osmium::memory::Buffer &buffer) const override;
112+
osmium::memory::Buffer *buffer) const override;
112113

113114
std::shared_ptr<middle_query_t> get_query_instance() override;
114115

src/middle.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ struct middle_query_t : std::enable_shared_from_this<middle_query_t>
3535
*
3636
* \return true if the way was retrieved
3737
*/
38-
virtual bool way_get(osmid_t id, osmium::memory::Buffer &buffer) const = 0;
38+
virtual bool way_get(osmid_t id, osmium::memory::Buffer *buffer) const = 0;
3939

4040
/**
4141
* Retrieves the way members of a relation and stores them in
@@ -47,7 +47,7 @@ struct middle_query_t : std::enable_shared_from_this<middle_query_t>
4747
*/
4848
virtual size_t
4949
rel_way_members_get(osmium::Relation const &rel, rolelist_t *roles,
50-
osmium::memory::Buffer &buffer) const = 0;
50+
osmium::memory::Buffer *buffer) const = 0;
5151

5252
/**
5353
* Retrives a single relation from the relation storage
@@ -59,7 +59,7 @@ struct middle_query_t : std::enable_shared_from_this<middle_query_t>
5959
* \return true if the relation was retrieved
6060
*/
6161
virtual bool relation_get(osmid_t id,
62-
osmium::memory::Buffer &buffer) const = 0;
62+
osmium::memory::Buffer *buffer) const = 0;
6363
};
6464

6565
inline middle_query_t::~middle_query_t() = default;

src/output-flex.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -992,7 +992,7 @@ output_flex_t::run_transform(geom::osmium_builder_t *builder,
992992
{
993993
m_buffer.clear();
994994
auto const num_ways =
995-
m_mid->rel_way_members_get(relation, nullptr, m_buffer);
995+
m_mid->rel_way_members_get(relation, nullptr, &m_buffer);
996996

997997
if (num_ways == 0) {
998998
return {};
@@ -1080,7 +1080,7 @@ void output_flex_t::pending_way(osmid_t id)
10801080
}
10811081

10821082
m_buffer.clear();
1083-
if (!m_mid->way_get(id, m_buffer)) {
1083+
if (!m_mid->way_get(id, &m_buffer)) {
10841084
return;
10851085
}
10861086

@@ -1164,7 +1164,7 @@ void output_flex_t::select_relation_members(osmid_t id)
11641164
return;
11651165
}
11661166

1167-
if (!m_mid->relation_get(id, m_rels_buffer)) {
1167+
if (!m_mid->relation_get(id, &m_rels_buffer)) {
11681168
return;
11691169
}
11701170

@@ -1179,7 +1179,7 @@ void output_flex_t::pending_relation(osmid_t id)
11791179
return;
11801180
}
11811181

1182-
if (!m_mid->relation_get(id, m_rels_buffer)) {
1182+
if (!m_mid->relation_get(id, &m_rels_buffer)) {
11831183
return;
11841184
}
11851185
auto const &relation = m_rels_buffer.get<osmium::Relation>(0);
@@ -1202,7 +1202,7 @@ void output_flex_t::pending_relation_stage1c(osmid_t id)
12021202
return;
12031203
}
12041204

1205-
if (!m_mid->relation_get(id, m_rels_buffer)) {
1205+
if (!m_mid->relation_get(id, &m_rels_buffer)) {
12061206
return;
12071207
}
12081208
auto const &relation = m_rels_buffer.get<osmium::Relation>(0);
@@ -1538,7 +1538,7 @@ void output_flex_t::reprocess_marked()
15381538
m_stage2_way_ids->sort_unique();
15391539
for (osmid_t const id : *m_stage2_way_ids) {
15401540
m_buffer.clear();
1541-
if (!m_mid->way_get(id, m_buffer)) {
1541+
if (!m_mid->way_get(id, &m_buffer)) {
15421542
continue;
15431543
}
15441544
auto &way = m_buffer.get<osmium::Way>(0);

src/output-gazetteer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ bool output_gazetteer_t::process_relation(osmium::Relation const &rel)
182182
/* get the boundary path (ways) */
183183
m_osmium_buffer.clear();
184184
auto const num_ways =
185-
m_mid->rel_way_members_get(rel, nullptr, m_osmium_buffer);
185+
m_mid->rel_way_members_get(rel, nullptr, &m_osmium_buffer);
186186

187187
if (num_ways == 0) {
188188
return false;

src/output-multi.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ void output_multi_t::pending_way(osmid_t id)
6868
{
6969
// Try to fetch the way from the DB
7070
buffer.clear();
71-
if (m_mid->way_get(id, buffer)) {
71+
if (m_mid->way_get(id, &buffer)) {
7272
// Output the way
7373
reprocess_way(&buffer.get<osmium::Way>(0), true);
7474
}
@@ -78,7 +78,7 @@ void output_multi_t::pending_relation(osmid_t id)
7878
{
7979
// Try to fetch the relation from the DB
8080
buffer.clear();
81-
if (m_mid->relation_get(id, buffer)) {
81+
if (m_mid->relation_get(id, &buffer)) {
8282
auto const &rel = buffer.get<osmium::Relation>(0);
8383
process_relation(rel, true);
8484
}

src/output-pgsql.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ void output_pgsql_t::pending_way(osmid_t id)
7171
{
7272
// Try to fetch the way from the DB
7373
buffer.clear();
74-
if (m_mid->way_get(id, buffer)) {
74+
if (m_mid->way_get(id, &buffer)) {
7575
pgsql_delete_way_from_output(id);
7676

7777
taglist_t outtags;
@@ -95,7 +95,7 @@ void output_pgsql_t::pending_relation(osmid_t id)
9595
// we cannot keep a reference to the relation and an autogrow buffer
9696
// might be relocated when more data is added.
9797
rels_buffer.clear();
98-
if (m_mid->relation_get(id, rels_buffer)) {
98+
if (m_mid->relation_get(id, &rels_buffer)) {
9999
pgsql_delete_relation_from_output(id);
100100

101101
auto const &rel = rels_buffer.get<osmium::Relation>(0);
@@ -166,7 +166,7 @@ void output_pgsql_t::pgsql_process_relation(osmium::Relation const &rel)
166166

167167
buffer.clear();
168168
rolelist_t xrole;
169-
auto num_ways = m_mid->rel_way_members_get(rel, &xrole, buffer);
169+
auto num_ways = m_mid->rel_way_members_get(rel, &xrole, &buffer);
170170

171171
if (num_ways == 0) {
172172
return;

0 commit comments

Comments
 (0)