Small ProcessElements refactoring

This commit is contained in:
Michael Krasnyk 2017-09-14 13:22:31 +02:00
parent 94169a20de
commit 64ad308e9d

View File

@ -288,24 +288,29 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context)
"version", "version",
&osmium::Way::version); &osmium::Way::version);
context.state.new_usertype<osmium::RelationMember>("RelationMember", context.state.new_usertype<osmium::RelationMember>(
"role", &osmium::RelationMember::role, "RelationMember",
"type", &osmium::RelationMember::type, "role",
"id", [](const osmium::RelationMember &member) -> osmium::object_id_type { &osmium::RelationMember::role,
return member.ref(); "type",
}); &osmium::RelationMember::type,
"id",
[](const osmium::RelationMember &member) -> osmium::object_id_type {
return member.ref();
});
context.state.new_usertype<osmium::Relation>("Relation", context.state.new_usertype<osmium::Relation>(
"get_value_by_key", "Relation",
&get_value_by_key<osmium::Relation>, "get_value_by_key",
"id", &get_value_by_key<osmium::Relation>,
&osmium::Relation::id, "id",
"version", &osmium::Relation::id,
&osmium::Relation::version, "version",
"members", &osmium::Relation::version,
[](const osmium::Relation &rel) -> const osmium::RelationMemberList& { "members",
return rel.members(); [](const osmium::Relation &rel) -> const osmium::RelationMemberList & {
}); return rel.members();
});
context.state.new_usertype<osmium::Node>("Node", context.state.new_usertype<osmium::Node>("Node",
"location", "location",
@ -400,13 +405,11 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context)
context.state.new_usertype<ExtractionRelation>( context.state.new_usertype<ExtractionRelation>(
"ExtractionRelation", "ExtractionRelation",
sol::meta_function::new_index, sol::meta_function::new_index,
[](ExtractionRelation &rel, const osmium::RelationMember &member) -> ExtractionRelation::AttributesMap& { [](ExtractionRelation &rel, const osmium::RelationMember &member)
return rel.GetMember(member); -> ExtractionRelation::AttributesMap & { return rel.GetMember(member); },
},
sol::meta_function::index, sol::meta_function::index,
[](ExtractionRelation &rel, const osmium::RelationMember &member) -> ExtractionRelation::AttributesMap& { [](ExtractionRelation &rel, const osmium::RelationMember &member)
return rel.GetMember(member); -> ExtractionRelation::AttributesMap & { return rel.GetMember(member); },
},
"restriction", "restriction",
sol::property([](const ExtractionRelation &rel) { return rel.is_restriction; }, sol::property([](const ExtractionRelation &rel) { return rel.is_restriction; },
[](ExtractionRelation &rel, bool flag) { rel.is_restriction = flag; })); [](ExtractionRelation &rel, bool flag) { rel.is_restriction = flag; }));
@ -689,34 +692,34 @@ void Sol2ScriptingEnvironment::ProcessElements(
switch (entity->type()) switch (entity->type())
{ {
case osmium::item_type::node: case osmium::item_type::node:
{
const auto &node = static_cast<const osmium::Node &>(*entity);
result_node.clear(); result_node.clear();
if (local_context.has_node_function && if (local_context.has_node_function &&
(!static_cast<const osmium::Node &>(*entity).tags().empty() || (!node.tags().empty() || local_context.properties.call_tagless_node_function))
local_context.properties.call_tagless_node_function))
{ {
const osmium::Node &node = static_cast<const osmium::Node &>(*entity);
const auto &id = ExtractionRelation::OsmIDTyped(node.id(), osmium::item_type::node); const auto &id = ExtractionRelation::OsmIDTyped(node.id(), osmium::item_type::node);
local_context.ProcessNode(node, result_node, relations.Get(id)); local_context.ProcessNode(node, result_node, relations.Get(id));
} }
resulting_nodes.push_back(std::pair<const osmium::Node &, ExtractionNode>( resulting_nodes.push_back({node, std::move(result_node)});
static_cast<const osmium::Node &>(*entity), std::move(result_node))); }
break; break;
case osmium::item_type::way: case osmium::item_type::way:
{
const osmium::Way &way = static_cast<const osmium::Way &>(*entity);
result_way.clear(); result_way.clear();
if (local_context.has_way_function) if (local_context.has_way_function)
{ {
const osmium::Way &way = static_cast<const osmium::Way &>(*entity);
const auto &id = ExtractionRelation::OsmIDTyped(way.id(), osmium::item_type::way); const auto &id = ExtractionRelation::OsmIDTyped(way.id(), osmium::item_type::way);
local_context.ProcessWay(way, result_way, relations.Get(id)); local_context.ProcessWay(way, result_way, relations.Get(id));
} }
resulting_ways.push_back(std::pair<const osmium::Way &, ExtractionWay>( resulting_ways.push_back({way, std::move(result_way)});
static_cast<const osmium::Way &>(*entity), std::move(result_way))); }
break; break;
case osmium::item_type::relation: case osmium::item_type::relation:
{ {
auto result_res = const auto &relation = static_cast<const osmium::Relation &>(*entity);
restriction_parser.TryParse(static_cast<const osmium::Relation &>(*entity)); if (auto result_res = restriction_parser.TryParse(relation))
if (result_res)
{ {
resulting_restrictions.push_back(*result_res); resulting_restrictions.push_back(*result_res);
} }
@ -726,13 +729,9 @@ void Sol2ScriptingEnvironment::ProcessElements(
result_relation.clear(); result_relation.clear();
if (local_context.has_relation_function) if (local_context.has_relation_function)
{ {
local_context.ProcessRelation(static_cast<const osmium::Relation &>(*entity), local_context.ProcessRelation(relation, result_relation);
result_relation);
} }
resulting_relations.push_back( resulting_relations.push_back({relation, std::move(result_relation)});
std::pair<const osmium::Relation &, ExtractionRelation>(
static_cast<const osmium::Relation &>(*entity),
std::move(result_relation)));
} }
} }
break; break;