osrm-backend/test/t/basic/helper.hpp
Dennis Luxen 73efcc6b0c Squashed 'third_party/libosmium/' content from commit 910f8f1
git-subtree-dir: third_party/libosmium
git-subtree-split: 910f8f1e992402e0f1acd0132eaffa7539ca83d2
2015-01-13 16:54:25 +01:00

98 lines
3.8 KiB
C++

#ifndef TEST_BASIC_HELPER_HPP
#define TEST_BASIC_HELPER_HPP
#include <tuple>
#include <utility>
#include <vector>
#include <osmium/builder/osm_object_builder.hpp>
inline void add_tags(osmium::memory::Buffer& buffer, osmium::builder::Builder& builder, const std::vector<std::pair<const char*, const char*>>& 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<std::pair<const char*, const char*>>& 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<std::pair<const char*, const char*>>& tags, const std::vector<osmium::object_id_type>& 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<std::pair<const char*, const char*>>& tags, const std::vector<std::pair<osmium::object_id_type, osmium::Location>>& 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<std::pair<const char*, const char*>>& tags, const std::vector<std::tuple<char, osmium::object_id_type, const char*>>& 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<std::pair<const char*, const char*>>& tags,
const std::vector<std::pair<bool,
std::vector<std::pair<osmium::object_id_type, osmium::Location>>>>& 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<std::pair<const char*, const char*>>& 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