Remove ExtractionRelationData wraper

This commit is contained in:
Michael Krasnyk 2017-09-13 21:57:04 +02:00
parent ff3b398e23
commit f89ada7f61

View File

@ -42,6 +42,10 @@ namespace osrm
namespace extractor namespace extractor
{ {
// The wrapper is neede for Lua 5.1 support with sol2 to have the table interface
// on attributes via sol::as_table(relations[index])
// For Lua 5.2 with the wrapping unordered_map by sol2
// RelationsContainerWrap and ExtractionRelationAttributes can be removed
class RelationsContainerWrap class RelationsContainerWrap
{ {
private: private:
@ -499,40 +503,31 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context)
sol::property([](const ExtractionWay &way) { return way.backward_restricted; }, sol::property([](const ExtractionWay &way) { return way.backward_restricted; },
[](ExtractionWay &way, bool flag) { way.backward_restricted = flag; })); [](ExtractionWay &way, bool flag) { way.backward_restricted = flag; }));
struct ExtractionRelationData
{
explicit ExtractionRelationData(ExtractionRelation::AttributesMap &attrs_) : attrs(attrs_)
{
}
ExtractionRelation::AttributesMap &attrs;
};
context.state.new_usertype<RelationsContainerWrap>( context.state.new_usertype<RelationsContainerWrap>(
"RelationsContainerWrap", "RelationsContainerWrap",
sol::meta_function::index, sol::meta_function::index,
[](const RelationsContainerWrap &rel, size_t index) { return rel.GetAttributes(index); }); [](const RelationsContainerWrap &rel, size_t index) { return rel.GetAttributes(index); });
context.state.new_usertype<ExtractionRelationData>( context.state.new_usertype<ExtractionRelation::AttributesMap>(
"ExtractionRelationData", "ExtractionRelationAttributes",
"size", "size",
[](const ExtractionRelationData &data) { return data.attrs.size(); }, [](const ExtractionRelation::AttributesMap &data) { return data.size(); },
sol::meta_function::new_index, sol::meta_function::new_index,
[](ExtractionRelationData &data, const std::string &key, sol::stack_object object) { [](ExtractionRelation::AttributesMap &data, const std::string &key, sol::stack_object object) {
return data.attrs[key] = object.as<std::string>(); return data[key] = object.as<std::string>();
}, },
sol::meta_function::index, sol::meta_function::index,
[](ExtractionRelationData &data, const std::string &key) { return data.attrs[key]; }); [](ExtractionRelation::AttributesMap &data, const std::string &key) { return data[key]; });
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 RelationMemberWrap &member) { [](ExtractionRelation &rel, const RelationMemberWrap &member) -> ExtractionRelation::AttributesMap& {
return ExtractionRelationData(rel.GetMember(member.ref())); return rel.GetMember(member.ref());
}, },
sol::meta_function::index, sol::meta_function::index,
[](ExtractionRelation &rel, const RelationMemberWrap &member) { [](ExtractionRelation &rel, const RelationMemberWrap &member) -> ExtractionRelation::AttributesMap& {
return ExtractionRelationData(rel.GetMember(member.ref())); return rel.GetMember(member.ref());
}, },
"restriction", "restriction",
sol::property([](const ExtractionRelation &rel) { return rel.is_restriction; }, sol::property([](const ExtractionRelation &rel) { return rel.is_restriction; },