From 7a20db8e4fcab3c1bc7a34be7cf1ce08dd95d9cc Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 14 Mar 2022 14:14:05 +0100 Subject: [PATCH 01/13] Use ptr not ref for mutable param in expire_tiles::merge_and_destroy --- src/expire-tiles.cpp | 14 +++++++------- src/expire-tiles.hpp | 2 +- src/output-flex.cpp | 2 +- src/output-pgsql.cpp | 2 +- tests/test-expire-tiles.cpp | 16 ++++++++-------- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/expire-tiles.cpp b/src/expire-tiles.cpp index 6b51fb8d7..df558f50d 100644 --- a/src/expire-tiles.cpp +++ b/src/expire-tiles.cpp @@ -278,19 +278,19 @@ int expire_tiles::from_result(pg_result_t const &result, osmid_t osm_id) return num_tuples; } -void expire_tiles::merge_and_destroy(expire_tiles &other) +void expire_tiles::merge_and_destroy(expire_tiles *other) { - if (m_map_width != other.m_map_width) { + if (m_map_width != other->m_map_width) { throw std::runtime_error{"Unable to merge tile expiry sets when " "map_width does not match: {} != {}."_format( - m_map_width, other.m_map_width)}; + m_map_width, other->m_map_width)}; } if (m_dirty_tiles.empty()) { - m_dirty_tiles = std::move(other.m_dirty_tiles); + m_dirty_tiles = std::move(other->m_dirty_tiles); } else { - m_dirty_tiles.insert(other.m_dirty_tiles.begin(), - other.m_dirty_tiles.end()); - other.m_dirty_tiles.clear(); + m_dirty_tiles.insert(other->m_dirty_tiles.begin(), + other->m_dirty_tiles.end()); + other->m_dirty_tiles.clear(); } } diff --git a/src/expire-tiles.hpp b/src/expire-tiles.hpp index 536e2fa5b..8e27452c7 100644 --- a/src/expire-tiles.hpp +++ b/src/expire-tiles.hpp @@ -127,7 +127,7 @@ class expire_tiles * merge the list of expired tiles in the other object into this * object, destroying the list in the other object. */ - void merge_and_destroy(expire_tiles &other); + void merge_and_destroy(expire_tiles *other); private: diff --git a/src/output-flex.cpp b/src/output-flex.cpp index 30c066fd4..cd49c7bea 100644 --- a/src/output-flex.cpp +++ b/src/output-flex.cpp @@ -1802,6 +1802,6 @@ void output_flex_t::merge_expire_trees(output_t *other) { auto *opgsql = dynamic_cast(other); if (opgsql) { - m_expire.merge_and_destroy(opgsql->m_expire); + m_expire.merge_and_destroy(&opgsql->m_expire); } } diff --git a/src/output-pgsql.cpp b/src/output-pgsql.cpp index 966b3175f..f68900ee7 100644 --- a/src/output-pgsql.cpp +++ b/src/output-pgsql.cpp @@ -494,6 +494,6 @@ void output_pgsql_t::merge_expire_trees(output_t *other) { auto *const opgsql = dynamic_cast(other); if (opgsql) { - m_expire.merge_and_destroy(opgsql->m_expire); + m_expire.merge_and_destroy(&opgsql->m_expire); } } diff --git a/tests/test-expire-tiles.cpp b/tests/test-expire-tiles.cpp index accf1219f..cd92ad56c 100644 --- a/tests/test-expire-tiles.cpp +++ b/tests/test-expire-tiles.cpp @@ -231,8 +231,8 @@ TEST_CASE("merge expire sets", "[NoDB]") auto check_set2 = tile_output_set::generate_random(zoom, 100); check_set2.expire_centroids(&et2); - et.merge_and_destroy(et1); - et.merge_and_destroy(et2); + et.merge_and_destroy(&et1); + et.merge_and_destroy(&et2); tile_output_set check_set; check_set += check_set1; @@ -263,8 +263,8 @@ TEST_CASE("merge identical expire sets", "[NoDB]") check_set.expire_centroids(&et1); check_set.expire_centroids(&et2); - et.merge_and_destroy(et1); - et.merge_and_destroy(et2); + et.merge_and_destroy(&et1); + et.merge_and_destroy(&et2); tile_output_set set; et.output_and_destroy(set, zoom); @@ -295,8 +295,8 @@ TEST_CASE("merge overlapping expire sets", "[NoDB]") check_set3.expire_centroids(&et1); check_set3.expire_centroids(&et2); - et.merge_and_destroy(et1); - et.merge_and_destroy(et2); + et.merge_and_destroy(&et1); + et.merge_and_destroy(&et2); tile_output_set check_set; check_set += check_set1; @@ -328,8 +328,8 @@ TEST_CASE("merge with complete flag", "[NoDB]") et1.from_bbox({-10000, -10000, 0, 10000}); et2.from_bbox({0, -10000, 10000, 10000}); - et.merge_and_destroy(et1); - et.merge_and_destroy(et2); + et.merge_and_destroy(&et1); + et.merge_and_destroy(&et2); tile_output_set set; et.output_and_destroy(set, zoom); From afe35beac8c187cfd86ae9c36db08a56530dd97b Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 14 Mar 2022 14:20:52 +0100 Subject: [PATCH 02/13] Use ptr not ref for mutable param of db_copy_thread_t::thread_t --- src/db-copy.cpp | 16 ++++++++-------- src/db-copy.hpp | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/db-copy.cpp b/src/db-copy.cpp index e71bc44c7..88f2852d6 100644 --- a/src/db-copy.cpp +++ b/src/db-copy.cpp @@ -85,7 +85,7 @@ db_copy_thread_t::db_copy_thread_t(std::string const &conninfo) { // conninfo is captured by copy here, because we don't know wether the // reference will still be valid once we get around to running the thread - m_worker = std::thread{thread_t{conninfo, m_shared}}; + m_worker = std::thread{thread_t{conninfo, &m_shared}}; } db_copy_thread_t::~db_copy_thread_t() { finish(); } @@ -119,7 +119,7 @@ void db_copy_thread_t::finish() } } -db_copy_thread_t::thread_t::thread_t(std::string conninfo, shared &shared) +db_copy_thread_t::thread_t::thread_t(std::string conninfo, shared *shared) : m_conninfo(std::move(conninfo)), m_shared(shared) {} @@ -139,13 +139,13 @@ void db_copy_thread_t::thread_t::operator()() while (!done) { std::unique_ptr item; { - std::unique_lock lock{m_shared.queue_mutex}; - m_shared.queue_cond.wait( - lock, [&] { return !m_shared.worker_queue.empty(); }); + std::unique_lock lock{m_shared->queue_mutex}; + m_shared->queue_cond.wait( + lock, [&] { return !m_shared->worker_queue.empty(); }); - item = std::move(m_shared.worker_queue.front()); - m_shared.worker_queue.pop_front(); - m_shared.queue_full_cond.notify_one(); + item = std::move(m_shared->worker_queue.front()); + m_shared->worker_queue.pop_front(); + m_shared->queue_full_cond.notify_one(); } switch (item->type) { diff --git a/src/db-copy.hpp b/src/db-copy.hpp index b1d12bd0f..4400b2a02 100644 --- a/src/db-copy.hpp +++ b/src/db-copy.hpp @@ -275,7 +275,7 @@ class db_copy_thread_t class thread_t { public: - thread_t(std::string conninfo, shared &shared); + thread_t(std::string conninfo, shared *shared); void operator()(); @@ -292,7 +292,7 @@ class db_copy_thread_t std::shared_ptr m_inflight; // These are shared with the db_copy_thread_t in the main program. - shared &m_shared; + shared *m_shared; }; std::thread m_worker; From 8e1026cfe93a0803fee68e39e271b3a24b7dab2b Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 14 Mar 2022 14:35:39 +0100 Subject: [PATCH 03/13] Use ptr not ref for mutable param in gazetteer_style_t::copy_out() --- src/gazetteer-style.cpp | 68 ++++++++++++++++++++-------------------- src/gazetteer-style.hpp | 2 +- src/output-gazetteer.cpp | 6 ++-- 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/gazetteer-style.cpp b/src/gazetteer-style.cpp index b0e893085..230006aaf 100644 --- a/src/gazetteer-style.cpp +++ b/src/gazetteer-style.cpp @@ -458,61 +458,61 @@ void gazetteer_style_t::filter_main_tags(bool is_named, void gazetteer_style_t::copy_out(osmium::OSMObject const &o, std::string const &geom, - copy_mgr_t &buffer) const + copy_mgr_t *buffer) const { for (auto const &tag : m_main) { - buffer.prepare(); + buffer->prepare(); // osm_id - buffer.add_column(o.id()); + buffer->add_column(o.id()); // osm_type char const osm_type[2] = { (char)toupper(osmium::item_type_to_char(o.type())), '\0'}; - buffer.add_column(osm_type); + buffer->add_column(osm_type); // class - buffer.add_column(std::get<0>(tag)); + buffer->add_column(std::get<0>(tag)); // type - buffer.add_column(std::get<1>(tag)); + buffer->add_column(std::get<1>(tag)); // names if (std::get<2>(tag) & SF_MAIN_NAMED_KEY) { DomainMatcher m{std::get<0>(tag)}; - buffer.new_hash(); + buffer->new_hash(); for (auto const &t : o.tags()) { char const *const k = m(t); if (k) { - buffer.add_hash_elem(k, t.value()); + buffer->add_hash_elem(k, t.value()); } } - buffer.finish_hash(); + buffer->finish_hash(); } else { bool first = true; // operator will be ignored on anything but these classes if (m_operator && (std::get<2>(tag) & SF_MAIN_OPERATOR)) { - buffer.new_hash(); - buffer.add_hash_elem("operator", m_operator); + buffer->new_hash(); + buffer->add_hash_elem("operator", m_operator); first = false; } for (auto const &entry : m_names) { if (first) { - buffer.new_hash(); + buffer->new_hash(); first = false; } - buffer.add_hash_elem(entry.first, entry.second); + buffer->add_hash_elem(entry.first, entry.second); } if (first) { - buffer.add_null_column(); + buffer->add_null_column(); } else { - buffer.finish_hash(); + buffer->finish_hash(); } } // admin_level - buffer.add_column(m_admin_level); + buffer->add_column(m_admin_level); // address if (m_address.empty()) { - buffer.add_null_column(); + buffer->add_null_column(); } else { - buffer.new_hash(); + buffer->new_hash(); for (auto const &a : m_address) { if (std::strcmp(a.first, "tiger:county") == 0) { std::string term; @@ -525,46 +525,46 @@ void gazetteer_style_t::copy_out(osmium::OSMObject const &o, term = a.second; } term += " county"; - buffer.add_hash_elem(a.first, term); + buffer->add_hash_elem(a.first, term); } else { - buffer.add_hash_elem(a.first, a.second); + buffer->add_hash_elem(a.first, a.second); } } - buffer.finish_hash(); + buffer->finish_hash(); } // extra tags if (m_extra.empty() && m_metadata_fields.none()) { - buffer.add_null_column(); + buffer->add_null_column(); } else { - buffer.new_hash(); + buffer->new_hash(); for (auto const &entry : m_extra) { - buffer.add_hash_elem(entry.first, entry.second); + buffer->add_hash_elem(entry.first, entry.second); } if (m_metadata_fields.version() && o.version()) { - buffer.add_hstore_num_noescape( + buffer->add_hstore_num_noescape( "osm_version", o.version()); } if (m_metadata_fields.uid() && o.uid()) { - buffer.add_hstore_num_noescape("osm_uid", - o.uid()); + buffer->add_hstore_num_noescape("osm_uid", + o.uid()); } if (m_metadata_fields.user() && o.user() && *(o.user()) != '\0') { - buffer.add_hash_elem("osm_user", o.user()); + buffer->add_hash_elem("osm_user", o.user()); } if (m_metadata_fields.changeset() && o.changeset()) { - buffer.add_hstore_num_noescape( + buffer->add_hstore_num_noescape( "osm_changeset", o.changeset()); } if (m_metadata_fields.timestamp() && o.timestamp()) { std::string timestamp = o.timestamp().to_iso(); - buffer.add_hash_elem_noescape("osm_timestamp", - timestamp.c_str()); + buffer->add_hash_elem_noescape("osm_timestamp", + timestamp.c_str()); } - buffer.finish_hash(); + buffer->finish_hash(); } // add the geometry - encoding it to hex along the way - buffer.add_hex_geom(geom); + buffer->add_hex_geom(geom); - buffer.finish_line(); + buffer->finish_line(); } } diff --git a/src/gazetteer-style.hpp b/src/gazetteer-style.hpp index 444644e44..6a5937063 100644 --- a/src/gazetteer-style.hpp +++ b/src/gazetteer-style.hpp @@ -151,7 +151,7 @@ class gazetteer_style_t void load_style(std::string const &filename); void process_tags(osmium::OSMObject const &o); void copy_out(osmium::OSMObject const &o, std::string const &geom, - copy_mgr_t &buffer) const; + copy_mgr_t *buffer) const; std::string class_list() const; bool has_data() const noexcept { return !m_main.empty(); } diff --git a/src/output-gazetteer.cpp b/src/output-gazetteer.cpp index a0e5b45b4..aaec07146 100644 --- a/src/output-gazetteer.cpp +++ b/src/output-gazetteer.cpp @@ -105,7 +105,7 @@ bool output_gazetteer_t::process_node(osmium::Node const &node) auto const wkb = geom_to_ewkb(geom::transform(geom::create_point(node), *m_proj)); delete_unused_classes('N', node.id()); - m_style.copy_out(node, wkb, m_copy); + m_style.copy_out(node, wkb, &m_copy); return true; } @@ -148,7 +148,7 @@ bool output_gazetteer_t::process_way(osmium::Way *way) } delete_unused_classes('W', way->id()); - m_style.copy_out(*way, geom_to_ewkb(geom), m_copy); + m_style.copy_out(*way, geom_to_ewkb(geom), &m_copy); return true; } @@ -212,7 +212,7 @@ bool output_gazetteer_t::process_relation(osmium::Relation const &rel) } delete_unused_classes('R', rel.id()); - m_style.copy_out(rel, geom_to_ewkb(geom), m_copy); + m_style.copy_out(rel, geom_to_ewkb(geom), &m_copy); return true; } From f48e91410285be773955255c35336e8febba7891 Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 14 Mar 2022 14:46:48 +0100 Subject: [PATCH 04/13] Use ptr not ref for mutable param of various pgsql_parse_* functions --- src/middle-pgsql.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/middle-pgsql.cpp b/src/middle-pgsql.cpp index 3e06722f9..991eeeb99 100644 --- a/src/middle-pgsql.cpp +++ b/src/middle-pgsql.cpp @@ -142,7 +142,7 @@ inline char const *decode_upto(char const *src, char *dst) template void pgsql_parse_tags(char const *string, osmium::memory::Buffer *buffer, - T &obuilder) + T *obuilder) { if (*string++ != '{') { return; @@ -150,7 +150,7 @@ void pgsql_parse_tags(char const *string, osmium::memory::Buffer *buffer, char key[1024]; char val[1024]; - osmium::builder::TagListBuilder builder{*buffer, &obuilder}; + osmium::builder::TagListBuilder builder{*buffer, obuilder}; while (*string != '}') { string = decode_upto(string, key); @@ -166,14 +166,14 @@ void pgsql_parse_tags(char const *string, osmium::memory::Buffer *buffer, } void pgsql_parse_members(char const *string, osmium::memory::Buffer *buffer, - osmium::builder::RelationBuilder &obuilder) + osmium::builder::RelationBuilder *obuilder) { if (*string++ != '{') { return; } char role[1024]; - osmium::builder::RelationMemberListBuilder builder{*buffer, &obuilder}; + osmium::builder::RelationMemberListBuilder builder{*buffer, obuilder}; while (*string != '}') { char type = string[0]; @@ -190,10 +190,10 @@ void pgsql_parse_members(char const *string, osmium::memory::Buffer *buffer, } void pgsql_parse_nodes(char const *string, osmium::memory::Buffer *buffer, - osmium::builder::WayBuilder &builder) + osmium::builder::WayBuilder *obuilder) { if (*string++ == '{') { - osmium::builder::WayNodeListBuilder wnl_builder{*buffer, &builder}; + osmium::builder::WayNodeListBuilder wnl_builder{*buffer, obuilder}; while (*string != '}') { char *ptr = nullptr; wnl_builder.add_node_ref(std::strtoll(string, &ptr, 10)); @@ -411,8 +411,8 @@ bool middle_query_pgsql_t::way_get(osmid_t id, osmium::builder::WayBuilder builder{*buffer}; builder.set_id(id); - pgsql_parse_nodes(res.get_value(0, 0), buffer, builder); - pgsql_parse_tags(res.get_value(0, 1), buffer, builder); + pgsql_parse_nodes(res.get_value(0, 0), buffer, &builder); + pgsql_parse_tags(res.get_value(0, 1), buffer, &builder); } buffer->commit(); @@ -462,8 +462,8 @@ middle_query_pgsql_t::rel_members_get(osmium::Relation const &rel, osmium::builder::WayBuilder builder{*buffer}; builder.set_id(m.ref()); - pgsql_parse_nodes(res.get_value(j, 1), buffer, builder); - pgsql_parse_tags(res.get_value(j, 2), buffer, builder); + pgsql_parse_nodes(res.get_value(j, 1), buffer, &builder); + pgsql_parse_tags(res.get_value(j, 2), buffer, &builder); } buffer->commit(); @@ -542,8 +542,8 @@ bool middle_query_pgsql_t::relation_get(osmid_t id, osmium::builder::RelationBuilder builder{*buffer}; builder.set_id(id); - pgsql_parse_members(res.get_value(0, 0), buffer, builder); - pgsql_parse_tags(res.get_value(0, 1), buffer, builder); + pgsql_parse_members(res.get_value(0, 0), buffer, &builder); + pgsql_parse_tags(res.get_value(0, 1), buffer, &builder); } buffer->commit(); From 0a43edaf373778c3f25f412b6bb50064fefe565a Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 14 Mar 2022 14:49:43 +0100 Subject: [PATCH 05/13] Use ptr not ref for mutable param of add_z_order() function --- src/tagtransform-c.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/tagtransform-c.cpp b/src/tagtransform-c.cpp index 5bbfa4e61..b7370e2c7 100644 --- a/src/tagtransform-c.cpp +++ b/src/tagtransform-c.cpp @@ -40,14 +40,14 @@ static const struct {"primary", 37, true}, {"trunk", 38, true}, {"motorway", 39, true}}; -void add_z_order(taglist_t &tags, bool *roads) +void add_z_order(taglist_t *tags, bool *roads) { - std::string const *const layer = tags.get("layer"); - std::string const *const highway = tags.get("highway"); - bool const bridge = tags.get_bool("bridge", false); - bool const tunnel = tags.get_bool("tunnel", false); - std::string const *const railway = tags.get("railway"); - std::string const *const boundary = tags.get("boundary"); + std::string const *const layer = tags->get("layer"); + std::string const *const highway = tags->get("highway"); + bool const bridge = tags->get_bool("bridge", false); + bool const tunnel = tags->get_bool("tunnel", false); + std::string const *const railway = tags->get("railway"); + std::string const *const boundary = tags->get("boundary"); int z_order = 0; @@ -83,7 +83,7 @@ void add_z_order(taglist_t &tags, bool *roads) } util::integer_to_buffer z{z_order}; - tags.add_tag("z_order", z.c_str()); + tags->add_tag("z_order", z.c_str()); } } // anonymous namespace @@ -211,7 +211,7 @@ bool c_tagtransform_t::filter_tags(osmium::OSMObject const &o, bool *polygon, } if (roads && !filter && (o.type() == osmium::item_type::way)) { - add_z_order(out_tags, roads); + add_z_order(&out_tags, roads); } return filter; @@ -331,7 +331,7 @@ bool c_tagtransform_t::filter_rel_member_tags( *make_polygon = true; } - add_z_order(out_tags, roads); + add_z_order(&out_tags, roads); return false; } From 9833492f5d322fd43bdb423d282de9cbe5ea9100 Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 14 Mar 2022 14:54:25 +0100 Subject: [PATCH 06/13] Use ptr not ref for mutable param of filter_tags() function --- src/output-pgsql.cpp | 8 ++++---- src/tagtransform-c.cpp | 12 ++++++------ src/tagtransform-c.hpp | 2 +- src/tagtransform-lua.cpp | 4 ++-- src/tagtransform-lua.hpp | 2 +- src/tagtransform.hpp | 2 +- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/output-pgsql.cpp b/src/output-pgsql.cpp index f68900ee7..fb443eb6f 100644 --- a/src/output-pgsql.cpp +++ b/src/output-pgsql.cpp @@ -103,7 +103,7 @@ void output_pgsql_t::pending_way(osmid_t id) bool polygon = false; bool roads = false; auto &way = m_buffer.get(0); - if (!m_tagtransform->filter_tags(way, &polygon, &roads, outtags)) { + if (!m_tagtransform->filter_tags(way, &polygon, &roads, &outtags)) { auto nnodes = middle().nodes_get_list(&(way.nodes())); if (nnodes > 1) { pgsql_out_way(way, &outtags, polygon, roads); @@ -162,7 +162,7 @@ void output_pgsql_t::wait() void output_pgsql_t::node_add(osmium::Node const &node) { taglist_t outtags; - if (m_tagtransform->filter_tags(node, nullptr, nullptr, outtags)) { + if (m_tagtransform->filter_tags(node, nullptr, nullptr, &outtags)) { return; } @@ -179,7 +179,7 @@ void output_pgsql_t::way_add(osmium::Way *way) taglist_t outtags; /* Check whether the way is: (1) Exportable, (2) Maybe a polygon */ - auto filter = m_tagtransform->filter_tags(*way, &polygon, &roads, outtags); + auto filter = m_tagtransform->filter_tags(*way, &polygon, &roads, &outtags); if (!filter) { /* Get actual node data and generate output */ @@ -223,7 +223,7 @@ static rolelist_t get_rolelist(osmium::Relation const &rel, void output_pgsql_t::pgsql_process_relation(osmium::Relation const &rel) { taglist_t prefiltered_tags; - if (m_tagtransform->filter_tags(rel, nullptr, nullptr, prefiltered_tags)) { + if (m_tagtransform->filter_tags(rel, nullptr, nullptr, &prefiltered_tags)) { return; } diff --git a/src/tagtransform-c.cpp b/src/tagtransform-c.cpp index b7370e2c7..d6707bf11 100644 --- a/src/tagtransform-c.cpp +++ b/src/tagtransform-c.cpp @@ -149,7 +149,7 @@ bool c_tagtransform_t::check_key(std::vector const &infos, } bool c_tagtransform_t::filter_tags(osmium::OSMObject const &o, bool *polygon, - bool *roads, taglist_t &out_tags) + bool *roads, taglist_t *out_tags) { //assume we dont like this set of tags bool filter = true; @@ -172,7 +172,7 @@ bool c_tagtransform_t::filter_tags(osmium::OSMObject const &o, bool *polygon, if (o.type() == osmium::item_type::relation && std::strcmp("type", k) == 0) { - out_tags.add_tag(k, v); + out_tags->add_tag(k, v); continue; } /* Allow named islands to appear as polygons */ @@ -188,17 +188,17 @@ bool c_tagtransform_t::filter_tags(osmium::OSMObject const &o, bool *polygon, //go through the actual tags found on the item and keep the ones in the export list if (check_key(infos, k, &filter, &flags)) { - out_tags.add_tag(k, v); + out_tags->add_tag(k, v); } } if (m_options->extra_attributes && o.version() > 0) { - out_tags.add_attributes(o); + out_tags->add_attributes(o); } if (polygon) { if (add_area_tag) { /* If we need to force this as a polygon, append an area tag */ - out_tags.add_tag_if_not_exists("area", "yes"); + out_tags->add_tag_if_not_exists("area", "yes"); *polygon = true; } else { auto const *area = o.tags()["area"]; @@ -211,7 +211,7 @@ bool c_tagtransform_t::filter_tags(osmium::OSMObject const &o, bool *polygon, } if (roads && !filter && (o.type() == osmium::item_type::way)) { - add_z_order(&out_tags, roads); + add_z_order(out_tags, roads); } return filter; diff --git a/src/tagtransform-c.hpp b/src/tagtransform-c.hpp index 128b31e39..945001283 100644 --- a/src/tagtransform-c.hpp +++ b/src/tagtransform-c.hpp @@ -21,7 +21,7 @@ class c_tagtransform_t : public tagtransform_t std::unique_ptr clone() const override; bool filter_tags(osmium::OSMObject const &o, bool *polygon, bool *roads, - taglist_t &out_tags) override; + taglist_t *out_tags) override; bool filter_rel_member_tags(taglist_t const &rel_tags, osmium::memory::Buffer const &members, diff --git a/src/tagtransform-lua.cpp b/src/tagtransform-lua.cpp index eff306419..68b0bb9bf 100644 --- a/src/tagtransform-lua.cpp +++ b/src/tagtransform-lua.cpp @@ -64,7 +64,7 @@ void lua_tagtransform_t::check_lua_function_exists(std::string const &func_name) } bool lua_tagtransform_t::filter_tags(osmium::OSMObject const &o, bool *polygon, - bool *roads, taglist_t &out_tags) + bool *roads, taglist_t *out_tags) { switch (o.type()) { case osmium::item_type::node: @@ -137,7 +137,7 @@ bool lua_tagtransform_t::filter_tags(osmium::OSMObject const &o, bool *polygon, "is due an incorrect data type '{}'."_format( lua_typename(L, ltype))}; } - out_tags.add_tag(key, value); + out_tags->add_tag(key, value); lua_pop(L, 1); } diff --git a/src/tagtransform-lua.hpp b/src/tagtransform-lua.hpp index 540595a75..3e9ee3eb5 100644 --- a/src/tagtransform-lua.hpp +++ b/src/tagtransform-lua.hpp @@ -31,7 +31,7 @@ class lua_tagtransform_t : public tagtransform_t std::unique_ptr clone() const override; bool filter_tags(osmium::OSMObject const &o, bool *polygon, bool *roads, - taglist_t &out_tags) override; + taglist_t *out_tags) override; bool filter_rel_member_tags(taglist_t const &rel_tags, osmium::memory::Buffer const &members, diff --git a/src/tagtransform.hpp b/src/tagtransform.hpp index e16576f24..e00a9508d 100644 --- a/src/tagtransform.hpp +++ b/src/tagtransform.hpp @@ -30,7 +30,7 @@ class tagtransform_t virtual std::unique_ptr clone() const = 0; virtual bool filter_tags(osmium::OSMObject const &o, bool *polygon, - bool *roads, taglist_t &out_tags) = 0; + bool *roads, taglist_t *out_tags) = 0; virtual bool filter_rel_member_tags(taglist_t const &rel_tags, osmium::memory::Buffer const &members, From 4e5cd88a9c3860f3a1d367644954b9565b394eb0 Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 14 Mar 2022 14:57:21 +0100 Subject: [PATCH 07/13] Use ptr not ref for mutable param of filter_rel_member_tags() --- src/output-pgsql.cpp | 2 +- src/tagtransform-c.cpp | 43 ++++++++++++++++++++-------------------- src/tagtransform-c.hpp | 2 +- src/tagtransform-lua.cpp | 4 ++-- src/tagtransform-lua.hpp | 2 +- src/tagtransform.hpp | 2 +- 6 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/output-pgsql.cpp b/src/output-pgsql.cpp index fb443eb6f..39c2d2a95 100644 --- a/src/output-pgsql.cpp +++ b/src/output-pgsql.cpp @@ -249,7 +249,7 @@ void output_pgsql_t::pgsql_process_relation(osmium::Relation const &rel) // otherwise one or the other will be true. if (m_tagtransform->filter_rel_member_tags( prefiltered_tags, m_buffer, xrole, &make_boundary, &make_polygon, - &roads, outtags)) { + &roads, &outtags)) { return; } diff --git a/src/tagtransform-c.cpp b/src/tagtransform-c.cpp index d6707bf11..3c53b569f 100644 --- a/src/tagtransform-c.cpp +++ b/src/tagtransform-c.cpp @@ -220,7 +220,7 @@ bool c_tagtransform_t::filter_tags(osmium::OSMObject const &o, bool *polygon, bool c_tagtransform_t::filter_rel_member_tags( taglist_t const &rel_tags, osmium::memory::Buffer const &, rolelist_t const &, bool *make_boundary, bool *make_polygon, bool *roads, - taglist_t &out_tags) + taglist_t *out_tags) { std::string const *type = rel_tags.get("type"); if (!type) { @@ -245,15 +245,15 @@ bool c_tagtransform_t::filter_rel_member_tags( for (auto const &rel_tag : rel_tags) { //copy the name tag as "route_name" if (is_route && (rel_tag.key == "name")) { - out_tags.add_tag_if_not_exists("route_name", rel_tag.value); + out_tags->add_tag_if_not_exists("route_name", rel_tag.value); } //copy all other tags except for "type" if (rel_tag.key != "type") { - out_tags.add_tag_if_not_exists(rel_tag); + out_tags->add_tag_if_not_exists(rel_tag); } } - if (out_tags.empty()) { + if (out_tags->empty()) { return true; } @@ -273,22 +273,22 @@ bool c_tagtransform_t::filter_rel_member_tags( } if (*netw == "lcn") { networknr = 10; - out_tags.add_tag_if_not_exists("lcn", statetype); + out_tags->add_tag_if_not_exists("lcn", statetype); } else if (*netw == "rcn") { networknr = 11; - out_tags.add_tag_if_not_exists("rcn", statetype); + out_tags->add_tag_if_not_exists("rcn", statetype); } else if (*netw == "ncn") { networknr = 12; - out_tags.add_tag_if_not_exists("ncn", statetype); + out_tags->add_tag_if_not_exists("ncn", statetype); } else if (*netw == "lwn") { networknr = 20; - out_tags.add_tag_if_not_exists("lwn", statetype); + out_tags->add_tag_if_not_exists("lwn", statetype); } else if (*netw == "rwn") { networknr = 21; - out_tags.add_tag_if_not_exists("rwn", statetype); + out_tags->add_tag_if_not_exists("rwn", statetype); } else if (*netw == "nwn") { networknr = 22; - out_tags.add_tag_if_not_exists("nwn", statetype); + out_tags->add_tag_if_not_exists("nwn", statetype); } } @@ -297,31 +297,32 @@ bool c_tagtransform_t::filter_rel_member_tags( if ((*prefcol)[0] == '0' || (*prefcol)[0] == '1' || (*prefcol)[0] == '2' || (*prefcol)[0] == '3' || (*prefcol)[0] == '4') { - out_tags.add_tag_if_not_exists("route_pref_color", *prefcol); + out_tags->add_tag_if_not_exists("route_pref_color", *prefcol); } else { - out_tags.add_tag_if_not_exists("route_pref_color", "0"); + out_tags->add_tag_if_not_exists("route_pref_color", "0"); } } else { - out_tags.add_tag_if_not_exists("route_pref_color", "0"); + out_tags->add_tag_if_not_exists("route_pref_color", "0"); } std::string const *relref = rel_tags.get("ref"); if (relref != nullptr) { if (networknr == 10) { - out_tags.add_tag_if_not_exists("lcn_ref", *relref); + out_tags->add_tag_if_not_exists("lcn_ref", *relref); } else if (networknr == 11) { - out_tags.add_tag_if_not_exists("rcn_ref", *relref); + out_tags->add_tag_if_not_exists("rcn_ref", *relref); } else if (networknr == 12) { - out_tags.add_tag_if_not_exists("ncn_ref", *relref); + out_tags->add_tag_if_not_exists("ncn_ref", *relref); } else if (networknr == 20) { - out_tags.add_tag_if_not_exists("lwn_ref", *relref); + out_tags->add_tag_if_not_exists("lwn_ref", *relref); } else if (networknr == 21) { - out_tags.add_tag_if_not_exists("rwn_ref", *relref); + out_tags->add_tag_if_not_exists("rwn_ref", *relref); } else if (networknr == 22) { - out_tags.add_tag_if_not_exists("nwn_ref", *relref); + out_tags->add_tag_if_not_exists("nwn_ref", *relref); } } - } else if (is_boundary || (is_multipolygon && out_tags.contains("boundary"))) { + } else if (is_boundary || + (is_multipolygon && out_tags->contains("boundary"))) { /* Boundaries will get converted into multiple geometries: - Linear features will end up in the line and roads tables (useful for admin boundaries) - Polygon features also go into the polygon table (useful for national_forests) @@ -331,7 +332,7 @@ bool c_tagtransform_t::filter_rel_member_tags( *make_polygon = true; } - add_z_order(&out_tags, roads); + add_z_order(out_tags, roads); return false; } diff --git a/src/tagtransform-c.hpp b/src/tagtransform-c.hpp index 945001283..b453f6f20 100644 --- a/src/tagtransform-c.hpp +++ b/src/tagtransform-c.hpp @@ -27,7 +27,7 @@ class c_tagtransform_t : public tagtransform_t osmium::memory::Buffer const &members, rolelist_t const &member_roles, bool *make_boundary, bool *make_polygon, - bool *roads, taglist_t &out_tags) override; + bool *roads, taglist_t *out_tags) override; private: bool check_key(std::vector const &infos, char const *k, diff --git a/src/tagtransform-lua.cpp b/src/tagtransform-lua.cpp index 68b0bb9bf..6a834f13e 100644 --- a/src/tagtransform-lua.cpp +++ b/src/tagtransform-lua.cpp @@ -151,7 +151,7 @@ bool lua_tagtransform_t::filter_tags(osmium::OSMObject const &o, bool *polygon, bool lua_tagtransform_t::filter_rel_member_tags( taglist_t const &rel_tags, osmium::memory::Buffer const &members, rolelist_t const &member_roles, bool *make_boundary, bool *make_polygon, - bool *roads, taglist_t &out_tags) + bool *roads, taglist_t *out_tags) { size_t const num_members = member_roles.size(); lua_getglobal(L, m_rel_mem_func.c_str()); @@ -209,7 +209,7 @@ bool lua_tagtransform_t::filter_rel_member_tags( while (lua_next(L, -2) != 0) { char const *const key = lua_tostring(L, -2); char const *const value = lua_tostring(L, -1); - out_tags.add_tag(key, value); + out_tags->add_tag(key, value); lua_pop(L, 1); } lua_pop(L, 1); diff --git a/src/tagtransform-lua.hpp b/src/tagtransform-lua.hpp index 3e9ee3eb5..b6682513a 100644 --- a/src/tagtransform-lua.hpp +++ b/src/tagtransform-lua.hpp @@ -37,7 +37,7 @@ class lua_tagtransform_t : public tagtransform_t osmium::memory::Buffer const &members, rolelist_t const &member_roles, bool *make_boundary, bool *make_polygon, - bool *roads, taglist_t &out_tags) override; + bool *roads, taglist_t *out_tags) override; private: void open_style(); diff --git a/src/tagtransform.hpp b/src/tagtransform.hpp index e00a9508d..014f9d8fa 100644 --- a/src/tagtransform.hpp +++ b/src/tagtransform.hpp @@ -36,7 +36,7 @@ class tagtransform_t osmium::memory::Buffer const &members, rolelist_t const &member_roles, bool *make_boundary, bool *make_polygon, - bool *roads, taglist_t &out_tags) = 0; + bool *roads, taglist_t *out_tags) = 0; }; #endif // OSM2PGSQL_TAGTRANSFORM_HPP From 14bb8692cc5f365c8951825b1dee25a0917ed1b6 Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 14 Mar 2022 15:29:01 +0100 Subject: [PATCH 08/13] Use ptr not ref for mutable param of thread_joiner constructor --- src/thread-pool.cpp | 2 +- src/thread-pool.hpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/thread-pool.cpp b/src/thread-pool.cpp index b5ce5b83b..756a0d0c4 100644 --- a/src/thread-pool.cpp +++ b/src/thread-pool.cpp @@ -29,7 +29,7 @@ std::chrono::milliseconds task_result_t::wait() } thread_pool_t::thread_pool_t(unsigned int num_threads) -: m_work_queue(max_queue_size, "work"), m_joiner(m_threads) +: m_work_queue(max_queue_size, "work"), m_joiner(&m_threads) { assert(num_threads > 0); try { diff --git a/src/thread-pool.hpp b/src/thread-pool.hpp index 6203f76a5..779692855 100644 --- a/src/thread-pool.hpp +++ b/src/thread-pool.hpp @@ -129,10 +129,10 @@ class thread_pool_t class thread_joiner { - std::vector &m_threads; + std::vector *m_threads; public: - explicit thread_joiner(std::vector &threads) + explicit thread_joiner(std::vector *threads) : m_threads(threads) {} @@ -144,7 +144,7 @@ class thread_pool_t ~thread_joiner() { - for (auto &thread : m_threads) { + for (auto &thread : *m_threads) { if (thread.joinable()) { thread.join(); } From 2247dfd41df59d93430590d3d8f1a0a6018608d5 Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 14 Mar 2022 15:31:39 +0100 Subject: [PATCH 09/13] Use ptr not ref for mutable param of fill_buffer() function --- tests/test-domain-matcher.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/test-domain-matcher.cpp b/tests/test-domain-matcher.cpp index e10b47de6..03f3d5e0d 100644 --- a/tests/test-domain-matcher.cpp +++ b/tests/test-domain-matcher.cpp @@ -17,16 +17,16 @@ #include -static osmium::Tag &fill_buffer(osmium::memory::Buffer &buffer, char const *key, +static osmium::Tag &fill_buffer(osmium::memory::Buffer *buffer, char const *key, char const *value) { { - osmium::builder::TagListBuilder builder{buffer}; + osmium::builder::TagListBuilder builder{*buffer}; builder.add_tag(key, value); } - buffer.commit(); + buffer->commit(); - return *buffer.get(0).begin(); + return *buffer->get(0).begin(); } TEST_CASE("DomainMatcher: name", "[NoDB]") @@ -34,7 +34,7 @@ TEST_CASE("DomainMatcher: name", "[NoDB]") osmium::memory::Buffer buffer{1024}; DomainMatcher matcher{"bridge"}; - auto const &tag = fill_buffer(buffer, "bridge:name", "Golden Gate Bridge"); + auto const &tag = fill_buffer(&buffer, "bridge:name", "Golden Gate Bridge"); char const *result = matcher(tag); REQUIRE(result); @@ -47,7 +47,7 @@ TEST_CASE("DomainMatcher: name with language", "[NoDB]") DomainMatcher matcher{"bridge"}; auto const &tag = - fill_buffer(buffer, "bridge:name:en", "The Bridge on the River Kwai"); + fill_buffer(&buffer, "bridge:name:en", "The Bridge on the River Kwai"); char const *result = matcher(tag); REQUIRE(result); @@ -59,7 +59,7 @@ TEST_CASE("DomainMatcher: no :name", "[NoDB]") osmium::memory::Buffer buffer{1024}; DomainMatcher matcher{"bridge"}; - auto const &tag = fill_buffer(buffer, "bridge_name", "A Bridge Too Far"); + auto const &tag = fill_buffer(&buffer, "bridge_name", "A Bridge Too Far"); char const *result = matcher(tag); REQUIRE_FALSE(result); @@ -71,7 +71,7 @@ TEST_CASE("DomainMatcher: empty matcher", "[NoDB]") DomainMatcher matcher{""}; auto const &tag = - fill_buffer(buffer, "bridge:name", "Tacoma Narrows Bridge"); + fill_buffer(&buffer, "bridge:name", "Tacoma Narrows Bridge"); char const *result = matcher(tag); REQUIRE_FALSE(result); @@ -83,7 +83,7 @@ TEST_CASE("DomainMatcher: names", "[NoDB]") DomainMatcher matcher{"bridge"}; auto const &tag = - fill_buffer(buffer, "bridge:names", "Seven Bridges of Königsberg"); + fill_buffer(&buffer, "bridge:names", "Seven Bridges of Königsberg"); char const *result = matcher(tag); REQUIRE_FALSE(result); @@ -94,7 +94,7 @@ TEST_CASE("DomainMatcher: not matching", "[NoDB]") osmium::memory::Buffer buffer{1024}; DomainMatcher matcher{"bridge"}; - auto const &tag = fill_buffer(buffer, "the_bridge_tag", "Pont du Gard"); + auto const &tag = fill_buffer(&buffer, "the_bridge_tag", "Pont du Gard"); char const *result = matcher(tag); REQUIRE_FALSE(result); @@ -105,7 +105,7 @@ TEST_CASE("DomainMatcher: empty tag", "[NoDB]") osmium::memory::Buffer buffer{1024}; DomainMatcher matcher{"bridge"}; - auto const &tag = fill_buffer(buffer, "", "London Bridge"); + auto const &tag = fill_buffer(&buffer, "", "London Bridge"); char const *result = matcher(tag); REQUIRE_FALSE(result); From 684aff8e627e8f6b1413a3ec262f843f23c2a4a9 Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 14 Mar 2022 15:34:05 +0100 Subject: [PATCH 10/13] Use ptr not ref for mutable param of add_row/array/hash() helpers --- tests/test-db-copy-mgr.cpp | 58 +++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/tests/test-db-copy-mgr.cpp b/tests/test-db-copy-mgr.cpp index 2313abb14..1a9f75c56 100644 --- a/tests/test-db-copy-mgr.cpp +++ b/tests/test-db-copy-mgr.cpp @@ -35,47 +35,47 @@ static std::shared_ptr setup_table(std::string const &cols) } template -void add_row(copy_mgr_t &mgr, std::shared_ptr const &t, +void add_row(copy_mgr_t *mgr, std::shared_ptr const &t, ARGS &&... args) { - mgr.new_line(t); - mgr.add_columns(std::forward(args)...); - mgr.finish_line(); + mgr->new_line(t); + mgr->add_columns(std::forward(args)...); + mgr->finish_line(); - mgr.sync(); + mgr->sync(); } template -void add_array(copy_mgr_t &mgr, std::shared_ptr const &t, +void add_array(copy_mgr_t *mgr, std::shared_ptr const &t, int id, std::vector const &values) { - mgr.new_line(t); - mgr.add_column(id); - mgr.new_array(); + mgr->new_line(t); + mgr->add_column(id); + mgr->new_array(); for (auto const &v : values) { - mgr.add_array_elem(v); + mgr->add_array_elem(v); } - mgr.finish_array(); - mgr.finish_line(); + mgr->finish_array(); + mgr->finish_line(); - mgr.sync(); + mgr->sync(); } static void -add_hash(copy_mgr_t &mgr, std::shared_ptr const &t, int id, +add_hash(copy_mgr_t *mgr, std::shared_ptr const &t, int id, std::vector> const &values) { - mgr.new_line(t); + mgr->new_line(t); - mgr.add_column(id); - mgr.new_hash(); + mgr->add_column(id); + mgr->new_hash(); for (auto const &v : values) { - mgr.add_hash_elem(v.first, v.second); + mgr->add_hash_elem(v.first, v.second); } - mgr.finish_hash(); - mgr.finish_line(); + mgr->finish_hash(); + mgr->finish_line(); - mgr.sync(); + mgr->sync(); } static void check_row(std::vector const &row) @@ -114,7 +114,7 @@ TEST_CASE("copy_mgr_t") { auto t = setup_table("big int8, small smallint"); - add_row(mgr, t, 34, 0xfff12345678ULL, -4457); + add_row(&mgr, t, 34, 0xfff12345678ULL, -4457); check_row({"34", "17588196497016", "-4457"}); } @@ -124,25 +124,25 @@ TEST_CASE("copy_mgr_t") SECTION("Simple strings") { - add_row(mgr, t, -2, "foo", "l"); + add_row(&mgr, t, -2, "foo", "l"); check_row({"-2", "foo", "l"}); } SECTION("Strings with special characters") { - add_row(mgr, t, -2, "va\tr", "meme\n"); + add_row(&mgr, t, -2, "va\tr", "meme\n"); check_row({"-2", "va\tr", "meme\n"}); } SECTION("Strings with more special characters") { - add_row(mgr, t, -2, "\rrun", "K\\P"); + add_row(&mgr, t, -2, "\rrun", "K\\P"); check_row({"-2", "\rrun", "K\\P"}); } SECTION("Strings with space and quote") { - add_row(mgr, t, 1, "with space", "name \"quoted\""); + add_row(&mgr, t, 1, "with space", "name \"quoted\""); check_row({"1", "with space", "name \"quoted\""}); } } @@ -151,7 +151,7 @@ TEST_CASE("copy_mgr_t") { auto t = setup_table("a int[]"); - add_array(mgr, t, -9000, {45, -2, 0, 56}); + add_array(&mgr, t, -9000, {45, -2, 0, 56}); check_row({"-9000", "{45,-2,0,56}"}); } @@ -159,7 +159,7 @@ TEST_CASE("copy_mgr_t") { auto t = setup_table("a text[]"); - add_array(mgr, t, 3, + add_array(&mgr, t, 3, {"foo", "", "with space", "with \"quote\"", "the\t", "line\nbreak", "rr\rrr", "s\\l"}); check_row({"3", "{foo,\"\",\"with space\",\"with " @@ -186,7 +186,7 @@ TEST_CASE("copy_mgr_t") {"key\n3", "value\n3"}, {"key\r4", "value\r4"}, {"key\\5", "value\\5"}}; - add_hash(mgr, t, 42, values); + add_hash(&mgr, t, 42, values); auto c = db.connect(); From 4584af1b4940665a0bc83e8ba79a5c1cd6611d7b Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 14 Mar 2022 15:40:00 +0100 Subject: [PATCH 11/13] Use ptr not ref for mutable param of full_dependency_manager_t::get_ids --- src/dependency-manager.cpp | 11 ++++++----- src/dependency-manager.hpp | 6 +++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/dependency-manager.cpp b/src/dependency-manager.cpp index f48c85b66..fd216f284 100644 --- a/src/dependency-manager.cpp +++ b/src/dependency-manager.cpp @@ -41,16 +41,17 @@ bool full_dependency_manager_t::has_pending() const noexcept return !m_ways_pending_tracker.empty() || !m_rels_pending_tracker.empty(); } -idlist_t full_dependency_manager_t::get_ids(osmium::index::IdSetSmall &tracker) +idlist_t +full_dependency_manager_t::get_ids(osmium::index::IdSetSmall *tracker) { - tracker.sort_unique(); + tracker->sort_unique(); idlist_t list; - list.reserve(tracker.size()); + list.reserve(tracker->size()); - std::copy(tracker.cbegin(), tracker.cend(), std::back_inserter(list)); + std::copy(tracker->cbegin(), tracker->cend(), std::back_inserter(list)); - tracker.clear(); + tracker->clear(); return list; } diff --git a/src/dependency-manager.hpp b/src/dependency-manager.hpp index 810f005d4..dd02ee835 100644 --- a/src/dependency-manager.hpp +++ b/src/dependency-manager.hpp @@ -99,16 +99,16 @@ class full_dependency_manager_t : public dependency_manager_t idlist_t get_pending_way_ids() override { - return get_ids(m_ways_pending_tracker); + return get_ids(&m_ways_pending_tracker); } idlist_t get_pending_relation_ids() override { - return get_ids(m_rels_pending_tracker); + return get_ids(&m_rels_pending_tracker); } private: - static idlist_t get_ids(osmium::index::IdSetSmall &tracker); + static idlist_t get_ids(osmium::index::IdSetSmall *tracker); std::shared_ptr m_object_store; From 6a5a145d130575379c5357dd71473bd889ab55b3 Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 14 Mar 2022 15:51:46 +0100 Subject: [PATCH 12/13] Use ptr not ref for mutable param of input_context_t::apply() --- src/input.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/input.cpp b/src/input.cpp index 55e876d08..78858c362 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -218,26 +218,26 @@ class input_context_t assert(progress); } - void apply(osmium::OSMObject &object) + void apply(osmium::OSMObject *object) { - if (!m_append && object.deleted()) { + if (!m_append && object->deleted()) { throw std::runtime_error{"Input file contains deleted objects but " "you are not in append mode."}; } - if (m_last_type != object.type()) { + if (m_last_type != object->type()) { if (m_last_type == osmium::item_type::node) { m_osmdata->after_nodes(); m_progress->start_way_counter(); } - if (object.type() == osmium::item_type::relation) { + if (object->type() == osmium::item_type::relation) { m_osmdata->after_ways(); m_progress->start_relation_counter(); } - m_last_type = object.type(); + m_last_type = object->type(); } - osmium::apply_item(object, *m_osmdata, *m_progress); + osmium::apply_item(*object, *m_osmdata, *m_progress); } void eof() @@ -275,7 +275,7 @@ static void process_single_file(osmium::io::File const &file, while (osmium::memory::Buffer buffer = reader.read()) { for (auto &object : buffer.select()) { last = check_input(last, object); - ctx.apply(object); + ctx.apply(&object); } } ctx.eof(); @@ -305,7 +305,7 @@ static void process_multiple_files(std::vector const &files, auto element = queue.top(); queue.pop(); if (queue.empty() || element != queue.top()) { - ctx.apply(element.object()); + ctx.apply(&element.object()); } auto *source = element.data_source(); From 93ac35280e012cfdd14983122b3a949b8b4f451c Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 14 Mar 2022 15:58:40 +0100 Subject: [PATCH 13/13] Use ptr not ref for mutable param of write_and_read_location() --- tests/test-persistent-cache.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tests/test-persistent-cache.cpp b/tests/test-persistent-cache.cpp index 9a575dc28..40bdbd640 100644 --- a/tests/test-persistent-cache.cpp +++ b/tests/test-persistent-cache.cpp @@ -13,11 +13,11 @@ #include "common-cleanup.hpp" -static void write_and_read_location(node_persistent_cache &cache, osmid_t id, +static void write_and_read_location(node_persistent_cache *cache, osmid_t id, double x, double y) { - cache.set(id, osmium::Location{x, y}); - REQUIRE(osmium::Location(x, y) == cache.get(id)); + cache->set(id, osmium::Location{x, y}); + REQUIRE(osmium::Location(x, y) == cache->get(id)); } static void read_location(node_persistent_cache const &cache, osmid_t id, @@ -42,13 +42,13 @@ TEST_CASE("Persistent cache", "[NoDB]") node_persistent_cache cache{flat_node_file, false}; // write in order - write_and_read_location(cache, 10, 10.01, -45.3); - write_and_read_location(cache, 11, -0.4538, 22.22); - write_and_read_location(cache, 1058, 9.4, 9); - write_and_read_location(cache, 502754, 0.0, 0.0); + write_and_read_location(&cache, 10, 10.01, -45.3); + write_and_read_location(&cache, 11, -0.4538, 22.22); + write_and_read_location(&cache, 1058, 9.4, 9); + write_and_read_location(&cache, 502754, 0.0, 0.0); // write out-of-order - write_and_read_location(cache, 9934, -179.999, 89.1); + write_and_read_location(&cache, 9934, -179.999, 89.1); // read non-existing in middle REQUIRE(cache.get(0) == osmium::Location{}); @@ -82,13 +82,13 @@ TEST_CASE("Persistent cache", "[NoDB]") REQUIRE(cache.get(77729404) == osmium::Location{}); // write new data in the middle - write_and_read_location(cache, 13, 10.01, -45.3); - write_and_read_location(cache, 3000, 45, 45); + write_and_read_location(&cache, 13, 10.01, -45.3); + write_and_read_location(&cache, 3000, 45, 45); // append new data - write_and_read_location(cache, 502755, 87, 0.45); - write_and_read_location(cache, 502756, 87.12, 0.46); - write_and_read_location(cache, 510000, 44, 0.0); + write_and_read_location(&cache, 502755, 87, 0.45); + write_and_read_location(&cache, 502756, 87.12, 0.46); + write_and_read_location(&cache, 510000, 44, 0.0); // delete existing delete_location(cache, 11);