diff --git a/include/extractor/extraction_relation.hpp b/include/extractor/extraction_relation.hpp index 98d2f515e..a7566b234 100644 --- a/include/extractor/extraction_relation.hpp +++ b/include/extractor/extraction_relation.hpp @@ -14,10 +14,7 @@ namespace extractor namespace detail { -inline const char * checkedString(const char * str) -{ - return str ? str : ""; -} +inline const char *checkedString(const char *str) { return str ? str : ""; } } // namespace detail @@ -25,10 +22,7 @@ struct ExtractionRelation { using AttributesMap = std::unordered_map; - ExtractionRelation() - : is_restriction(false) - { - } + ExtractionRelation() : is_restriction(false) {} void clear() { @@ -36,15 +30,9 @@ struct ExtractionRelation values.clear(); } - bool IsRestriction() const - { - return is_restriction; - } + bool IsRestriction() const { return is_restriction; } - AttributesMap & GetMember(util::OsmIDTyped id) - { - return values[id.Hash()]; - } + AttributesMap &GetMember(util::OsmIDTyped id) { return values[id.Hash()]; } bool is_restriction; std::unordered_map values; @@ -53,18 +41,18 @@ struct ExtractionRelation // It contains data of all parsed relations for each node/way element class ExtractionRelationContainer { -public: + public: using AttributesMap = ExtractionRelation::AttributesMap; using RelationList = std::vector; - void AddRelation(const ExtractionRelation & rel) + void AddRelation(const ExtractionRelation &rel) { BOOST_ASSERT(!rel.is_restriction); for (auto it : rel.values) data[it.first].push_back(it.second); } - const RelationList & Get(const util::OsmIDTyped & id) const + const RelationList &Get(const util::OsmIDTyped &id) const { const auto it = data.find(id.Hash()); if (it != data.end()) @@ -74,7 +62,7 @@ public: return empty; } -private: + private: // TODO: need to store more common data std::unordered_map data; }; diff --git a/include/extractor/extractor_callbacks.hpp b/include/extractor/extractor_callbacks.hpp index e91fd3d04..5819e4eff 100644 --- a/include/extractor/extractor_callbacks.hpp +++ b/include/extractor/extractor_callbacks.hpp @@ -90,7 +90,6 @@ class ExtractorCallbacks // warning: caller needs to take care of synchronization! void ProcessWay(const osmium::Way ¤t_way, const ExtractionWay &result_way); }; - } } diff --git a/include/extractor/scripting_environment.hpp b/include/extractor/scripting_environment.hpp index b93672365..7b72cf70b 100644 --- a/include/extractor/scripting_environment.hpp +++ b/include/extractor/scripting_environment.hpp @@ -62,14 +62,14 @@ class ScriptingEnvironment virtual void ProcessTurn(ExtractionTurn &turn) = 0; virtual void ProcessSegment(ExtractionSegment &segment) = 0; - virtual void - ProcessElements(const osmium::memory::Buffer &buffer, - const RestrictionParser &restriction_parser, - const ExtractionRelationContainer &relations, - std::vector> &resulting_nodes, - std::vector> &resulting_ways, - std::vector> &resulting_relations, - std::vector &resulting_restrictions) = 0; + virtual void ProcessElements( + const osmium::memory::Buffer &buffer, + const RestrictionParser &restriction_parser, + const ExtractionRelationContainer &relations, + std::vector> &resulting_nodes, + std::vector> &resulting_ways, + std::vector> &resulting_relations, + std::vector &resulting_restrictions) = 0; }; } } diff --git a/include/extractor/scripting_environment_lua.hpp b/include/extractor/scripting_environment_lua.hpp index 444244305..8ad33de99 100644 --- a/include/extractor/scripting_environment_lua.hpp +++ b/include/extractor/scripting_environment_lua.hpp @@ -1,9 +1,9 @@ #ifndef SCRIPTING_ENVIRONMENT_LUA_HPP #define SCRIPTING_ENVIRONMENT_LUA_HPP +#include "extractor/extraction_relation.hpp" #include "extractor/raster_source.hpp" #include "extractor/scripting_environment.hpp" -#include "extractor/extraction_relation.hpp" #include @@ -20,8 +20,12 @@ namespace extractor struct LuaScriptingContext final { - void ProcessNode(const osmium::Node &, ExtractionNode &result, const ExtractionRelationContainer::RelationList &relations); - void ProcessWay(const osmium::Way &, ExtractionWay &result, const ExtractionRelationContainer::RelationList &relations); + void ProcessNode(const osmium::Node &, + ExtractionNode &result, + const ExtractionRelationContainer::RelationList &relations); + void ProcessWay(const osmium::Way &, + ExtractionWay &result, + const ExtractionRelationContainer::RelationList &relations); void ProcessRelation(const osmium::Relation &, ExtractionRelation &result); ProfileProperties properties; @@ -69,14 +73,14 @@ class Sol2ScriptingEnvironment final : public ScriptingEnvironment void ProcessTurn(ExtractionTurn &turn) override; void ProcessSegment(ExtractionSegment &segment) override; - void - ProcessElements(const osmium::memory::Buffer &buffer, - const RestrictionParser &restriction_parser, - const ExtractionRelationContainer &relations, - std::vector> &resulting_nodes, - std::vector> &resulting_ways, - std::vector> &resulting_relations, - std::vector &resulting_restrictions) override; + void ProcessElements( + const osmium::memory::Buffer &buffer, + const RestrictionParser &restriction_parser, + const ExtractionRelationContainer &relations, + std::vector> &resulting_nodes, + std::vector> &resulting_ways, + std::vector> &resulting_relations, + std::vector &resulting_restrictions) override; private: LuaScriptingContext &GetSol2Context(); diff --git a/include/util/osm_id_typed.hpp b/include/util/osm_id_typed.hpp index 110d253e8..917483d75 100644 --- a/include/util/osm_id_typed.hpp +++ b/include/util/osm_id_typed.hpp @@ -10,26 +10,24 @@ namespace util class OsmIDTyped { -public: + public: using HashType = std::uint64_t; - OsmIDTyped(std::uint64_t id_, std::uint8_t type_) - : id(id_) - , type(type_) + OsmIDTyped(std::uint64_t id_, std::uint8_t type_) : id(id_), type(type_) { // check if type value not above type size bound BOOST_ASSERT(id_ < (std::uint64_t(1) << 56)); } - bool operator == (const OsmIDTyped &other) { return (id == other.id && type == other.type); } - bool operator != (const OsmIDTyped &other) { return (id != other.id || type != other.type); } + bool operator==(const OsmIDTyped &other) { return (id == other.id && type == other.type); } + bool operator!=(const OsmIDTyped &other) { return (id != other.id || type != other.type); } inline HashType Hash() const { return (std::uint64_t(id) | std::uint64_t(type) << 56); } std::uint64_t GetID() const { return id; } std::uint8_t GetType() const { return type; } -private: + private: std::uint64_t id : 56; std::uint8_t type; }; diff --git a/src/extractor/extractor.cpp b/src/extractor/extractor.cpp index d331bfa7e..cd3080f1e 100644 --- a/src/extractor/extractor.cpp +++ b/src/extractor/extractor.cpp @@ -3,8 +3,8 @@ #include "extractor/edge_based_edge.hpp" #include "extractor/extraction_containers.hpp" #include "extractor/extraction_node.hpp" -#include "extractor/extraction_way.hpp" #include "extractor/extraction_relation.hpp" +#include "extractor/extraction_way.hpp" #include "extractor/extractor_callbacks.hpp" #include "extractor/files.hpp" #include "extractor/raster_source.hpp" @@ -290,9 +290,10 @@ Extractor::ParseOSMData(ScriptingEnvironment &scripting_environment, const osmium::io::File input_file(config.input_path.string()); osmium::thread::Pool pool(number_of_threads); - std::unique_ptr reader( - new osmium::io::Reader(input_file, osmium::osm_entity_bits::relation, - (config.use_metadata ? osmium::io::read_meta::yes : osmium::io::read_meta::no))); + std::unique_ptr reader(new osmium::io::Reader( + input_file, + osmium::osm_entity_bits::relation, + (config.use_metadata ? osmium::io::read_meta::yes : osmium::io::read_meta::no))); osmium::io::Header header = reader->header(); @@ -396,7 +397,7 @@ Extractor::ParseOSMData(ScriptingEnvironment &scripting_environment, } }); - tbb::filter_t, void> buffer_storage_relation( + tbb::filter_t, void> buffer_storage_relation( tbb::filter::serial_in_order, [&](const std::shared_ptr parsed_buffer) { if (!parsed_buffer) return; @@ -429,8 +430,10 @@ Extractor::ParseOSMData(ScriptingEnvironment &scripting_environment, * processed there. */ util::Log() << "Parse ways and nodes ..."; - reader.reset(new osmium::io::Reader(input_file, osmium::osm_entity_bits::node | osmium::osm_entity_bits::way, - (config.use_metadata ? osmium::io::read_meta::yes : osmium::io::read_meta::no))); + reader.reset(new osmium::io::Reader( + input_file, + osmium::osm_entity_bits::node | osmium::osm_entity_bits::way, + (config.use_metadata ? osmium::io::read_meta::yes : osmium::io::read_meta::no))); // Number of pipeline tokens that yielded the best speedup was about 1.5 * num_cores tbb::parallel_pipeline(tbb::task_scheduler_init::default_num_threads() * 1.5, diff --git a/src/extractor/scripting_environment_lua.cpp b/src/extractor/scripting_environment_lua.cpp index 8381be937..66f6c3d0d 100644 --- a/src/extractor/scripting_environment_lua.cpp +++ b/src/extractor/scripting_environment_lua.cpp @@ -290,24 +290,18 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context) struct RelationMemberWrap { - explicit RelationMemberWrap(const osmium::RelationMember & member) - { - init(member); - } + explicit RelationMemberWrap(const osmium::RelationMember &member) { init(member); } - RelationMemberWrap() - : item_type(osmium::item_type::undefined) - { - } + RelationMemberWrap() : item_type(osmium::item_type::undefined) {} - void init(const osmium::RelationMember & member) + void init(const osmium::RelationMember &member) { role = member.role(); item_type = member.type(); id = member.ref(); } - const char* GetRole() const { return role.c_str(); } + const char *GetRole() const { return role.c_str(); } osmium::item_type GetItemType() const { return item_type; } osmium::object_id_type GetId() const { return id; } @@ -319,20 +313,13 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context) }; context.state.new_usertype( - "OsmIDTypes", - "id", - &util::OsmIDTyped::GetID, - "type", - &util::OsmIDTyped::GetType - ); + "OsmIDTypes", "id", &util::OsmIDTyped::GetID, "type", &util::OsmIDTyped::GetType); - context.state.new_usertype( - "RelationMember", - "role", - &RelationMemberWrap::GetRole, - "item_type", - &RelationMemberWrap::GetItemType - ); + context.state.new_usertype("RelationMember", + "role", + &RelationMemberWrap::GetRole, + "item_type", + &RelationMemberWrap::GetItemType); /** TODO: make better solution with members iteration. * For this moment, just make vector of RelationMember wrappers @@ -344,14 +331,15 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context) &osmium::Relation::id, "version", &osmium::Relation::version, - "members", [](const osmium::Relation &rel) - { - std::vector members(rel.members().size()); - size_t i = 0; - for (const auto & m : rel.members()) - members[i++].init(m); - return sol::as_table(std::move(members)); - }); + "members", + [](const osmium::Relation &rel) { + std::vector members( + rel.members().size()); + size_t i = 0; + for (const auto &m : rel.members()) + members[i++].init(m); + return sol::as_table(std::move(members)); + }); context.state.new_usertype("Node", "location", @@ -445,34 +433,37 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context) struct ExtractionRelationData { - explicit ExtractionRelationData(ExtractionRelation::AttributesMap & attrs_) - : attrs(attrs_) + explicit ExtractionRelationData(ExtractionRelation::AttributesMap &attrs_) : attrs(attrs_) { } - ExtractionRelation::AttributesMap & attrs; + ExtractionRelation::AttributesMap &attrs; }; context.state.new_usertype( "ExtractionRelationData", "size", - [](const ExtractionRelationData & data) { return data.attrs.size(); }, + [](const ExtractionRelationData &data) { return data.attrs.size(); }, sol::meta_function::new_index, - [](ExtractionRelationData & data, const std::string & key, sol::stack_object object) { return data.attrs[key] = object.as(); }, + [](ExtractionRelationData &data, const std::string &key, sol::stack_object object) { + return data.attrs[key] = object.as(); + }, sol::meta_function::index, - [](ExtractionRelationData & data, const std::string & key) { return data.attrs[key]; } - ); + [](ExtractionRelationData &data, const std::string &key) { return data.attrs[key]; }); context.state.new_usertype( "ExtractionRelation", sol::meta_function::new_index, - [](ExtractionRelation & rel, const RelationMemberWrap & member) { return ExtractionRelationData(rel.GetMember(member.ref())); }, + [](ExtractionRelation &rel, const RelationMemberWrap &member) { + return ExtractionRelationData(rel.GetMember(member.ref())); + }, sol::meta_function::index, - [](ExtractionRelation & rel, const RelationMemberWrap & member) { return ExtractionRelationData(rel.GetMember(member.ref())); }, + [](ExtractionRelation &rel, const RelationMemberWrap &member) { + return ExtractionRelationData(rel.GetMember(member.ref())); + }, "restriction", - sol::property([](const ExtractionRelation & rel) { return rel.is_restriction; }, - [](ExtractionRelation & rel, bool flag) { rel.is_restriction = flag; }) - ); + sol::property([](const ExtractionRelation &rel) { return rel.is_restriction; }, + [](ExtractionRelation &rel, bool flag) { rel.is_restriction = flag; })); context.state.new_usertype("ExtractionSegment", "source", @@ -565,8 +556,7 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context) util::Log() << "Using profile api version " << context.api_version; // version-dependent parts of the api - auto initV2Context = [&]() - { + auto initV2Context = [&]() { // clear global not used in v2 context.state["properties"] = sol::nullopt; @@ -758,7 +748,7 @@ void Sol2ScriptingEnvironment::ProcessElements( (!static_cast(*entity).tags().empty() || local_context.properties.call_tagless_node_function)) { - const osmium::Node & node = static_cast(*entity); + const osmium::Node &node = static_cast(*entity); const util::OsmIDTyped id(node.id(), std::uint8_t(node.type())); local_context.ProcessNode(node, result_node, relations.Get(id)); } @@ -769,7 +759,7 @@ void Sol2ScriptingEnvironment::ProcessElements( result_way.clear(); if (local_context.has_way_function) { - const osmium::Way & way = static_cast(*entity); + const osmium::Way &way = static_cast(*entity); const util::OsmIDTyped id(way.id(), std::uint8_t(way.type())); local_context.ProcessWay(way, result_way, relations.Get(id)); } @@ -790,10 +780,13 @@ void Sol2ScriptingEnvironment::ProcessElements( result_relation.clear(); if (local_context.has_relation_function) { - local_context.ProcessRelation(static_cast(*entity), result_relation); + local_context.ProcessRelation(static_cast(*entity), + result_relation); } - resulting_relations.push_back(std::pair( - static_cast(*entity), std::move(result_relation))); + resulting_relations.push_back( + std::pair( + static_cast(*entity), + std::move(result_relation))); } } break; @@ -1012,7 +1005,9 @@ void Sol2ScriptingEnvironment::ProcessSegment(ExtractionSegment &segment) } } -void LuaScriptingContext::ProcessNode(const osmium::Node &node, ExtractionNode &result, const ExtractionRelationContainer::RelationList &relations) +void LuaScriptingContext::ProcessNode(const osmium::Node &node, + ExtractionNode &result, + const ExtractionRelationContainer::RelationList &relations) { BOOST_ASSERT(state.lua_state() != nullptr); @@ -1031,7 +1026,9 @@ void LuaScriptingContext::ProcessNode(const osmium::Node &node, ExtractionNode & } } -void LuaScriptingContext::ProcessWay(const osmium::Way &way, ExtractionWay &result, const ExtractionRelationContainer::RelationList &relations) +void LuaScriptingContext::ProcessWay(const osmium::Way &way, + ExtractionWay &result, + const ExtractionRelationContainer::RelationList &relations) { BOOST_ASSERT(state.lua_state() != nullptr); @@ -1050,7 +1047,8 @@ void LuaScriptingContext::ProcessWay(const osmium::Way &way, ExtractionWay &resu } } -void LuaScriptingContext::ProcessRelation(const osmium::Relation &relation, ExtractionRelation &result) +void LuaScriptingContext::ProcessRelation(const osmium::Relation &relation, + ExtractionRelation &result) { BOOST_ASSERT(state.lua_state() != nullptr); BOOST_ASSERT(api_version > 2); diff --git a/unit_tests/mocks/mock_scripting_environment.hpp b/unit_tests/mocks/mock_scripting_environment.hpp index 088379cfa..07c01c839 100644 --- a/unit_tests/mocks/mock_scripting_environment.hpp +++ b/unit_tests/mocks/mock_scripting_environment.hpp @@ -34,13 +34,14 @@ class MockScriptingEnvironment : public extractor::ScriptingEnvironment void ProcessTurn(extractor::ExtractionTurn &) override final {} void ProcessSegment(extractor::ExtractionSegment &) override final {} - void ProcessElements(const osmium::memory::Buffer &, - const extractor::RestrictionParser &, - const extractor::ExtractionRelationContainer &, - std::vector> &, - std::vector> &, - std::vector> &, - std::vector &) override final + void ProcessElements( + const osmium::memory::Buffer &, + const extractor::RestrictionParser &, + const extractor::ExtractionRelationContainer &, + std::vector> &, + std::vector> &, + std::vector> &, + std::vector &) override final { } };