#ifndef TEST_BASIC_HELPER_HPP #define TEST_BASIC_HELPER_HPP #include #include #include #include inline void add_tags(osmium::memory::Buffer& buffer, osmium::builder::Builder& builder, const std::vector>& tags) { osmium::builder::TagListBuilder tl_builder(buffer, &builder); for (auto& tag : tags) { tl_builder.add_tag(tag.first, tag.second); } } inline osmium::Node& buffer_add_node(osmium::memory::Buffer& buffer, const char* user, const std::vector>& tags, const osmium::Location& location) { osmium::builder::NodeBuilder builder(buffer); builder.add_user(user); add_tags(buffer, builder, tags); buffer.commit(); return builder.object().set_location(location); } inline osmium::Way& buffer_add_way(osmium::memory::Buffer& buffer, const char* user, const std::vector>& tags, const std::vector& nodes) { osmium::builder::WayBuilder builder(buffer); builder.add_user(user); add_tags(buffer, builder, tags); osmium::builder::WayNodeListBuilder wnl_builder(buffer, &builder); for (const osmium::object_id_type ref : nodes) { wnl_builder.add_node_ref(ref); } buffer.commit(); return builder.object(); } inline osmium::Way& buffer_add_way(osmium::memory::Buffer& buffer, const char* user, const std::vector>& tags, const std::vector>& nodes) { osmium::builder::WayBuilder builder(buffer); builder.add_user(user); add_tags(buffer, builder, tags); osmium::builder::WayNodeListBuilder wnl_builder(buffer, &builder); for (auto& p : nodes) { wnl_builder.add_node_ref(p.first, p.second); } buffer.commit(); return builder.object(); } inline osmium::Relation& buffer_add_relation( osmium::memory::Buffer& buffer, const char* user, const std::vector>& tags, const std::vector>& members) { osmium::builder::RelationBuilder builder(buffer); builder.add_user(user); add_tags(buffer, builder, tags); osmium::builder::RelationMemberListBuilder rml_builder(buffer, &builder); for (const auto& member : members) { rml_builder.add_member(osmium::char_to_item_type(std::get<0>(member)), std::get<1>(member), std::get<2>(member)); } buffer.commit(); return builder.object(); } inline osmium::Area& buffer_add_area(osmium::memory::Buffer& buffer, const char* user, const std::vector>& tags, const std::vector>>>& rings) { osmium::builder::AreaBuilder builder(buffer); builder.add_user(user); add_tags(buffer, builder, tags); for (auto& ring : rings) { if (ring.first) { osmium::builder::OuterRingBuilder ring_builder(buffer, &builder); for (auto& p : ring.second) { ring_builder.add_node_ref(p.first, p.second); } } else { osmium::builder::InnerRingBuilder ring_builder(buffer, &builder); for (auto& p : ring.second) { ring_builder.add_node_ref(p.first, p.second); } } } buffer.commit(); return builder.object(); } inline osmium::Changeset& buffer_add_changeset(osmium::memory::Buffer& buffer, const char* user, const std::vector>& tags) { osmium::builder::ChangesetBuilder builder(buffer); builder.add_user(user); add_tags(buffer, builder, tags); buffer.commit(); return builder.object(); } #endif // TEST_BASIC_HELPER_HPP